AC日记——Dynamic Problem Scoring codeforces 807d

Dynamic Problem Scoring

 

思路:

  水题;

 

代码:

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>

using namespace std;

#define maxn 130

int n,ai[maxn][6],ac[6],cnt,all,last1,last2;

double map[3][6];

inline void in(int &now)
{
    int if_z=1;now=0;
    char Cget=getchar();
    while(Cget>'9'||Cget<'0')
    {
        if(Cget=='-') if_z=-1;
        Cget=getchar();
    }
    while(Cget>='0'&&Cget<='9')
    {
        now=now*10+Cget-'0';
        Cget=getchar();
    }
    now*=if_z;
}

int point(int a,int s,int t)
{
    if(t==-1) return 0;
    int res=0;
    double p=(double)a/(double)s;
    if(p>0.5&&p<=1) res+=500-2*t;
    else if(p>0.25&&p<=0.5) res+=1000-4*t;
    else if(p>0.125&&p<=0.25) res+=1500-t*6;
    else if(p>0.0625&&p<=0.125) res+=2000-t*8;
    else if(p>0.03125&&p<=0.0625) res+=2500-t*10;
    else if(p>0&&p<=0.03125) res+=3000-t*12;
    return res;
}

int main()
{
    in(n);
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=5;j++)
        {
            in(ai[i][j]);
            if(ai[i][j]!=-1) ac[j]++;
        }
    }
    for(int i=1;i<=5;i++)
    {
        last1+=point(ac[i],n,ai[1][i]);
        last2+=point(ac[i],n,ai[2][i]);
    }
    cnt=n;
    if(last1>last2)
    {
        printf("0");
        return 0;
    }
    for(int j=1;j<=10000;j++)
    {
        cnt++;
        int sco1=0,sco2=0;
        bool if_[6];
        for(int i=1;i<=5;i++)
        {
            if(ai[1][i]==-1&&ai[2][i]==-1) continue;
            int k1=point(ac[i]+1,cnt,ai[1][i]);
            int k2=point(ac[i],cnt,ai[1][i]);
            int g1=point(ac[i]+1,cnt,ai[2][i]);
            int g2=point(ac[i],cnt,ai[2][i]);
            if(ai[1][i]==-1)
            {
                sco2+=g2;
                continue;
            }
            if(ai[2][i]==-1)
            {
                sco1+=k2;
                continue;
            }
            if(ai[1][i]<ai[2][i])
            {
                sco1+=k2;
                sco2+=g2;
            }
            else
            {
                ac[i]++;
                sco1+=k1;
                sco2+=g1;
            }
        }
        last1=sco1,last2=sco2;
        if(last1>last2)
        {
            cout<<cnt-n;
            return 0;
        }
    }
    cout<<-1;
    return 0;
}

 

转载于:https://www.cnblogs.com/IUUUUUUUskyyy/p/6842198.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值