https://www.luogu.org/problemnew/lists?name=&orderitem=difficulty&tag=2&content=0&select=1&type=
P1000 超级玛丽游戏
做过了,而且很无聊。
P2562 Kitty猫基因编码
又一个无聊题,题目的数据范围还错。
#include<bits/stdc++.h> using namespace std; #define ll long long char s[261]; char ans[261]; int top; void check(int b,int l){ int all0=1,all1=1; for(int i=b;i<b+l;i++){ if(s[i]=='0') all1=0; else all0=0; if(all1==0&&all0==0){ break; } } if(all0) ans[top++]='A'; else if(all1) ans[top++]='B'; else{ ans[top++]='C'; check(b,l/2); check(b+l/2,l/2); } //printf("%s\n",ans); } void solve(){ while(~scanf("%s",s)){ top=0; int n=strlen(s); check(0,n); ans[top++]='\0'; printf("%s\n",ans); } } int main(){ #ifdef Yinku freopen("Yinku.in","r",stdin); //freopen("Yinku.out","w",stdout); #endif // Yinku solve(); }
P2543 奇怪的字符串
模板的最长公共子序列会MLE,所以应该考虑更神奇的做法。
这个字符串明显只有0和1两种情况?
看了题解原来可以用滚动数组,从dp的方程可以推出来。
小心越界。(从1开始就没这么多破事)
#include<bits/stdc++.h> using namespace std; #define ll long long char a[10005]; char b[10005]; int dp[2][10005]; int lcs(int al,int bl){ for(int i=0;i<al;i++){ for(int j=0;j<bl;j++){ dp[i%2][j]=(a[i]==b[j])?(((i&&j)?dp[(i-1)%2][j-1]:0)+1):max(i?dp[(i-1)%2][j]:0,j?dp[i%2][j-1]:0); } } return dp[(al-1)%2][bl-1]; } void solve(){ while(~scanf("%s%s",a,b)){ memset(dp,0,sizeof(dp)); printf("%d\n",lcs(strlen(a),strlen(b))); } } int main(){ #ifdef Yinku freopen("Yinku.in","r",stdin); //freopen("Yinku.out","w",stdout); #endif // Yinku solve(); }
P3880 [JLOI2008]提示问题
注意fgets会连换行符一起保存在字符串中。
#include<bits/stdc++.h> using namespace std; #define ll long long char s[105]; char ans1[105]; char ans2[105]; char ans3[105]; void solve(){ fgets(s,100,stdin); int l=strlen(s); ans1[l]=ans2[l]=ans3[l]='\0'; int cnt=0; for(int i=0;i<l;i++){ ans1[i]=s[i]; if(isalpha(s[i])){ ans1[i]='.'; cnt++; } } int show=round(1.0*cnt/3.0); for(int i=0;i<l;i++){ ans2[i]=ans1[i]; if(isalpha(s[i])&&show){ ans2[i]=s[i]; show--; } } int suc=0; for(int i=0;i<l;i++){ ans3[i]=ans2[i]; if(ans3[i]=='.'&&(s[i]=='A'||s[i]=='a'||s[i]=='E'||s[i]=='e'||s[i]=='I'||s[i]=='i'||s[i]=='O'||s[i]=='o'||s[i]=='U'||s[i]=='u')){ ans3[i]=s[i]; suc=1; } } if(suc==0){ show=round(cnt*2.0/3.0); for(int i=0;i<l;i++){ ans3[i]=ans1[i]; if(isalpha(s[i])&&show){ ans3[i]=s[i]; show--; } } } printf("%s%s%s",ans1,ans2,ans3); } int main(){ #ifdef Yinku //freopen("Yinku.in","r",stdin); //freopen("Yinku.out","w",stdout); #endif // Yinku solve(); }
扫描二维码关注公众号,回复:
5478171 查看本文章