买票,初始是20排,每排五个空座。交给很多人买,一个人可以买一到5数量不等,尽量的选取全相邻买,如果不能全相邻,那就全部编号最小去买,有空座就买入。
我在提交的时候总是提交不过去,一直都是90分,后来去搜索其他人的答案的时候,有条评论说它的代码不能通过21 20个4,1个5,我就去试了一下我的,发现也是通不过去。知道了有问题的案例,
就很容易调试出bug了,这才发现是其中p判断是否等于0的一个判断等号写成了赋值=,发生错误,为此浪费的很多时间,实在是可惜。
#include <iostream> #include <vector> using namespace std; int main() { int n; cin>>n; vector<vector<int>> res; vector<int> v; for(int i=0;i<n;i++) { int p; cin>>p; if(v.size()<20) v.push_back(5); vector<int> temp; bool s=false; for(int j=0;j<v.size();j++) { if(p<=v[j]) { s=true; for(int k=0;k<p;k++) { temp.push_back(5-v[j]+k+1+j*5); } v[j]-=p; break; } } //要么就是放进去了,要么就是无法相邻放进去,无法相邻放进去的时候从编号最小的空闲开始 if(!s) { for(int j=0;j<v.size();j++) { if(v[j]>0) { if(p>=v[j]) { p-=v[j]; for(int k=0;k<v[j];k++) { temp.push_back(5-v[j]+k+1+j*5); } v[j]=0; } else if(p<v[j]) { for(int k=0; k<p;k++) { temp.push_back(5-v[j]+k+1+j*5); } v[j]-=p; p=0; } if(p==0) break; } } } res.push_back(temp); temp.clear(); } for(int i=0;i<res.size();i++) { for(int j=0;j<res[i].size();j++) { cout<<res[i][j]<<‘ ‘; } cout<<endl; } return 0; }
原文地址:https://www.cnblogs.com/awangkuo/p/12628415.html
时间: 2024-10-11 14:36:07