题目倒是不怎么滴难,就是英语难念,怎么做还是做不动似的。要崩溃了,坚持!!
milk2: 先把区间排序,然后把有相交的区间合并。一个for结束就好了。
代码:
/* ID: duanjia2 PROG: milk2 LANG: C++ */ #include<iostream> #include<algorithm> #include<fstream> using namespace std; struct inter { int s,t; } val[10005]; bool cmp(inter b,inter c) { return (b.s<c.s||b.s==c.s&&b.t<c.t); } int main() { ifstream fin("milk2.in"); ofstream fout("milk2.out"); int i,n,s,t,r,r1,r2; fin>>n; for( i=0;i<n;i++) fin>>val[i].s>>val[i].t; if(n==1) fout<<val[0].t-val[0].s<<' '<<0<<endl; else{ sort(val,val+n,cmp); r1=0, r=0, r2=0; r=val[0].t-val[0].s; for( i=1;i<n;i++){ if( val[i].s<=val[i-1].t){ val[i].s=val[i-1].s, val[i].t=max(val[i].t,val[i-1].t); r1=val[i].t-val[i].s; } else{ if(r2<val[i].s-val[i-1].t) r2=val[i].s-val[i-1].t; if(r<r1) r=r1; r1=val[i].t-val[i].s; } } fout<<r<<' '<<r2<<endl; } // system("pause"); return 0; }
代码:
/* ID: duanjia2 PROG: namenum LANG: C++ */ #include<iostream> #include<algorithm> #include<string.h> #include<fstream> using namespace std; char ans[15],name[5000][15],str[15]; int f,n,p; ifstream fin("namenum.in"); ofstream fout("namenum.out"); bool cmp() { for(int i=p;i<5000;i++){ //从P开始 int temp=strcmp(ans,name[i]); if( temp==0) return true; if(temp<0){ p=i; break;} } return false; } void DFS(int num,int cnt) { if( cnt==n){ if( cmp()){ f=0; fout<<ans<<endl; } return; } int b=(num-2)*3; for(int i=0; i<3; i++){ if( b+i>15) ans[cnt]=b+1+i+'A'; else ans[cnt]=b+i+'A'; DFS(str[cnt+1]-'0',cnt+1); ans[cnt]='\0'; } } int main() { ifstream infile("dict.txt",ios::in); for(int i=0;i<5000;i++){ infile>>name[i]; } infile.close(); fin>>str; n=strlen(str); f=1, p=0; DFS(str[0]-'0',0); if(f) fout<<"NONE\n"; // system("pause"); return 0; }
代码:
/* ID: duanjia2 PROG: palsquare LANG: C++ */ #include<iostream> #include<algorithm> #include<vector> #include<string> #include<fstream> using namespace std; string map="0123456789ABCDEFGHIJ"; int s[301]; string Convert(int n,int b) { int i; string str; for( i=0; n; i++){ str+=map[n%b]; n/=b; } return str; } bool cmp(string str) { int j,i; i=str.length(); for( j=0;j<i/2;j++) if( str[j]!=str[i-1-j]) return false; return true; } int main() { int i,b,len; for(i=1;i<=300;i++) s[i]=i*i; ifstream fin("palsquare.in"); ofstream fout("palsquare.out"); string ans,num; fin>>b; for( i=1;i<=300;i++){ ans=Convert(s[i],b); if( cmp(ans)){ num=Convert(i,b); reverse(num.begin(),num.end()); fout<<num<<' '<<ans<<endl; } } // system("pause"); return 0; }
代码:
/* ID: duanjia2 PROG: dualpal LANG: C++ */ #include<iostream> #include<string.h> #include<fstream> using namespace std; bool f[15000]; bool Convert(int n,int b) { int i,j; char str[50]; for( i=0; n; i++){ str[i]=n%b+'0'; n/=b; } for( j=0;j<i/2;j++) if( str[j]!=str[i-1-j]) return false; return true; } int main() { int i,j,n,s,cnt; ifstream fin("dualpal.in"); ofstream fout("dualpal.out"); memset(f,false,sizeof(f)); for( i=1;i<=13000;i++){ cnt=0; for( j=2;j<=10&&cnt<=2;j++) if( Convert(i,j)) cnt++; if(cnt>=2) f[i]=true; } fin>>n>>s; cnt=0; for( i=s+1;cnt!=n;i++){ if( f[i]){ fout<<i<<endl; cnt++; } } // system("pause"); return 0; }