做了这一题深有感触,发现"思想"对于一个ACMer来说是多么的重要。。。
碰到这一题首先是感觉没有什么思路,然后开始苦苦的找规律,找了好久发现,如果两个点互为对角线顶点,就不能相互抵消值
然后就开始写,越写就越恶心,于是就暴力+暴力,终于写完了,抱着求WA的决心,提交了一下,竟然AC了。
#include<stdio.h>
int main()
{
int n,i,sum,count,j;
struct stu
{
int k;
int flag;
}a[9];
scanf("%d",&n);
while(n--)
{
sum=0;count=0;
for(i=0;i<8;i++)
{
if(i==0||i==2||i==5||i==7)
a[i].flag=1;
else
a[i].flag=2;
scanf("%d",&a[i].k);
sum+=a[i].k;
}
if(sum&1) printf("NO\n");
else
{
for(i=0;i<8;i++)
{
if(a[i].k>0)
{
for(j=0;j<8;j++)
{
if(a[j].flag!=a[i].flag)
{
while(a[i].k&&a[j].k)
{
a[i].k--;
a[j].k--;
}
}
}
}
}
for(i=0;i<8;i++)
count+=a[i].k;
if(count==0) printf("YES\n");
else printf("NO\n");
}
}
return 0;
}
然后,看看szhhck的代码,记得他很久前就跟我说过这道题,发现他的代码真是牛叉,相当精辟,Orz呀,思想真的很重要,如果这道题数据再强大点,我的肯定会WA
#include<stdio.h>
int a[8];
int main()
{
int n,i;
scanf("%d",&n);
while(n--)
{
for(i=0;i<8;i++)
scanf("%d",&a[i]);
for(i=1;i<4;i++)
{
a[i]-=a[i-1];
a[i+4]-=a[i+3];
}
printf("%s\n",a[7]-a[3]?"NO":"YES");
}
}