A:http://codeforces.com/problemset/problem/370/A
数学
#include<stdio.h>
#include<string.h>
#include<cmath>
#include<algorithm>
using namespace std;
int main()
{
int chess[10][10];
memset(chess,0,sizeof(chess));
for(int i = 1; i <= 8; i+=2)
{
for(int j = 2; j <= 8; j+=2)
chess[i][j] = 1;
}
for(int i = 2; i <= 8; i += 2)
{
for(int j = 1; j <= 8; j+=2)
chess[i][j] = 1;
}
int r1,c1,r2,c2;
int ans1,ans2,ans3;
while(~scanf("%d %d %d %d",&r1,&c1,&r2,&c2))
{
if(r1 == r2 && c1 == c2)
{
printf("0 0 0\n");
continue;
}
if(r1 == r2 || c1 == c2)
ans1 = 1;
else ans1 = 2;
if(chess[r1][c1] == chess[r2][c2])
{
if(abs(r1-r2) == abs(c1-c2))
ans2 = 1;
else ans2 = 2;
}
else ans2 = 0;
ans3 = max(abs(r1-r2),abs(c1-c2));
printf("%d %d %d\n",ans1,ans2,ans3);
}
return 0;
}
B: http://codeforces.com/problemset/problem/370/B
如果第i个是第j个的子集,第j个输出NO,如果没有任何一个集合是第j个的子集,输出YES
#include<stdio.h>
#include<string.h>
int main()
{
int a[110][110];
int cnt[110],x,n;
while(~scanf("%d",&n))
{
memset(a,0,sizeof(a));
for(int i = 0; i < n; i++)
{
scanf("%d",&cnt[i]);
for(int j = 0; j < cnt[i]; j++)
{
scanf("%d",&x);
a[i][x]++;
}
}
for(int i = 0; i < n; i++)
{
int flag = 1;
for(int j = 0; j < n && flag; j++)
{
if(i == j) continue;
flag = 0;
for(int k = 1; k <= 100&&!flag; k++)
{
if(a[j][k] && !a[i][k])
flag = 1;
}
}
if(flag)
printf("YES\n");
else printf("NO\n");
}
}
return 0;
}