社区讨论
救救孩子
P10312 [SHUPC 2024] 栅栏密码参与者 6已保存回复 10
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 10 条
- 当前快照
- 1 份
- 快照标识符
- @m1ug71yd
- 此快照首次捕获于
- 2024/10/04 16:13 去年
- 此快照最后确认于
- 2025/11/04 18:06 4 个月前
CPP
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,cnt,a[20];
string s,s1;
queue<char> q[20];
signed main(){
cin>>n>>s; cnt=2*n-2;
if(n==1){
cout<<s;
return 0;
}
int b=s.size()/cnt,y=s.size()%cnt,d=y%n,l=s.size();
for(int i=0;i<b;i++) q[1].push(s[i]);//首
if(y>0) q[1].push(s[b]),s.erase(0,b+1);
else s.erase(0,b);
for(int i=2;i<n;i++){
a[i]=b*2;
if(i<=y) a[i]++;
}
if(d>y){//多出一半
for(int i=n-1;i>1;i--){
if(i<=d) a[i]++;
}
}
for(int i=2;i<n;i++){//中间
for(int j=0;j<a[i];j++){
q[i].push(s[0]);
s.erase(0,1);
}
}
for(int i=0;i<s.size();i++) q[n].push(s[i]);//尾
for(int i=1;i<=n;i++){
s1+=q[i].front(); q[i].pop();
}
while(s1.size()<l){
for(int i=n-1;i>=1;i--){
if(!q[i].empty()){
s1+=q[i].front(); q[i].pop();
}
}
for(int i=2;i<=n;i++){
if(!q[i].empty()){
s1+=q[i].front(); q[i].pop();
}
}
}
cout<<s1;
return 0;
}
回复
共 10 条回复,欢迎继续交流。
正在加载回复...