Codeforces Round #328(Div2)

时间:2021-07-29 06:08:56

CodeForces 592A

题意:在8*8棋盘里,有黑白棋,F1选手(W棋往上-->最后至目标点:第1行)先走,F2选手(B棋往下-->最后至目标点:第8行)其次。棋子数不一定相等,F1,F2中其中一个           棋子最先到达目标点对应方胜利。

思路:W,B棋子分别只能上、下,所以需知道:离第一行最近的W棋距离S1(并且这个W上方没有B),离第八行最近的B棋距离S2(这个B下方没有W)

胜利者为 S1<=S2?F1:F2

注意:S1==S2时 F1胜。

代码:

 #include <iostream>
#include <cstdio>
#include <cstring>
using namespace std; char mp[][]; int main()
{
for(int i=;i<;i++)
scanf("%s",mp[i]);
int minb=,minw=,fw,fb,flagb;
for(int i=;i<;i++)
{
fw=;fb=;flagb=;
for(int j=;j<;j++)
{
if(mp[j][i]=='W')
{
if(flagb==)
fw=min(fw,j);
else
fb=;
}
if(mp[j][i]=='B')
{ flagb=;
fb=min(-j-,fb);
}
}
minb=min(minb,fb);
minw=min(minw,fw);
}
if(minb>=minw)
printf("A\n");
else
printf("B\n");
}

CodeForces 592B

题意:有n个点,点至点连线,若有阻隔,不可跳过。求被分隔成了多少块。当n=5时,如图所示。

Codeforces Round #328(Div2)

思路:找规律。第一个点至其他点会被分割成 n-2块。一次画每个点,分别记录相比前一个状态多出的块数。发现第一个点周围的两个点是n-3块。其余点为n-4块

所以有  f[n]=(n-2)+2*(n-3)+(n-3)*(n-4)  化简:f[n]=(n-2)^2

注意:不要爆int,用long long 或_int64 输出格式%I64d.

代码:

 #include <iostream>
#include <cstdio>
#include <cstring>
using namespace std; int main()
{
long long n;
scanf("%I64d",&n);
printf("%I64d\n", (n-)*(n-));
return ;
}