题意:长27的字符串,26个英文字母至少出现了一次。这个字符串是由两行13列的字符相邻行走得来,求这个两行13列的字符。
题解:思路很好想,找其中两个一样的字符,间距d,平分到两行。 注:以后写草稿要写清楚点。。被自己坑死了。。
#include<bits/stdc++.h> using namespace std; #pragma comment(linker, "/STACK:102400000,102400000") #define FF(i,a,b) for (int i=a;i<=b;i++) #define F(i,b,a) for (int i=b;i>=a;i--) #define mes(a,b) memset(a,b,sizeof(a)) #define INF 0x3f3f3f3f typedef long long ll; const int N = 2e5+10; int main() { string s; char s1[50], s2[50]; cin>>s; int a, b; FF(i,0,26) FF(j,0,i-1) if(s[i]==s[j]) a=j, b=i; int i, j, x=b-a, y=(x+1)/2; if(x==1) { puts("Impossible"); return 0; } for(i=12-y+1,j=a; i<=12; i++,j++) s1[i]=s[j]; for(i=12; j<b; i--,j++) s2[i]=s[j]; for(j=b+1; i>=0&&j<=26; i--,j++) s2[i]=s[j]; if(j==27) { for(j=0; i>=0&&j<a; i--,j++) s2[i]=s[j]; for(i=0; j<a; i++,j++) s1[i]=s[j]; } else { for(i=0; j<=26; i++,j++) s1[i]=s[j]; for(j=0; j<a; i++,j++) s1[i]=s[j]; } s1[13]=s2[13]='