zoukankan      html  css  js  c++  java
  • 黑白球

    贪心(不信).....,难点是你要去看是加多了,还是加少了.....,考虑如果黑白砖块的比是a1:a2,那么如果我从中分出一段b1:b2=a1:a2。所以我们的算法是能分则分。对于每段加入的球,如果它其中的一部分和当前段可以分出那就分出来,剩下的作为当前段,不然就全部加入当前段....代码:

    #include<iostream>
    using namespace std;
    long long a[110000],b[110000];
    long long sum[110000];
    long long ans[110000];
    long long n;
    long long maxn,maxn2;
    int main()
    {
        cin>>n;
        for(long long i=1;i<=n;i++)
        {
            cin>>a[i]>>b[i];
            sum[b[i]]+=a[i];//统计个数 
        }
        if(!sum[0])
        {
            cout<<sum[1];
            return 0;
        }
        if(!sum[1])
        {
            cout<<sum[0];
            return 0;
        }
        for(long long i=1;i<=n;i++)
        {
            long long x=b[i];
            long long y;
            if(x==1) y=0;
            else if(x==0) y=1;//取反
            if(sum[x]*ans[y]%sum[y]==0)//判断是否除尽 
            {
                int h=sum[x]*ans[y]/sum[y]-ans[x];//要去算少了多少.... 
                if(a[i]>=h&&h>=1)
                {
                    maxn++;
                }
            }
            ans[x]+=a[i];//加起来 
        }
        cout<<maxn<<endl;//输出 
    }
  • 相关阅读:
    杂谈
    xss bypass 学习记录
    小结--dns注入
    在CentOS 7 安装没有mysql
    备份WordPress
    php留言
    基于mysq搭建的l许愿墙
    http服务的安装与配置
    centos 7忘记密码重置
    安装centos 7 桌面
  • 原文地址:https://www.cnblogs.com/dai-jia-ye/p/9466365.html
Copyright © 2011-2022 走看看