查看: 1673|回復: 0
打印 上一主題 下一主題

[UVa] [ZJ]608 - c093 - Counterfeit Dollar

[複製鏈接]
  • TA的每日心情
    慵懶
    2015-4-10 14:18
  • 簽到天數: 78 天

    [LV.6]常住居民II

    176

    主題

    612

    帖子

    3959

    積分

    管理員

    Rank: 9Rank: 9Rank: 9

    積分
    3959

    台南一中資訊社新手達陣程式設計達人 - 2014

    跳轉到指定樓層
    樓主
    發表於 2014-5-17 15:34:54 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式

    趕快加入我們來參與討論吧!

    您需要 登錄 才可以下載或查看,沒有帳號?加入我們

    x
    原題:http://zerojudge.tw/ShowProblem?problemid=c093
    AC:http://zerojudge.tw/Submissions?problemid=c093&account=lfs92002

    按題意模擬,嘗試哪一個分配滿足題目需求,找到即可。下提供兩範例供參考,差別於函數寫法

    C++11 Lambda範例
    #include<cstdio>
  • #include<iostream>
  • #include<string>
  • #include<algorithm>
  • using namespace std;

  • int w[12]={0};
  • string l[3],r[3],t[3];

  • bool express(int i){
  •     int Lw=0,Rw=0;
  •     for_each(l[i].begin(),l[i].end(),[&](char c){Lw+=w[c-'A'];});
  •     for_each(r[i].begin(),r[i].end(),[&](char c){Rw+=w[c-'A'];});
  •     if(t[i]=="even"&&Lw==Rw)return true;
  •     if(t[i]=="up"  &&Lw> Rw)return true;
  •     if(t[i]=="down"&&Lw< Rw)return true;
  •     return false;
  • }

  • int main()
  • {
  •     char words[][10]={"heavy","light"};
  •     int T,mod;
  •     char ans;
  •    
  •     cin>>T;
  •     while(T--){
  •         for(int i=0;i<3;++i){
  •             cin>>l[i]>>r[i]>>t[i];
  •         }
  •         for(int i=0;i<12;++i){
  •             w[i]=1;
  •             if(express(0)&&express(1)&&express(2)){
  •                 ans='A'+i;mod=0;w[i]=0;
  •                 break;
  •             }
  •             w[i]=-1;
  •             if(express(0)&&express(1)&&express(2)){
  •                 ans='A'+i;mod=1;w[i]=0;
  •                 break;
  •             }
  •             w[i]=0;
  •         }
  •         printf("%c is the counterfeit coin and it is %s.\n",ans,words[mod]);
  •     }
  •     return 0;
  • }

  • C++原始模擬函式範例
    #include<cstdio>
  • #include<iostream>
  • #include<string>
  • #include<algorithm>
  • using namespace std;

  • int w[12]={0};
  • string l[3],r[3],t[3];
  • class func{
  •     public:
  •         int *var;
  •         func(int *ptr){var=ptr;}
  •         void operator() (char c){
  •             *var+=w[c-'A'];
  •         }
  • };
  • bool express(int i){
  •     int Lw=0,Rw=0;
  •     for_each(l[i].begin(),l[i].end(),func(&Lw));
  •     for_each(r[i].begin(),r[i].end(),func(&Rw));
  •     if(t[i]=="even"&&Lw==Rw)return true;
  •     if(t[i]=="up"  &&Lw> Rw)return true;
  •     if(t[i]=="down"&&Lw< Rw)return true;
  •     return false;
  • }

  • int main()
  • {
  •     char words[][10]={"heavy","light"};
  •     int T,mod;
  •     char ans;
  •    
  •     cin>>T;
  •     while(T--){
  •         for(int i=0;i<3;++i){
  •             cin>>l[i]>>r[i]>>t[i];
  •         }
  •         for(int i=0;i<12;++i){
  •             w[i]=1;
  •             if(express(0)&&express(1)&&express(2)){
  •                 ans='A'+i;mod=0;w[i]=0;
  •                 break;
  •             }
  •             w[i]=-1;
  •             if(express(0)&&express(1)&&express(2)){
  •                 ans='A'+i;mod=1;w[i]=0;
  •                 break;
  •             }
  •             w[i]=0;
  •         }
  •         printf("%c is the counterfeit coin and it is %s.\n",ans,words[mod]);
  •     }
  •     return 0;
  • }






  • 回復

    使用道具 檢舉

    您需要登錄後才可以回帖 登入 | 加入我們

    本版積分規則

    快速回覆 返回頂部 返回列表