• KKT-黑白球


    题目(注:此题目由高老师友情魔改)见下方

    【题目描述】

    LQX在高老师不在的一天当中发明了一个小游戏:将若干黑色和白色的乒乓球摆成一列。现在他想按顺序(分组时只能按照从左往右的顺序取)将这些乒乓球分成若组,使得每组的白球和黑球的比例相同。

    当然,他可以把所有的球直接作为一组,但是那样你就太鄙视LQX的智商了。为了增加难度,他想知道最多能分成多少组,例如,如果用0表示白球,1表示黑球的话,那么: 

    100011 = 10+0011(样例1,最多分成两组,比例为1:1)

    0001110000000001 = 0001+11000000+0001(样例2,最多分成3组,比例为3:1) 

    LQX在高老师不在的一天当中发明了一个小游戏:将若干黑色和白色的乒乓球摆成一列。现在他想按顺序(分组时只能按照从左往右的顺序取)将这些乒乓球分成若组,使得每组的白球和黑球的比例相同。

    当然,他可以把所有的球直接作为一组,但是那样你就太鄙视LQX的智商了。为了增加难度,他想知道最多能分成多少组,例如,如果用0表示白球,1表示黑球的话,那么:

    100011 = 10+0011(样例1,最多分成两组,比例为1:1)

    0001110000000001 = 0001+11000000+0001(样例2,最多分成3组,比例为3:1)

    【输入】

    第一行输入一个整数N,表示将用N行来描述这一列乒乓球。

    以下N行,每行包含两个用空格隔开的整数Ki和Ci,Ci只可能是0或1,表示在上一行结束后尾部又有了Ki个颜色为Ci的乒乓球。

    注意:连续几行的Ci可能相同。

    【输出】

    输出一行一个整数,表示最多能分成的组数。

    【输入示例】

    3

    1 1

    3 0

    2 1

    输出示例

    2

     

    这道题,其实是一个贪心......

    没错真的是贪心......

    因为1:2+1:2=1:2

    所以我们只有按黑白球总比例拆分就能分最多组......

    嗯,就这么简单粗暴......

    代码:(注意一定要定成long long,int不够大)

    输入,sum[i]是黑白球总数

    1 for(long long i=1;i<=n;i++)
    2     {
    3         cin>>a[i]>>b[i];
    4         sum[b[i]]=sum[b[i]]+a[i];
    5     }

    如果只有一种球,怎么分不用说

     1 if(sum[0]==0)
     2     {
     3         cout<<sum[1];
     4         return 0;
     5     }
     6     if(sum[1]==0)
     7     {
     8         cout<<sum[0];
     9         return 0;
    10     }

    交叉相乘知道不

    sum[x]/sum[y]=ans[x]/ans[y]=>sum[x]*ans[y]=sum[y[*ans[x]

    如果加上a[i]大于比例,总组数加一

    但是有这种情况:1/10>1/11 1/10<2/11

    为了避免要判断:sum[x]*ans[y]%sum[y]==0

     1 for(long long i=1;i<=n;i++)
     2     {
     3         long long x=b[i];
     4         long long y;
     5         if(x==0)
     6         {
     7             y=1;
     8         }
     9         else
    10         {
    11             y=0;
    12         }
    13         if(sum[x]*ans[y]%sum[y]==0)
    14         {
    15             long long cot=sum[x]*ans[y]/sum[y]-ans[x];
    16             if(cot<=a[i]&&cot>=1)
    17             {                
    18                 ans1++;
    19             }
    20         }
    21         ans[x]=ans[x]+a[i];
    22     }

    完整代码看下方

     1 #include<iostream>
     2 using namespace std;
     3 long long ans1=0;
     4 long long a[110013],b[110013];
     5 long long sum[110013]={0};
     6 long long ans[110013]={0};
     7 long long n;
     8 int main()
     9 {
    10     cin>>n;
    11     for(long long i=1;i<=n;i++)
    12     {
    13         cin>>a[i]>>b[i];
    14         sum[b[i]]=sum[b[i]]+a[i];
    15     }
    16     if(sum[0]==0)
    17     {
    18         cout<<sum[1];
    19         return 0;
    20     }
    21     if(sum[1]==0)
    22     {
    23         cout<<sum[0];
    24         return 0;
    25     }
    26     for(long long i=1;i<=n;i++)
    27     {
    28         long long x=b[i];
    29         long long y;
    30         if(x==0)
    31         {
    32             y=1;
    33         }
    34         else
    35         {
    36             y=0;
    37         }
    38         if(sum[x]*ans[y]%sum[y]==0)
    39         {
    40             long long cot=sum[x]*ans[y]/sum[y]-ans[x];
    41             if(cot<=a[i]&&cot>=1)
    42             {                
    43                 ans1++;
    44             }
    45         }
    46         ans[x]=ans[x]+a[i];
    47     }
    48     cout<<ans1;
    49 } 

    话说LQX真的处处被高老师针对呢,他到底怎么招惹高老师了?(高老师干得漂亮!)

     

    在暴风雨中低着头,是为了不让雨水模糊风雨后眼中的彩虹。

  • 相关阅读:
    ScheduledExecutorService改为一次性延时任务
    layer弹框倒计时结束后执行
    pom.xml如何使用本地库的jar-jar包上传到远程库-jar包安装到本地库
    Windows+WinRAR 压缩后备份文件夹
    java DES加密
    JAVA RSA加密公私钥
    Microsoft 语音服务异常 java.lang.UnsatisfiedLinkError: com.micros oft.cognitiveservices.speech.internal.carbon_javaJNI.swig_module_init()
    Java 线程池
    jsp页面导入excel文件的步骤及配置
    正则表达式校验时间格式(2018-01-02)
  • 原文地址:https://www.cnblogs.com/DK-F/p/9466956.html
Copyright © 2020-2023  润新知