next_permutation toj,poj 上习题小结

来源:互联网 发布:c语言win32编程 编辑:程序博客网 时间:2024/05/16 06:28
//next_permutation--sample#include<iostream>#include<algorithm>using namespace std;int main(){   int a[10],n;   cin>>n;   for(int i=0;i<n;i++)        cin>>a[i];   sort(a,a+n);    while(next_permutation(a,a+n))   {        for(int i=0;i<n;i++)            cout<<a[i];        cout<<endl;                                 }   system("pause");   return 0;   } 
//toj3072#include<iostream>#include<cstdio>#include<stack>#include<algorithm>using namespace std;int a[11];int judge(int *a,int n){    stack <int> v;    int i,k=0;    for(i=1;i<=n;i++)    {        v.push(i);        if(i==a[k])        {            while(!v.empty()&&v.top()==a[k])             {               v.pop();               k++;                                          }                  }                     }     if(v.empty())return 1;    else return 0;}int main(){    int i,n,t,j;    scanf("%d",&t);    while(t--)    {        scanf("%d",&n);        for(i=0;i<n;i++)           a[i]=i+1;         do        {           if(judge(a,n))             {               for(j=0;j<n;j++)               printf("%d",a[j]);               printf("\n");                           }                 }while(next_permutation(a,a+n));            }    return 0;   }
//poj3785#include<iostream>#include<algorithm>using namespace std;int main(){   char a[90];   int t;   cin>>t;   for(int i=1;i<=t;i++)   {       cin>>i>>a;        int len=strlen(a);       if(next_permutation(a,a+len)==true)       cout<<i<<" "<<a<<endl;       else cout<<i<<" "<<"BIGGEST"<<endl;          }    return 0;  }  
//poj1146#include<iostream>#include<cstring>#include<algorithm>using namespace std;int main(){    char a[60];    while(cin>>a)    {        if(strcmp(a,"#")==0)break;          int len=strlen(a);        if(next_permutation(a,a+len)==1)            cout<<a<<endl;         else cout<<"No Successor"<<endl;          }    return 0;   }
//1833poj#include<iostream>#include<cstdio>#include<algorithm>using namespace std;int main(){    int t,n,k;    int a[1030];    scanf("%d",&t);    while(t--)    {         scanf("%d%d",&n,&k);         for(int i=0;i<n;i++)             scanf("%d",&a[i]);          while(k--)         {             next_permutation(a,a+n);                   }              for(int i=0;i<n;i++)                  printf("%d ",a[i]);          printf("\n");                      }    return 0;   }
以上的题都是next_permutation的应用,晚上就要机考了···检验最近学习成果的时候到了···求给力!




原创粉丝点击