社区讨论
35pts 求条,已通过所有讨论区中的 hack
P8866[NOIP2022] 喵了个喵参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @mib40bfs
- 此快照首次捕获于
- 2025/11/23 10:39 3 个月前
- 此快照最后确认于
- 2025/11/23 12:42 3 个月前
CPP
#include<bits/stdc++.h>
using namespace std;
const int N=605,M=2e6+5;
int n,m,k,a[M];
deque<int> stk[N];
vector<array<int,3> >ans;
vector<int> vis[N],tim[N];
void add(int i,int x){
vis[a[i]].push_back(x);
stk[x].push_back(a[i]);
ans.push_back({1,x,0});
}
void solve(){
cin>>n>>m>>k;
for(int i=1;i<=n;i++)
stk[i].clear();
for(int i=1;i<=m;i++)
cin>>a[i],vis[a[i]].clear();
int cnt=0;
ans.clear();
for(int i=1;i<=m;i++){
if(vis[a[i]].size()){
cnt--;
if(stk[vis[a[i]].back()].back()==a[i]){
ans.push_back({1,vis[a[i]].back(),0});
stk[vis[a[i]].back()].pop_back();
vis[a[i]].pop_back();
}
else if(stk[vis[a[i]].back()].front()==a[i]){
ans.push_back({1,n,0});
ans.push_back({2,vis[a[i]].back(),n});
stk[vis[a[i]].back()].pop_front();
vis[a[i]].pop_back();
}
else goto fl2;
continue;
}
cnt++;
if(cnt==k){
fl2:;
for(int j=1;j<n;j++)
if(stk[j].size()<=1){
add(i,j);
goto fl;
}
for(int j=1;j<=k;j++)
tim[j].clear();
for(int j=i+1;j<=m;j++){
if(a[j]==a[i]) break;
tim[a[j]].push_back(j);
}
for(int j=1;j<n;j++){
if(tim[stk[j].back()].size()%2==0||(tim[stk[j].front()].size()&&tim[stk[j].back()].back()>tim[stk[j].front()].front())){
add(i,j);
goto fl;
}
}
add(i,n);
fl:;
}
else{
int mn=1;
for(int i=2;i<n;i++)
if(stk[i].size()<stk[mn].size()) mn=i;
add(i,mn);
}
}
for(int i=1;i<=n;i++)
assert(stk[i].size()==0);//官方数据在这里错了
cout<<ans.size()<<'\n';
for(auto [a,b,c]:ans){
cout<<a<<' '<<b;
if(c) cout<<' '<<c;
cout<<'\n';
}
}
int main(){
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
int T;cin>>T;
while(T--) solve();
return 0;
}
回复
共 0 条回复,欢迎继续交流。
正在加载回复...