题解
2023-08-03 21:47:28
发布于:四川
18阅读
0回复
0点赞
这个题直接模拟即可,考虑到要删除大量东西,于是乎我们用链表(删除插入都是O(1) 的,唯一缺点就是不能快速随机访问)。
吐槽一句:数据太弱,试了顶峰数据不至于跑到10ms吧(是停顿了大概0.5s后出来的,还是单点测试)
代码:
#include <iostream>
#include <vector>
#include <forward_list>
using namespace std;
int main(){
int t;
cin >> t;
while (t--){
int n;
cin >> n;
forward_list<int> l;
for (int i=n-1;i>=0;--i){
l.emplace_front(i);
}
int len=n;
while (len>3){
vector<int> f;
auto it=l.begin();
for (int i=0;i<len;++i,++it){
if ((i+1)%2==0){
f.emplace_back(*it);
}
}
for (const auto &item : f){
--len;
l.remove(item);
}
if (len<=3){
break;
}
f.clear();
it=l.begin();
for (int i=0;i<len;++i,++it){
if ((i+1)%3==0){
f.emplace_back(*it);
}
}
for (const auto &item : f){
--len;
l.remove(item);
}
}
for (const auto &item : l){
cout<<item+1<<" ";
}
cout<<"\n";
}
return 0;
}
这里空空如也
有帮助,赞一个