zoukankan      html  css  js  c++  java
  • 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;
    }
    View Code

    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;
    }
    View Code

    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;
    }
    View Code
  • 相关阅读:
    MySQL百万级数据量分页查询方法及其优化
    聊一聊二维码扫描登录原理
    在吗?认识一下JWT(JSON Web Token) ?
    怎样和领导汇报工作,更容易获得升职加薪?谈谈和领导汇报的艺术
    javascript sleep pause 实现
    google 根据地址得ip 并显示
    javascript 闭包
    javascript 对象 telecom
    javascript 对象
    google maker 标注
  • 原文地址:https://www.cnblogs.com/nanan/p/14803438.html
Copyright © 2011-2022 走看看