哈理工多校算法赛二
A 吐泡泡:https://www.nowcoder.com/acm/contest/74/A
#include <bits/stdc++.h> using namespace std; int main() { char ch[105]; while(gets(ch)) { int lch=strlen(ch),num1=0,num2=0,j=0; for(int i=0;i<lch-1;i++) { if(ch[i]=='o'&&ch[i+1]=='o') { ch[i]='O'; for(int k=i+1;k<lch-1;k++) ch[k]=ch[k+1]; i=-1; lch--; } else if(ch[i]=='O'&&ch[i+1]=='O') { for(int k=i;k<lch-2;k++) ch[k]=ch[k+2]; i=-1; lch-=2; } } ch[lch]='\0'; puts(ch); } return 0; }
蛮久了 现在想来直接用栈就可以了
B TaoTao要吃鸡:https://www.nowcoder.com/acm/contest/74/B
#include <bits/stdc++.h> using namespace std; struct bag{ int w,v; }b[105]; bool cmp(struct bag q,struct bag p) { if(q.w==p.w) return q.v>p.v; return q.w>p.w; } int main() { int n,m,h; int dp[205]; while(~scanf("%d",&n)&&n) { scanf("%d%d",&m,&h); memset(dp,0,sizeof(dp)); memset(b,0,sizeof(b)); for(int i=0;i<n;i++) scanf("%d%d",&b[i].w,&b[i].v); sort(b,b+n,cmp); if(!h) { for(int i=0;i<n;i++) for(int j=m;j>=b[i].w;j--) dp[j]=max(dp[j],dp[j-b[i].w]+b[i].v); printf("%d\n",dp[m]); } else { for(int i=1;i<n;i++) /// 将价值第二高的物品留着 for(int j=m+h-1;j>=b[i].w;j--) /// 留出1个容量 dp[j]=max(dp[j],dp[j-b[i].w]+b[i].v); printf("%d\n",dp[m+h-1]+b[0].v); } } return 0; }
C 小仙女过生日:https://www.nowcoder.com/acm/contest/74/C
最有三角剖分 待解
D YB要打炉石:https://www.nowcoder.com/acm/contest/74/D
#include <bits/stdc++.h> using namespace std; int main() { int n; scanf("%d",&n); int a[105]; for(int i=1;i<=n;i++) scanf("%d",&a[i]); if(n<30) { printf("no\n"); return 0; } int cnt=1,temp=a[1]; for(int i=1;i<n;i++) { if(temp<=a[i+1]) { cnt++; temp=a[i+1]; } } if(cnt>=30) printf("yes\n"); else printf("no\n"); return 0; }
E 小G有一个大树:https://www.nowcoder.com/acm/contest/74/E
待解
F 德玛西亚万岁:https://www.nowcoder.com/acm/contest/74/F
状压DP待解
G 送分了QAQ:https://www.nowcoder.com/acm/contest/74/G
#include <bits/stdc++.h> using namespace std; int a[1000000],j=0; bool te(int x) { while(x) { if(x%100==38) return 1; x/=10; } return 0; } bool f(int x) { while(x) { if(x%10==4) return 1; x/=10; } return 0; } void constant() { for(int i=1;i<=1000000;i++) { if(te(i)) a[i]=1; else if(f(i)) a[i]=1; } } int main() { constant(); int n,m; while( ~scanf("%d%d",&n,&m)&&n+m ) { int cnt=0; for(int i=n;i<=m;i++) if(a[i]==1) cnt++; printf("%d\n",cnt); } return 0; }
H 了断局:https://www.nowcoder.com/acm/contest/74/H
#include <bits/stdc++.h> using namespace std; long long a[55],n; void constant() { a[0]=0,a[1]=1,a[2]=1; for(int i=3;i<=55;i++) a[i]=a[i-1]+a[i-2]+a[i-3]; } int main() { constant(); while( ~scanf("%lld",&n) ) { printf("%lld\n",a[n-1]); } return 0; }