携程资格赛B题
好吧,连复赛都没进,511.。。。
貌似D题是因为没有用unsigned long long?
4 [] ([])[] ((] ([)]
0 0 3 2
#include<iostream> #include<cstdio> #include<cstring> #include<string> using namespace std; int dp[105][105]; char s[105]; int main() { int t,i,j,k,l; cin>>t; while(t--) { cin>>s; int len=strlen(s); for(i=0;i<len;i++) for(j=0;j<len;j++) { if(i<j) dp[i][j]=105; else if(i==j) dp[i][i]=1; else dp[i][j]=0; } for(l=1;l<len;l++) //段长度递推 { for(i=0;i<len-l;i++) { j=i+l; if((s[i]==‘(‘&&s[j]==‘)‘)||(s[i]==‘[‘&&s[j]==‘]‘)) dp[i][j]=min(dp[i][j],dp[i+1][j-1]); for(k=i;k<j;k++) dp[i][j]=min(dp[i][j],dp[i][k]+dp[k+1][j]); //cout<<i<<" "<<j<<" "<<dp[i][j]<<endl; } } cout<<dp[0][len-1]<<endl; } return 0; } /* 23 [] ([])[] ((] ([)] */
给定一个自然数M,及其二进制长度N,得到一个N位的二进制串 b1 b2 ... bN-1 bN 将该串做左旋转,即b1移到bN后面,得到一个新的二进制串: b2 b3 ... bN-1 bN b1 对新的二进制串再做左旋转,得二进制串 b3 b4 ... bN-1 bN b1 b2 重复旋转操作操作,可得N个二进制串,对这N个串排序,可得一个N*N的矩阵. 例如: 1 0 0 0 1->0 0 0 1 1->0 0 1 1 0->0 1 1 0 0->1 1 0 0 0 对它们做排序,得矩阵0 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 0 0 0 1 1 1 0 0 0
问:给出一个自然数M,及其二进制长度N,求出排序矩阵的最后一列。
对于上面的例子,给出M=3,N=5,要你的程序输出10010。
补充说明:存在自然数M的二进制表达超过N位的情况,在这种情况下,取前N次循环的二进制串排序后的最后一列即可。
第一行有一个自然数K,代表有K行测试数据(K<=1000)。 第二行至第K+1行,每行的第一个为自然数M,第二个为二进制长度N(N<64)。
输出K行,每行N个二进制,表示矩阵最后一列从上到下的二进制。
3 3 5 4 7 1099512709120 45
10010 1000000 110000000000000000000000000000100000000000000
#include<cstdio> #include<cstring> #include<string> #include<iostream> #include<algorithm> using namespace std; char a[1005][1005]; int p[1005]; char res[1005]; char tmp[1005]; unsigned long long m; int n; int tt; int main() { int t,i,j; cin>>t; while(t--) { cin>>m>>n; tt=n; int t=0; while(m) { p[t++]=m&1; m>>=1; } //cout<<t<<" dsd"<<endl; while(t+1<=n) { p[t++]=0; } n=t; for(i=0;i<n;i++) { a[0][i]=p[n-1-i]+‘0‘; } a[0][n]=‘\0‘; for(j=1;j<n;j++) { for(i=n-1;i>0;i--) { a[j][i-1]=a[j-1][i]; } a[j][n-1]=a[j-1][0]; a[j][n]=‘\0‘; } //cout<<a[1]<<" "<<a[2]<<endl; for(i=0;i<tt;i++) for(j=i+1;j<tt;j++) { if(strcmp(a[i],a[j])>0) { strcpy(tmp,a[i]); strcpy(a[i],a[j]); strcpy(a[j],tmp); } } for(i=0;i<tt;i++) res[i]=a[i][n-1]; res[tt]=‘\0‘; cout<<res<<endl; } return 0; }
括号匹配(二)NYOJ15(简单区间dp),布布扣,bubuko.com
原文:http://blog.csdn.net/coraline_m/article/details/23621703