比赛东北大学秦皇岛分校第十三届“图灵杯”程序设计竞赛中T2、T4、T6三篇题解
蹲点蹲到了题解位,也顺便来博客上更新一下
T2
思路
既然我们认为 I 和 l 是相同的,那么我们就把这两个字符统一修改为同一个字符,然后在判断这两个字符串是否相同即可。
代码
#include<bits/stdc++.h>
using namespace std;
const int N = 25;
char a[N],b[N];
int main(){
scanf("%s%s",a,b);
// 统一将i修改为l
int la = strlen(a),lb = strlen(b);
for(int i = 0;i < la;i++){
if(a[i] == 'I'){
a[i] = 'l';
}
}
for(int i = 0;i < lb;i++){
if(b[i] == 'I'){
b[i] = 'l';
}
}
if(strcmp(a,b) == 0){
printf("YES");
} else{
printf("NO");
}
return 0;
}
T4
思路
读入三个字符串,分别表示原网站上的 first name,last name,接收状态,如果接受状态为 Rejected 则按原网站上的 last name,first name 的顺序输出;否则按原网站上的 last name,first name 的顺序输出
代码
#include<bits/stdc++.h>
using namespace std;
const int N = 1010;
char a[N],b[N],c[N];
int main(){
scanf("%s%s%s",a,b,c);
if(strcmp(c,"Rejected") == 0){
// 不想多写一个if,就用了swap
swap(a,b);
}
printf("%s %s",a,b);
return 0;
}
T6
思路
看到这题,我就想到应该用枚举去做。那么应该根据什么枚举就是个问题。如果根据天数进行枚举,那么我会发现,一天售出物品的数量是不定的。那么就只能根据物品进行枚举了,也就是说看每一个物品在哪一天被售出。如果一次枚举某个物品在哪一天售出的话呢复杂度为 ,这显然会超时。
那么可以在这里做一个简单的贪心,能卖的一些贵的肯定尽量卖贵些,当然如果在无论哪一天售出该商品都会亏本的话呢,我们就不卖此物品了,这样复杂度为 。
代码
#include<bits/stdc++.h>
using namespace std;
const int N = 110;
int n,m,v[N],w[N][N];
int main(){
scanf("%d%d",&n,&m);
for(int i = 1;i <= n;i++){
scanf("%d",&v[i]);
}
for(int i = 1;i <= m;i++){
for(int j = 1;j <= n;j++){
scanf("%d",&w[i][j]);
}
}
int ans = 0;
for(int i = 1;i <= n;i++){
int mx = 0;
for(int j = 1;j <= m;j++){
mx = max(mx,w[j][i]-v[i]);
}
// 如果mx的值为0,则说明在无论哪一天售出该商品都不会赚到钱,则不卖此商品,收益为0,因此此处不需要特判
ans += mx;
}
printf("%d",ans);
return 0;
}