蒟蒻第一次写黄题,0pts求
查看原帖
蒟蒻第一次写黄题,0pts求
589272
__Cow__楼主2022/9/7 22:52

因为特判写了79行。

#include <iostream>
#include <cstdio>
#include <cmath>
#include <algorithm>
#include <string>
using namespace std;
int sleep,head=1,n,x,p,q,r,allsleep[1000000+10],ans,a[1000000+10],num;
bool flag = false;
int fracadd(int s)
{
    s = s*p;
    int t = s;
    s = s/q;
    if (q*s!=t) s+=1;
    return s;
}
int main()
{
    scanf ("%d %d %d %d", &n, &x, &p, &q);
    for (int i=1;i<=n;i++)
    {
        scanf ("%d", &a[i]);
    }
    sleep = x;
    for (int i=1;i<=n;)
    {
        flag = false;
        while (sleep-num-a[i]>0&&sleep-num-a[i]>=fracadd(x*i))
        {
            flag = true;
            sleep -= a[i];
            a[i] = -1;
            i+=1;
            head = i;
        }
        if (flag==true)
        {
            i-=1;
            head-=1;
        }
        ans+=1;
        break;
    }
    allsleep[head] = sleep;
    for (int i=1;i<=n;i++)
    {
        flag = false;
        if (a[i]==-1)
        {
            continue;
        }
        else if (allsleep[head]<fracadd(i*x))
        {
            allsleep[i]=x+allsleep[head];
            head = i;
            ans+=1;
            continue;
        }
        num = 0;
        sleep = x;
        while (x-num-a[i]>0&&a[i]!=-1&&i<=n)
        {
            flag = true;
            i+=1;
            num += a[i-1];
        }
        if (flag==true)i-=1;
        allsleep[i] = allsleep[head]+x-num;
        head = i;
        if (flag==false)
        {
            allsleep[i] = allsleep[head]+x;
            head = i;
        }
        ans+=1;
    }
    printf ("%d\n", ans);
    return 0;
}

样例过了,数据包里#4没过,剩下的没试

2022/9/7 22:52
加载中...