这题首先题意很难理解,搞了好久才基本上搞明白,然后又想怎么去敲代码,起初想的就是vector套个stack,
但是写着写着写残了,就换了vector数组的写法,写了一会发现又残了,重新回头写vetocr套stack,竟然想通了,
果断AC一发。卡时间过的,毕竟vector套栈,比较费时间。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<string>
#include<cctype>
#include<cmath>
#include<map>
#include<set>
#include<vector>
#include<queue>
#include<stack>
#define LL __int64
using namespace std;
vector< stack<string> > v;
bool is_match(string s,string ss)
{
if(s[0]==ss[0]||s[1]==ss[1])
return 1;
return 0;
}
int main()
{
string ss;
stack<string> cc;
while(cin>>ss&&ss[0]!='#')
{
v.clear();
// cout<<ss<<' ';
stack<string> cc;
cc.push(ss);
v.push_back(cc);
for(int i=1;i<52;i++)
{
stack<string> cc;
cin>>ss;
cc.push(ss);
v.push_back(cc);
}
while(1)
{
int i;
for(i=0;i<(int)v.size();i++)
{
if(i>=3&&is_match(v[i].top(),v[i-3].top()))
{
v[i-3].push(v[i].top());
v[i].pop();
break;
}
if(i>=1&&is_match(v[i].top(),v[i-1].top()))
{
v[i-1].push(v[i].top());
v[i].pop();
break;
}
}
if(i==(int)v.size()) break;
if(v[i].empty())
{
v.erase(v.begin()+i);
}
}
if((int)v.size()==1)
printf("1 pile remaining:");
else
printf("%d piles remaining:",v.size());
for(int i=0;i<(int)v.size();i++)
{
if(!v[i].empty())
cout<<' '<<v[i].size();
}
cout<<endl;
}
return 0;
}

本文详细探讨了一个在编码过程中遇到的挑战:理解复杂题意并优化算法效率。作者经历了从使用向量和栈的尝试到最终采用向量套栈的方法来解决问题的过程,并通过实例展示了如何通过代码优化来提高程序性能。
405

被折叠的 条评论
为什么被折叠?



