题解 P6014 【[CSGRound3]斗牛】
怎么感觉楼上楼下的
正文开始
众所周知,这道题目直接枚举虽然我没试过haha),貌似会得到
但是,如果让我们来枚举剩下的两个数就非常容易了(效率就能高一大截,并拿到
萌新:诶,打住打住,那怎么判断剩下数的和是不是
作者:你先在输入的时候把和累加一下,然后再减去枚举的两个数不就行了嘛~
其实(呵呵),这题剩下的两个数根本就不用枚举!!!吓死我了
我们把所有和都累加起来,得到一个值(比如说是被吓死*2
萌新是的我又来了:诶,那把这个
是的,这回楼上回的没错。因为给定的数是
这么一来,我们不就做完了吗???被吓死*3
那我们只要:
①开一个数组,累计10就是来打酱油的)
②计算所有数之和并
③判断能否用两个数字组成所有数之和
例如:
最优一发
另外吐槽这题有黄题难度吗qaq
正解应该不算难想吧
#include<bits/stdc++.h>
using namespace std;
int n;
int a[15];//定义累计数字数组
long long ans=0;//其实这里用int就够了,不过保险起见&内存充足时用long long还是万无一失吧
int main()
{
cin>>n;
int x;
for(int i=1;i<=n;i++)
{
scanf("%d",&x);//输入每个数字
if(x==10) a[0]++;//10跟0没区别呀~
else a[x]++;
ans+=x%10;//累加
}
int t=ans%10;
//以下是略长的判断过程
if(t==0) if(a[0]>=2||a[1]&&a[9]||a[2]&&a[8]||a[3]&&a[7]||a[4]&&a[6]||a[5]>=2) cout<<10<<endl; else cout<<0<<endl;
if(t==1) if(a[0]&&a[1]||a[2]&&a[9]||a[3]&&a[8]||a[4]&&a[7]||a[5]&&a[6]) cout<<1<<endl; else cout<<0<<endl;
if(t==2) if(a[0]&&a[2]||a[1]>=2||a[3]&&a[9]||a[4]&&a[8]||a[5]&&a[7]||a[6]>=2) cout<<2<<endl; else cout<<0<<endl;
if(t==3) if(a[0]&&a[3]||a[1]&&a[2]||a[4]&&a[9]||a[5]&&a[8]||a[6]&&a[7]) cout<<3<<endl; else cout<<0<<endl;
if(t==4) if(a[0]&&a[4]||a[1]&&a[3]||a[2]>=2||a[5]&&a[9]||a[6]&&a[8]||a[7]>=2) cout<<4<<endl; else cout<<0<<endl;
if(t==5) if(a[0]&&a[5]||a[1]&&a[4]||a[2]&&a[3]||a[6]&&a[9]||a[7]&&a[8]) cout<<5<<endl; else cout<<0<<endl;
if(t==6) if(a[0]&&a[6]||a[1]&&a[5]||a[2]&&a[4]||a[3]>=2||a[7]&&a[9]||a[8]>=2) cout<<6<<endl; else cout<<0<<endl;
if(t==7) if(a[0]&&a[7]||a[1]&&a[6]||a[2]&&a[5]||a[3]&&a[4]||a[8]&&a[9]) cout<<7<<endl; else cout<<0<<endl;
if(t==8) if(a[0]&&a[8]||a[1]&&a[7]||a[2]&&a[6]||a[3]&&a[5]||a[4]>=2||a[9]>=2) cout<<8<<endl; else cout<<0<<endl;
if(t==9) if(a[0]&&a[9]||a[1]&&a[8]||a[2]&&a[7]||a[3]&&a[6]||a[4]&&a[5]) cout<<9<<endl; else cout<<0<<endl;
//如上,依次判断能不能有两个数字组成ans%10或ans%10+10即可
return 0;//完 结 撒 花
}