Beautiful Ip address

来源:互联网 发布:服务器带宽测试软件 编辑:程序博客网 时间:2024/05/01 09:11
292C
#include<iostream>#include<set>#include<vector>#include<cstring>using namespace std;int n;int used[20],t[20],temp[20],A[20],used1[20];string a[10],s,s1;char c[11];set<string>pd;set<int>visit;vector<string>ans;void dfs2(int d,int dot,int len){if(d==0){//for(int i=1;i<=len;i++)//cout<<t[i]; //cout<<endl;}if(dot==5&&d==len){s="";s1="";int pos=0;for(int i=1;i<=4;i++){//cout<<a[i]<<endl;for(int j=0;j<a[i].length();j++){pos=j;if(a[i][j]!='0'&&a[i][j]!='.')break;}//cout<<"pos="<<pos<<endl;if(i!=1)s=s+'.';for(int j=pos;j<a[i].length();j++){s=s+a[i][j];s1=s1+a[i][j];}}int l=0;int r=s1.length()-1;visit.clear();while(s1[l]==s1[r]){visit.insert(s1[l]-'0');visit.insert(s1[r]-'0');if(l>r)break;l++;r--;}for(int i=1;i<=n;i++)if(!visit.count(A[i]))return;if(l>r&&!pd.count(s)){ans.push_back(s);pd.insert(s);}return;} if(dot==5&&d!=len)return;if(d+(5-dot)*3<len||d+5-dot>len)return;if(d+1<=len){a[dot]=a[dot]+c[t[d+1]];dfs2(d+1,dot+1,len);a[dot]="";}if(d+2<=len){a[dot]=a[dot]+c[t[d+1]];a[dot]=a[dot]+c[t[d+2]];dfs2(d+2,dot+1,len);a[dot]="";}int temp=0;for(int i=d+1;i<=d+3;i++){temp*=10;temp+=t[i];}if(d+3<=len&&temp<256){a[dot]=a[dot]+c[t[d+1]];a[dot]=a[dot]+c[t[d+2]];a[dot]=a[dot]+c[t[d+3]];dfs2(d+3,dot+1,len);a[dot]="";}}void Copy1(int l){memset(t,0,sizeof(t));for(int i=1;i<=l;i++)t[i]=temp[i];for(int i=l+1;i<=2*l;i++)t[i]=temp[2*l-i+1];//cout<<"cpy1:";//for(int i=1;i<=2*l;i++)//cout<<t[i]<<" ";//cout<<endl;}void Copy2(int l){memset(t,0,sizeof(t));for(int i=1;i<=l;i++)t[i]=temp[i];for(int i=l+2;i<=2*l;i++)t[i-1]=temp[2*l-i+1];//cout<<"cpy2:";//for(int i=1;i<2*l;i++)//cout<<t[i]<<" ";//cout<<endl; }void dfs1(int d){if(d==8)return;bool flag=true;for(int i=1;i<=n;i++)if(!used[A[i]]){flag=false;break;}if(flag){Copy1(d-1);dfs2(0,1,2*d-2);Copy2(d-1);dfs2(0,1,2*d-3);//return;}for(int i=1;i<=n;i++){used[A[i]]++;temp[d]=A[i];dfs1(d+1);temp[d]=-1;used[A[i]]--;}}int main(){cin>>n;memset(temp,-1,sizeof(temp));for(int i=1;i<=n;i++)cin>>A[i];for(char i='0';i<='9';i++)c[i-'0']=i;dfs1(0);cout<<ans.size()<<endl;for(int i=0;i<ans.size();i++)cout<<ans[i]<<endl;return 0;}

0 0
原创粉丝点击