【考查点】开始以为是考查判断树,其实不是
【思路】一共有12个字母,所以可以定义个大小为12的char数组,又由于不一定是全部字母都出现,所以另外定义一个标志数组。为判断字母的轻重(初始化为0),定义一个int数组来保存轻重。具体如下:当遇到even是,标志该对比组的所有字母为真,int数组对这些字母无效。当遇到"up"时,左边的未标志为真的字母重量-1,右边未标志为真的+1,遇到“down”类似。最后对比所有未标志为真且出现过的字母的重量的绝对值,最大的为假,根据正负判断轻重。
【经验】审题,1,未必所有字母都出现,2对比组未必都是4个字母。
- #include <iostream>
- #include <string>
- using namespace std;
- char istrue[12];
- char isuse[12];
- int weight[12];
- int main()
- {
- int test;
- cin>>test;
- while(test--)
- {
- for(int i=0;i<12;i++)
- {
- istrue[i]='f';
- weight[i]=0;
- isuse[i]='f';
- }
- string s1,s2,s3;
- for(int i=0;i<3;i++)
- {
- cin>>s1>>s2>>s3;
- switch(s3[0])
- {
- case 'e':
- for(int j=0;j<s1.size();j++)
- {
- istrue[s1[j]-65]='t';
- isuse[s1[j]-65]='t';
- isuse[s2[j]-65]='t';
- istrue[s2[j]-65]='t';
- }
- break;
- case 'd':
- for(int j=0;j<s1.size();j++)
- {
- isuse[s1[j]-65]='t';
- isuse[s2[j]-65]='t';
- weight[s1[j]-65]-=1;
- weight[s2[j]-65]+=1;
- }
- break;
- case 'u':
- for(int j=0;j<s1.size();j++)
- {
- isuse[s1[j]-65]='t';
- isuse[s2[j]-65]='t';
- weight[s1[j]-65]+=1;
- weight[s2[j]-65]-=1;
- }
- break;
- }
- }
- int max=0;
- int maxi;
- for(int i=0;i<12;i++)
- {
- if(isuse[i]=='t'&&istrue[i]=='f')
- {
- if(abs(weight[i])>max)
- {
- max=abs(weight[i]);
- maxi=i;
- }
- }
- }
- if(weight[maxi]<0)
- s3="light.";
- else
- s3="heavy.";
- cout<<char(maxi+65)<<" is the counterfeit coin and it is "<<s3<<endl;
- }
- return 0;
- }