ACM实验室2020.10.03 天梯赛二
7-2 是不是太胖了 (5分)
题意:pass
做法:pass
代码:pass
7-3 N个数求和 (20分)
题意:就是求分数的和,顺便还不能有假分数
做法:这题一开始用很笨很笨的办法做的,代码也放出来了(第一个),但是有两个点答案错误,也不知道怎么错误了,之后参考了网上人家的代码,发现人家是先从第一个分数入手之后通分?(应该是),之后再进行运算,改成人家的这样之后就对了
代码:
//去吧马里奥!把AC公主救回来! // ******** // ************ // ####....#. // #..###.....##.... // ###.......###### // ........... // ##*####### // ####*******###### // ...#***.****.*###.... // ....**********##..... // ....**** *****.... // #### #### // ###### ###### #include<iostream> #include<algorithm> #include<cstdio> #include<cmath> #include<string> #include<map> #include<sstream> #include<cstring> #include<vector> #include<iomanip> #include<queue> #include<set> #define LL long long #define _64 __int64 const double PI = atan(1.)*4.; using namespace std; LL zi[200]; char fei[200]; LL mu[200]; LL GCD(LL a,LL b){ if(a == 0)return 0; else return (b == 0) ? a : GCD(b, a % b); } int main(){ int N; cin >> N; LL x,a,b,c,d; scanf("%lld/%lld",&a,&b); int gcdn; gcdn = GCD(a,b); int t = GCD(a,b); if(a){ a = a / t; b = b / t; } int i = 1; while(i < N){ scanf("%lld/%lld",&c,&d); x = b / GCD(b,d) * d; a = a * x/b + c * x/d; b = x; int t = GCD(a,b); if(t != 0){ a = a / t; b = b / t; } i++; } if(a != 0 && a / b == 0){ cout << a%b << "/" << b << endl; }else if(a % b == 0){ cout << a / b << endl; }else{ cout << a/b << " " << a%b << "/" << b << endl; } }
7-4 求整数段和 (10分)
题意:输出A和B之间的数,最后再求个和
做法:这题主要问题就是控制格式,问题不大问题不大
//去吧马里奥!把AC公主救回来! // ******** // ************ // ####....#. // #..###.....##.... // ###.......###### // ........... // ##*####### // ####*******###### // ...#***.****.*###.... // ....**********##..... // ....**** *****.... // #### #### // ###### ###### #include<iostream> #include<algorithm> #include<cstdio> #include<cmath> #include<string> #include<map> #include<sstream> #include<cstring> #include<vector> #include<iomanip> #include<queue> #include<set> #define LL long long #define _64 __int64 const double PI = atan(1.)*4.; using namespace std; int main(){ int a,b; cin >> a >> b; int i = a; int coun = 0; int sum = 0; while(i <= b){ int countn = 0; printf("%5d",i+countn); sum += i+countn; countn++; i++; coun++; if(coun == 5){ coun = 0; cout << endl; } } if((b-a+1)%5 == 0){ cout <<"Sum = "<< sum << endl; }else{ cout << endl; cout <<"Sum = "<< sum << endl; } }
7-5 6翻了
题意:把满足要求的3替换成6、9或者27
做法:一个一个的统计6的个数,一旦6的个数满足要求就进行替换,如此一直往下读就行
代码:
//去吧马里奥!把AC公主救回来! // ******** // ************ // ####....#. // #..###.....##.... // ###.......###### // ........... // ##*####### // ####*******###### // ...#***.****.*###.... // ....**********##..... // ....**** *****.... // #### #### // ###### ###### #include<iostream> #include<algorithm> #include<cstdio> #include<cmath> #include<string> #include<map> #include<sstream> #include<cstring> #include<vector> #include<iomanip> #include<queue> #include<set> #define LL long long #define _64 __int64 const double PI = atan(1.)*4.; using namespace std; int main(){ string s; getline(cin,s); int num = 0; for(int i = 0;i < s.length();i++){ if(s[i] == '6'){ num++; if(s.length()-1 == i){if(num > 9){ cout << "27"; }else if(num <=9 && num >3){ cout << "9"; }else { while(num--){ cout << "6"; } }} }else{ if(num > 9){ cout << "27"; }else if(num <=9 && num >3){ cout << "9"; }else { while(num--){ cout << "6"; } } num = 0; cout << s[i] ; } } }
7-6 一帮一 (15分)
题意:将从前数的人和从后数的人放到一起,而且必须男女一对(满脸问号)
代码:
//去吧马里奥!把AC公主救回来! // ******** // ************ // ####....#. // #..###.....##.... // ###.......###### // ........... // ##*####### // ####*******###### // ...#***.****.*###.... // ....**********##..... // ....**** *****.... // #### #### // ###### ###### #include<iostream> #include<algorithm> #include<cstdio> #include<cmath> #include<string> #include<map> #include<sstream> #include<cstring> #include<vector> #include<iomanip> #include<queue> #include<set> #define LL long long #define _64 __int64 const double PI = atan(1.)*4.; using namespace std; int a[100]; string s[100]; int vis[100]; int main(){ int N; cin >> N; for(int i = 1;i <= N;i++){ cin >> a[i] >> s[i]; } for(int i = 0;i < 100;i++)vis[i] = 0; for(int j = 1;j <= N;j++){ if(vis[j] == 0){ cout << s[j] << ' '; vis[j] = 1; for(int i = N;i >=1;i--){ if(vis[i] == 0 && a[j] != a[i]){ cout << s[i] <<endl; vis[i] = 1; break; } } } } }
7-7 到底是不是太胖了 (10分)
做法:和上面那个差不多,就是多个判断
//去吧马里奥!把AC公主救回来! // ******** // ************ // ####....#. // #..###.....##.... // ###.......###### // ........... // ##*####### // ####*******###### // ...#***.****.*###.... // ....**********##..... // ....**** *****.... // #### #### // ###### ###### #include<iostream> #include<algorithm> #include<cstdio> #include<cmath> #include<string> #include<map> #include<sstream> #include<cstring> #include<vector> #include<iomanip> #include<queue> #include<set> #define LL long long #define _64 __int64 const double PI = atan(1.)*4.; using namespace std; int main(){ int N; cin >> N; while(N--){ double h; double w; double bw; cin >> h >> w; bw = (h-100)*0.9; bw = bw*2; double ans; ans = fabs(w-bw); double num; num = bw *0.1; if(ans < num){ cout << "You are wan mei!" << endl; }else if(w < bw){ cout << "You are tai shou le!" << endl; }else if(w > bw){ cout << "You are tai pang le!" << endl; } } }
7-8 简单题 (5分)
做法:没错,是挺简单的
7-9 名人堂与代金券 (25分)
做法:这里得考虑用一个结构体来储存成绩和邮箱,再然后最要命的问题就是排序输出的问题了,首先排序得自定义一下,有限按照成绩排,如果成绩一样就按找邮箱(字符串)排
代码:
//去吧马里奥!把AC公主救回来! // ******** // ************ // ####....#. // #..###.....##.... // ###.......###### // ........... // ##*####### // ####*******###### // ...#***.****.*###.... // ....**********##..... // ....**** *****.... // #### #### // ###### ###### #include<iostream> #include<algorithm> #include<cstdio> #include<cmath> #include<string> #include<map> #include<sstream> #include<cstring> #include<vector> #include<iomanip> #include<queue> #include<set> #define LL long long #define _64 __int64 const double PI = atan(1.)*4.; using namespace std; struct data{ int grade; string mail; }x[20005]; //string s[20005]; //int g[20005]; bool cm(data a,data b){ if(a.grade != b.grade){ return a.grade > b.grade; }else{ return a.mail < b.mail; } } int main(){ int N,G,K; cin >> N >> G >> K; for(int i = 0;i < N;i++){ cin >> x[i].mail >> x[i].grade; } int jin_sum = 0; for(int i = 0;i <N;i++){ if(x[i].grade >= G && x[i].grade <= 100){ jin_sum += 50; }else if(x[i].grade >= 60 && x[i].grade < G){ jin_sum += 20; } } sort(x,x+N,cm); cout << jin_sum << endl; int countn = 0; for(int i = 0;i <N;i++){ if(i == 0){ countn = i+1; }else if(x[i].grade != x[i-1].grade){ countn =1+i; } if(countn >K){ break; } cout << countn << " " << x[i].mail << " " << x[i].grade << endl; } }
7-12 月饼 (25分)
题意:求最大利润,本质上求的是单位库存重量的价值
做法:用一个结构体储存库存容量和总价,再用一个数组储存所有的单位价值(比如第一种有5库存,第二种有10库存,那就要存15种单位价值),之后写个条件降序排序,从大到小把大的加起来,输出即可
//去吧马里奥!把AC公主救回来! // ******** // ************ // ####....#. // #..###.....##.... // ###.......###### // ........... // ##*####### // ####*******###### // ...#***.****.*###.... // ....**********##..... // ....**** *****.... // #### #### // ###### ###### #include<iostream> #include<algorithm> #include<cstdio> #include<cmath> #include<string> #include<map> #include<sstream> #include<cstring> #include<vector> #include<iomanip> #include<queue> #include<set> #define LL long long #define _64 __int64 const double PI = atan(1.)*4.; using namespace std; bool cmp(double a,double b){ return a > b; } struct x{ double kucun; double zongjia; }num[200005]; int main(){ int n,d; cin >> n >> d; for(int i = 0;i < n;i++){ cin >> num[i].kucun; } for(int i = 0;i < n;i++){ cin >> num[i].zongjia; } int cnt = 0; double price[200000]; for(int i = 0;i < n;i++){ for(int j = 0;j < num[i].kucun;j++){ price[cnt] = num[i].zongjia / num[i].kucun; cnt++; } } double sum = 0; sort(price,price+cnt,cmp); for(int i = 0;i < d;i++){ sum += price[i]; } printf("%.2f",sum); }

ACM实验室2020.10.03 天梯赛二
浙公网安备 33010602011771号