随笔-68  评论-10  文章-0  trackbacks-0
题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=103&page=show_problem&problem=63
此题若按每发一张牌就处理一次会TLE.
#include <iostream>
#include 
<cstddef>
#include 
<string>
#include 
<vector>
#include 
<stack>
using namespace std;

inline 
bool Match(const string &s1, const string &s2)
{
    
return s1[0== s2[0|| s1[1== s2[1];
}


int main()
{
    
string s;
    vector
< stack<string> > piles;
    
while(cin >> s && s != "#")
    
{
        stack
<string> tmp;
        tmp.push(s);
        piles.push_back(tmp);
        
if(piles.size() == 52)
        
{
            
while(true)
            
{
                size_t i;
                
for(i = 0; i != piles.size(); ++i)
                
{
                    
if(i >=3 && Match(piles[i].top(), piles[i - 3].top()))
                    
{
                        piles[i 
- 3].push(piles[i].top());
                        piles[i].pop();
                        
break;
                    }

                    
if(i >= 1 && Match(piles[i].top(), piles[i - 1].top()))
                    
{
                        piles[i 
- 1].push(piles[i].top());
                        piles[i].pop();
                        
break;
                    }

                }

                
if(i == piles.size()) break;
                
else if(piles[i].empty())
                
{
                    piles.erase(piles.begin() 
+ i);
                }

            }

            cout 
<< piles.size() << (piles.size() == 1 ? " pile remaining:" : " piles remaining:");
            
for(size_t i = 0; i != piles.size(); ++i) cout << ' ' << piles[i].size();
            cout 
<< endl;

            piles.clear();
        }

    }

    
return 0;
}

posted on 2011-11-15 00:03 wuxu 阅读(459) 评论(0)  编辑 收藏 引用 所属分类: 模拟

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理