码迷,mamicode.com
首页 > 其他好文 > 详细

127 - "Accordian" Patience

时间:2015-03-09 14:28:41      阅读:133      评论:0      收藏:0      [点我收藏+]

标签:acm   uva   

很简单呢的一道题,定义了一个结构体数组,用vector来做为一个牌堆。将尾部作为牌堆的顶部。

要注意,当最后只剩一堆牌的时候,答案中的pile不加s

#include<bits/stdc++.h>
using namespace std;
const int maxn = 60;
int b[60];
struct pile {
    vector<string> a;
};
int main() {
    ios::sync_with_stdio(false);
    string buf;
    while(cin>>buf) {
        if(buf=="#") break;
        pile s[maxn];
        s[1].a.push_back(buf);
        for(int i=2;i<=52;i++){
            cin>>buf;
            s[i].a.push_back(buf);
        }
        while(1) {
            bool flage=false;
            for(int i=2;i<=52;i++){
                if(!s[i].a.empty()){
                    int kase=0,x; bool cnt=false,bbc=true;
                    for(int j=i;j>=1;j--){
                        if(!s[j].a.empty()) kase++;
                        if(kase==2&&bbc) {
                            if((s[i].a.back()[0]==s[j].a.back()[0]||s[i].a.back()[1]==s[j].a.back()[1])) { x=j; cnt=true; }
                            bbc=false;
                        }
                        if(kase<4&&j==1&&cnt){
                            s[x].a.push_back(s[i].a.back()); s[i].a.pop_back(); flage=true; break;
                        }
                        if(kase==4&&(s[i].a.back()[0]==s[j].a.back()[0]||s[i].a.back()[1]==s[j].a.back()[1])){
                            s[j].a.push_back(s[i].a.back()); s[i].a.pop_back(); flage=true; break;
                        }
                        else if(kase==4&&cnt) {
                            s[x].a.push_back(s[i].a.back()); s[i].a.pop_back(); flage=true; break;
                        }
                        else if(kase==4) break;
                    }
                }
                if(flage) break;
            }
            if(!flage) break;
        }
         int ans=0;
        for(int i=1;i<=52;i++)
        if(!s[i].a.empty()) { b[ans]=s[i].a.size();ans++; }
        if(ans!=1)
        cout<<ans<<" piles remaining:";
        else cout<<ans<<" pile remaining:";
        for(int i=0;i<ans;i++)
            cout<<" "<<b[i];
        cout<<"\n";
    }
    return 0;
}


127 - "Accordian" Patience

标签:acm   uva   

原文地址:http://blog.csdn.net/weizhuwyzc000/article/details/44154069

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!