P10476 求调(代码不长)(玄关)
  • 板块灌水区
  • 楼主lhz2022
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/8/29 13:48
  • 上次更新2024/8/29 16:23:09
查看原帖
P10476 求调(代码不长)(玄关)
822439
lhz2022楼主2024/8/29 13:48
#include<bits/stdc++.h>
using namespace std;
#define N 1000007
int a[N],b[N];
int n;
int query(int c[]){
	int x=1,y=2;
	while(x<=n&&y<=n){
		int i;
		for(i=0;i<n&&c[i+x]==c[i+y];++i){}
		if(i==n) break;
		if(c[i+x]>c[i+y]){
			x+=i+1;
			if(x==y) ++x;
		}
		else{
			y+=i+1;
			if(x==y) ++y;
		}
	}
	return min(x,y);
}
signed main(){
	//freopen(".in","r",stdin);
	//freopen(".out","w",stdout);
	char ch;
	ch=getchar();
	while(ch!='\n'){
		a[++n]=ch-'0';
		ch=getchar();
	}
	n--;
	for(int i=1;i<=n;++i){
		scanf("%1d",b+i);
	}
	for(int i=1;i<=n;++i){
		a[n+i]=a[i];
		b[n+i]=b[i];
	}
	int x=query(a),y=query(b);
	int fl=1;
	for(int i=1;i<=n;++i){
		fl|=a[x+i-1]==b[y+i-1];
	}
	if(fl){
		puts("Yes");
		for(int i=1;i<=n;++i){
			printf("%d",a[x+i-1]);
		}
	}
	else{
		cout<<"No";
	}
	return 0;
}
2024/8/29 13:48
加载中...