zoukankan      html  css  js  c++  java
  • Codeforces Round 48 Div2

     A题  Death Note

    题意 :给一个本子,在上面写名字,每页最多写m个人的名字,有n天,每天给你一些名字,然后需要判断,每天需要翻多少页。

    思路:就是模拟每天的情况就行了,然后需要将每天最后一页剩余名字记录下来,与下一天的进行下判断就OK了

    #include <cstdio>
    #include <iostream>
    using namespace std;
    int main()
    {
        int n,m;
        int num[200005];
        cin>>n>>m;
        for(int i=0;i<n;i++) cin>>num[i];
        int name=m;
        for(int i=0;i<n;i++){
            int t=0;
            if(num[i]>=name){
                num[i]-=name;
                t++;
            }
            else {
                cout<<0<<' ';
                name-=num[i];
                continue;
            }
            t+=num[i]/m;
            name=m*t-num[i];
            cout<<t<<' ';
        }
        return 0;
    }

    B题 Segment Occurrences

    题意:给a,b两个字符串,然后给a中的一段长度,询问在这段长度中存在多少个b字符串。

    思路:一开始以为要用kmp算法去匹配字符串的位置,然后存起来,然后查询的时候遍历数组就行了,但是后面发现不用kmp也不会超时。。暴力找符合的位置就行了

    #include <cstdio>
    #include <iostream>
    #include <string>
    using namespace std;
    int main()
    {
        int n,m,s;
        string a,b;
        int num[200005];
        int t=0;
        cin>>n>>m>>s;
        cin>>a>>b;
        for(int i=0;i<n;i++){
            int flag=0;
            for(int j=0;j<m;j++){
                if(a[i+j]!=b[j]){
                    flag=1;
                    break;
                }
            }
            if(flag==0) num[t++]=i;
        }
        int q,w;
        for(int i=0;i<s;i++){ 
            int sum=0;
            cin>>q>>w;
            for(int j=0;j<t;j++){
                if(q<=num[j]+1&&w>=num[j]+m) sum++;
            }
            cout<<sum<<endl;
        }
        return 0;
    }

    D题 Vasya And The Matrix

    题意 :求一个n*m的矩阵,给矩阵每行的异或,以及每列的异或,先判断是否存在这个矩阵,然后写出这个矩阵。

    思路:一开始看到这个题的时候一脸懵逼,看了好久,判断挺好判断的,只需要将每行的异或给异或了再与每列的异或异或进行判断,如果相等就存在,否则就不存在。

     然后就是求这样一个矩阵,其实只需要关注最后一行和最后一列就行了,其他的元素设置为0,因为0^x=x,然后最后一行和最后一列设置为这行(列)的异或就OK了,重点是最后一个元素,只需要将每行(列)的异或的异或再异或最后一行和最后一列的异或就行了,然后就是注意用long long 存,wa了几次

    #include <cstdio>
    #include <iostream>
    using namespace std;
    int main(){
        int n,m;
        long long num[105][105];
        long long a[105],b[105];
        long long sum1=0,sum2=0;
        cin>>n>>m;
        for(int i=0;i<n;i++){
            cin>>a[i];
            sum1^=a[i];
        }
        for(int i=0;i<m;i++){
            cin>>b[i];
            sum2^=b[i];
        }
        if(sum1!=sum2) cout<<"NO"<<endl;
        else {
            cout<<"YES"<<endl;
            for(int i=0;i<n;i++) num[i][m-1]=a[i];
            for(int j=0;j<m;j++) num[n-1][j]=b[j];
            num[n-1][m-1]=sum1^a[n-1]^b[m-1];
            for(int i=0;i<n;i++){
                for(int j=0;j<m;j++)
                    cout<<num[i][j]<<' ';
                cout<<endl;
            }
        }
        return 0;
    }
  • 相关阅读:
    一名3年工作经验的程序员面试分享应该具备的技能
    [activiti] Activiti 5.18 的Mybatis版本依赖问题
    [java] JVM监控与调优
    [mysql] mysqldump 导出数据库表
    【extjs】 extjs5 Ext.grid.Panel 搜索示例
    [tomcat] tomcat+nginx 负载均衡配置
    [mysql] mysql explain 使用
    Oracle自用脚本(持续更新)
    Mysql 简单问题汇总(持续更新)
    开源项目导入eclipse的一般步骤
  • 原文地址:https://www.cnblogs.com/maybe96/p/9428504.html
Copyright © 2011-2022 走看看