社区讨论

救救孩子

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 条回复,欢迎继续交流。

正在加载回复...