• CF Round #353 Div.2


    http://codeforces.com/contest/675

     

    A. Infinite Sequence

    题意:给出等差数列的首项a以及公差c,问数b是不是该数列中的数,若是输出YES否则输出NO。

    思路:第一种情况是a==b,这时不论公差c为多少,都是YES;当a!=b时,则要求同时满足:

               (1)c!=0;   (2)(b-a)%c==0;   (3)(b-a)/c>0 (即b-a要和c同号)。

    代码:太简单了就不贴了


    B. Restoring Painting

    题意:有这么一个3×3的格子,在?处填入1-n之间的一个数,不同的?处填的数字可以相同也可以不同,但都需满足条件:每个2×2的格子内数字和==左上角的2×2格子内的数字和。  问共有多少种填法?

                                                                    image

    思路:a,b,c,d已经给出,那么设

                                               image

                可以列式:y+c=x+b     z+d=x+a     w+d=y+a

             于是得到: y=x+b-c     z=x+a-d   w=y+a-d

              于是遍历x的值(从1到n),只要y,z,w同时满足1<=y,z,w<=n,则ans++

              最终共有ans*n种填法(为什么要*n,因为在满足上述的等式下,中间的m可以填1-n中的任意数)。

    代码:不贴。


    C. Money Transfers

    题意:共有n个银行,依照第1个银行、第2个、……、第n个银行围成一圈,现在每个银行都有一定的钱数,可能为负值(代表欠钱)。为了让每个银行的钱数全部归零,现在可以进行银行间的转账,但规定转账只能在相邻银行之间进行(第1与第n 相邻),问让所有银行的钱数归零的最少的次数?(给出的数据已经保证一定能够全部归零)

    思路:因为只在相邻之间进行,最多就是n-1次,从头至尾,找到后面那些钱数为0的银行,那些是不需要动的,额说不清楚,看代码吧。

    代码://话说map的这个用法真是用起来爽得很。

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<map>
    using namespace std;
    
    int main()
    {
        int n,a;
        map<long long,int> m;
        long long sum=0;
        scanf("%d",&n);
        int ans=n-1;
        for(int i=0;i<n;i++)
        {
            scanf("%d",&a);
            sum+=a;
            m[sum]++;
            ans=min(ans,n-m[sum]);
        }
        printf("%d
    ",ans);
        return 0;
    }

  • 相关阅读:
    CentOS单用户模式下修改ROOT密码和grub加密
    CentOS配置SSH单向无密码访问
    物流追踪
    SpringBoot整合Redis及Redis
    小程序毫秒级倒计时(适用于拼团秒杀功能)
    foreach中的collection
    ArrayList和LinkedList的区别
    JavaScript 基础
    自用 goodsdetail
    JAVA常用处理数据
  • 原文地址:https://www.cnblogs.com/atmacmer/p/5533613.html
Copyright © 2020-2023  润新知