• 黑白球


    贪心(不信).....,难点是你要去看是加多了,还是加少了.....,考虑如果黑白砖块的比是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;//输出 
    }
  • 相关阅读:
    Unix IPC之共享内存区(1)
    linux下的二进制文件的编辑和查看
    Posix 信号量
    Unix IPC之Posix信号量实现生产者消费者
    整型信号量与记录型信号量
    C++之友元
    C++之异常处理
    C++之STL(标准模板库)
    C++之继承
    C++之封装
  • 原文地址:https://www.cnblogs.com/dai-jia-ye/p/9466365.html
Copyright © 2020-2023  润新知