【simple】1013解题报告

【考查点】开始以为是考查判断树,其实不是
【思路】一共有12个字母,所以可以定义个大小为12的char数组,又由于不一定是全部字母都出现,所以另外定义一个标志数组。为判断字母的轻重(初始化为0),定义一个int数组来保存轻重。具体如下:当遇到even是,标志该对比组的所有字母为真,int数组对这些字母无效。当遇到"up"时,左边的未标志为真的字母重量-1,右边未标志为真的+1,遇到“down”类似。最后对比所有未标志为真且出现过的字母的重量的绝对值,最大的为假,根据正负判断轻重。
【经验】审题,1,未必所有字母都出现,2对比组未必都是4个字母。

Code:
  1. #include <iostream>   
  2. #include <string>   
  3. using namespace std;   
  4.   
  5. char istrue[12];   
  6. char isuse[12];   
  7. int weight[12];   
  8. int main()   
  9. {   
  10.     int test;   
  11.     cin>>test;   
  12.     while(test--)   
  13.     {   
  14.         for(int i=0;i<12;i++)   
  15.         {   
  16.             istrue[i]='f';   
  17.             weight[i]=0;   
  18.             isuse[i]='f';   
  19.         }   
  20.         string s1,s2,s3;   
  21.         for(int i=0;i<3;i++)   
  22.         {   
  23.             cin>>s1>>s2>>s3;   
  24.             switch(s3[0])   
  25.             {   
  26.             case 'e':   
  27.                 for(int j=0;j<s1.size();j++)   
  28.                 {   
  29.                        
  30.                     istrue[s1[j]-65]='t';   
  31.                     isuse[s1[j]-65]='t';   
  32.                     isuse[s2[j]-65]='t';   
  33.                     istrue[s2[j]-65]='t';   
  34.                 }   
  35.                 break;   
  36.             case 'd':   
  37.                 for(int j=0;j<s1.size();j++)   
  38.                 {   
  39.                     isuse[s1[j]-65]='t';   
  40.                     isuse[s2[j]-65]='t';   
  41.                     weight[s1[j]-65]-=1;   
  42.                     weight[s2[j]-65]+=1;   
  43.                 }   
  44.                 break;   
  45.             case 'u':   
  46.                 for(int j=0;j<s1.size();j++)   
  47.                 {   
  48.                     isuse[s1[j]-65]='t';   
  49.                     isuse[s2[j]-65]='t';   
  50.                     weight[s1[j]-65]+=1;   
  51.                     weight[s2[j]-65]-=1;   
  52.                 }   
  53.                 break;   
  54.             }   
  55.         }   
  56.         int max=0;   
  57.         int maxi;   
  58.         for(int i=0;i<12;i++)   
  59.         {   
  60.             if(isuse[i]=='t'&&istrue[i]=='f')   
  61.             {   
  62.                 if(abs(weight[i])>max)   
  63.                 {   
  64.                     max=abs(weight[i]);   
  65.                     maxi=i;   
  66.                 }   
  67.             }   
  68.         }   
  69.         if(weight[maxi]<0)   
  70.             s3="light.";   
  71.         else  
  72.             s3="heavy.";   
  73.         cout<<char(maxi+65)<<" is the counterfeit coin and it is "<<s3<<endl;   
  74.     }   
  75.     return 0;   
  76. }  

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值