Codeforces Beta Round #108 (Div2)-5/22补题
A - Marks
链接:https://codeforces.com/problemset/problem/152/A
题意:
有n个学生共m门科目,给出每个学生每门成绩;
如果没有学生在这门课上得到更高的分数,则这个学生在某门课上表现最好;
如果有一个学科是他最擅长的,则这个个学生是成功的;求成功的学生数。
思路:
用字符串数组将每个学生的各个科目成绩存储,求出每列即各科目最高的成绩,再判断某学生是否具有最高成绩即可。
ac代码:
#include<iostream> #include<cstring> #include<algorithm> #include<cmath> #include<map> using namespace std; int main(){ int n,m,i,j,max,b[105]={0},shu=0; string a[105]; map<int,int> mp; mp.clear(); cin>>n>>m; for(i=0;i<n;i++){ cin>>a[i]; } for(j=0;j<m;j++){ max=0; for(i=0;i<n;i++){ if(a[i][j]>max){ max=a[i][j]; } } b[j]=max; } for(j=0;j<m;j++){ for(i=0;i<n;i++){ if(a[i][j]==b[j]){ mp[i]++; if(mp[i]==1){ shu++; } } } } cout<<shu<<endl; return 0; }
B - Steps
链接:https://codeforces.com/problemset/problem/152/B
题意:
在一个n*m的长方形场地上,Vasya的初始位置为(x,y),
给出k个向量,每个向量(dx,dy),(|dxi|, |dyi| ≤ 109, |dx| + |dy| ≥ 1),则移动一步位置为(x + dx, y + dy),
只要当前位置(1≤x‘≤n, 1≤y’≤m),则可以一直进行这个向量直至不符合要求,
求共可以走多少步。
思路:
临界判断问题,针对每一个方向向量,判断走多少步出界,依次针对每个向量判断其最大步数即可。
ac代码:
#include<iostream> #include<cstring> #include<algorithm> #include<cmath> #include<map> using namespace std; int main(){ long long int n,m,i,x,y,k,a,b,shu=0,p,q,z; cin>>n>>m; cin>>x>>y; cin>>k; while(k--){ cin>>a>>b; if(a>0){ p=(n-x)/a; } else if(a==0){ p=0; } else{ p=(x-1)/abs(a); } if(b>0){ q=(m-y)/b; } else if(b==0){ q=0; } else{ q=(y-1)/abs(b); } if(a==0){ z=q; } else if(b==0){ z=p; } else{ z=min(p,q); } // cout<<z<<"**"<<endl; x=x+z*a; y=y+z*b; // cout<<x<<"###"<<y<<endl; shu=shu+z; } cout<<shu<<endl; return 0; }
C - Pocket Book
链接:https://codeforces.com/problemset/problem/152/C
题意:
给出n个长度为m的字符串,任意两个字符串可以交换前k个字符(k<=m),交换后字符串变成新的字符串,问最后能产生多少个不同的字符串。
思路:
组合排列问题,每个字符串的每一列都可以变成所有字符串的该列的字符,所以只要统计每一列有多少个不同的字符即可。
ac代码:
#include<iostream> #include<cstring> #include<algorithm> #include<cmath> #include<map> #include<set> using namespace std; int main(){ long long int n,m,i,j,shu=1; string s[105]; set<char> ss[105]; cin>>n>>m; getchar(); for(i=0;i<n;i++){ cin>>s[i]; } for(i=0;i<n;i++){ for(j=0;j<m;j++){ ss[j].insert(s[i][j]); } } for(i=0;i<m;i++){ shu=(shu*ss[i].size())%1000000007; } cout<<shu<<endl; return 0; }