本文主要是介绍ACM实训冲刺第十九天,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
第一套(搞定)
#include<stdio.h>
#include<string.h>
int main(){int n;scanf("%d",&n);char s[100];getchar();for(int i=0;i<n;i++){gets(s);int cnta=0,cnte=0,cnti=0,cnto=0,cntu=0;for(int i=0;i<strlen(s);i++){if(s[i]=='a'){cnta++;}else if(s[i]=='e'){cnte++;}else if(s[i]=='i'){cnti++;}else if(s[i]=='o'){cnto++;}else if(s[i]=='u'){cntu++;}}printf("a:%d\n",cnta);printf("e:%d\n",cnte);printf("i:%d\n",cnti);printf("o:%d\n",cnto);printf("u:%d\n",cntu); }return 0;
}
第二套(搞定)
VJ输入提示Rejected by HDU WAF. Please tweak you code.
代表扫描时未换行,添加\n即可
#include<stdio.h>
#include<string.h>
int main(){int n;char s[10001][20];int cnt[1001];while(scanf("%d\n",&n)&&n!=0){for(int i=0;i<n;i++){scanf("%s\n",s[i]);}for(int i=0;i<n;i++){cnt[i]=0;}for(int i=0;i<n;i++){for(int j=i+1;j<n;j++){if(strcmp(s[i],s[j])==0)cnt[i]++;}}int max=0;int k;for(int i=0;i<n;i++){if(max<cnt[i]){max=cnt[i];k=i;}}printf("%s\n",s[k]);}return 0;
}
第三套(搞定)
#include<stdio.h>
int main(){int n,m;scanf("%d %d",&n,&m);int dp[10001];for(int i=0;i<=m;i++){dp[i]=0;}for(int i=1;i<=n;i++){int w,d;scanf("%d %d",&d,&w);//位置颠倒了 for(int j=m;j>=w;j--){//条件写错了 if(dp[j-w]+d>dp[j]){dp[j]=dp[j-w]+d;}}}printf("%d\n",dp[m]);return 0;
}
第四套(选择放弃)
#include<stdio.h>
#include<stdlib.h>
typedef struct{int a;int b;int c;
}d;
int cmp(const void*a,const void*b){d*qa=(d*)a;d*qb=(d*)b;return qb->b-qa->b;
}
int main(){int e,f;scanf("%d %d",&e,&f);d*list=(d*)malloc(e*sizeof(d));for(int i=0;i<e;i++){scanf("%d %d",&list[i].b,&list[i].c);list[i].a=i;}qsort(list,e,sizeof(d),cmp);int g=0;int h=0;for(int j=0;j<f;j++){if(list[j].c>g){g=list[j].c;h=list[j].a;}}h=h+1;printf("%d\n",h);free(list);return 0;
}
第五套(搞定)
/*1.读取死宅数量 n2.每个死宅需要快乐a[i]点3.所有死宅中最大的快乐需求数 ma4.读取每个死宅需要的快乐点数5.读取喝快乐水增加的快乐点数k6.特殊情况k==17.二分法计算最短时间 l r m sum(累加额外分数)8.输出最短时间l
*/
#include<stdio.h>
#include<iostream>
using namespace std;
int main(){int n;scanf("%d",&n);int a[n];int ma=0;//初始化勿忘 for(int i=0;i<n;i++){scanf("%d",&a[i]);ma=max(ma,a[i]);}int k;scanf("%d",&k);if(k==1){printf("%d\n",ma);return 0;}int l=0,r=ma,m;while(r>l) {//一定不要忘记在这个循环条件内运行 m=(l+r)/2;long long sum=0;//long long一定不能省去 for(int i=0;i<n;i++){if(a[i]>m){sum+=(a[i]-m)/(k-1)+((a[i]-m)%(k-1)!=0);//注意是k-1,不是l }}if(sum>m){l=m+1;//是1 ,不是l }else r=m;}printf("%d\n",l);return 0;
}
第六套 (选择放弃)
#include<stdio.h>#define N 20
int count, n;// 使用更具描述性的参数名
void dfs(int row, int columnMask, int leftDiagonalMask, int rightDiagonalMask) {if (row == n) {count++;return;}// 找到第一个未被占用的位置(列)int availablePositions = ~(columnMask | leftDiagonalMask | rightDiagonalMask) & ((1 << n) - 1);while (availablePositions) {// 选择最右边的1,即当前行可放置皇后的列int position = availablePositions & -availablePositions;dfs(row + 1, columnMask | position, (leftDiagonalMask | position) << 1, (rightDiagonalMask | position) >> 1);// 移除已尝试的位置availablePositions &= ~position;}
}int main() {while (scanf("%d", &n) == 1) {if (n == 0) break;count = 0;dfs(0, 0, 0, 0);printf("%d\n", count);}return 0;
}
#include<stdio.h>
#define N 20
int cnt,n;
void dfs(int k,int col,int ld,int rd){if(k>=n){cnt++;return;}else{int pos=((1<<n)-1) & ~(col| ld|rd);while(pos){int p=pos & ~pos;pos-=p;dfs(k+1,col|p,(ld|p)<<1,(rd|p)>>1);}}
}
int main(){while(scanf("%d",&n)==1){if(n==0) break;cnt=0;dfs(0,0,0,0);printf("%d\n",cnt);}return 0;
}
【注意】第四套和第六套之前文章当中写的代码有误,以本篇文章的为主
第四套和第六套实在太难了QAQ,打算放弃了
这篇关于ACM实训冲刺第十九天的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!