- #include<iostream>
- #include<cstdio>
- #include<cstring>
- #include<cstdlib>
- #include<cmath>
- #include<algorithm>
- #include<vector>
- #include<queue>
- #include<stack>
- #define Max(a,b) ((a)>(b)?(a):(b))
- #define Min(a,b) ((a)<(b)?(a):(b))
- #define Swap(a,b,t) t=a,a=b,b=t
- #define Mem0(x) memset(x,0,sizeof(x))
- #define Mem1(x) memset(x,-1,sizeof(x))
- #define MemX(x) memset(x,0x3f,sizeof(x));
- using namespace std;
- typedef long long ll;
- const int inf=0x3f3f3f;
- const double eps=1e-12;
- char str[10000010],s[110],temp[110];
- bool vis[110];
- int len,cnt=0,num[110];
- void Solve()
- {
- int len1=strlen(str);
- strcat(str,temp);
- str[len1+len]='a';
- cout<<temp<<endl;
- }
- void bfs(int index)
- {
- if (index==len&&!strstr(str,temp)){ // 超时的主要原因在这里 strstr(str,temp) 当执行到后文, str 足够长, 次数过多的时候, 遍历时间就会加长许多, 因此超时.
- cnt++;
- Solve();
- return ;
- }
- int i,j;
- for (j=0;j<len;j++){
- if (!vis[j]){
- temp[index]=s[j];
- vis[j]=true;
- bfs(index+1);
- vis[j]=false;
- }
- }
- }
- bool cmp(int a,int b)
- {
- return a<b;
- }
- int main()
- {
- cin>>s;
- len=strlen(s);
- for (int i=0;i<len;i++){
- num[i]=s[i]-'0';
- }
- sort(num,num+len,cmp);
- for (int i=0;i<len;i++){
- s[i]=num[i]+'0';
- }
- bfs(0);
- return 0;
- }
来源: http://www.bubuko.com/infodetail-2699633.html