蚯蚓

Description

本題中,我們將用符號[c]表示對c向下取整,例如:[3.0」= [3.1」=[3.9」=3。蛐蛐國最近蚯蚓成災了!隔壁跳
蚤國的跳蚤也拿蚯蚓們沒辦法,蛐蛐國王只好去請神刀手來幫他們消滅蚯蚓。蛐蛐國裏現在共有n只蚯蚓(n爲正整
數)。每隻蚯蚓擁有長度,我們設第i只蚯蚓的長度爲a_i(i=1,2,…,n),並保證所有的長度都是非負整數(即:可
能存在長度爲0的蚯蚓)。每一秒,神刀手會在所有的蚯蚓中,準確地找到最長的那一隻(如有多個則任選一個)
將其切成兩半。神刀手切開蚯蚓的位置由常數p(是滿足0

Input

第一行包含六個整數n,m,q,u,v,t,其中:n,m,q的意義見問題描述;
u,v,t均爲正整數;你需要自己計算p=u/v(保證0

Output

第一行輸出[m/t]個整數,按時間順序,依次輸出第t秒,第2t秒,第3t秒……被切斷蚯蚓(在被切斷前)的長度。
第二行輸出[(n+m)/t]個整數,輸出m秒後蚯蚓的長度;需要按從大到小的順序
依次輸出排名第t,第2t,第3t……的長度。
同一行中相鄰的兩個數之間,恰好用一個空格隔開。即使某一行沒有任何數需要 輸出,你也應輸出一個空行。
請閱讀樣例來更好地理解這個格式。

Sample Input

3 7 1 1 3 1

3 3 2

Sample Output

3 4 4 4 5 5 6

6 6 6 5 5 4 4 3 2 2

分析

就是建立三個單調隊列,①是放原來的長度,②放是砍了之後較長的那一截,③就是放較短的那一截。每一次看的就是隊頭中最長的那一條蚯蚓,砍了之後就分別放到②和③裏

代碼

#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<string>
#include<algorithm>
#define M -2000000000

using namespace std;

bool cmp(int x,int y)
{
    return x>y;
}

long long a[3][1000];
long long maxn;
int  n,m,q,u,v,t;
int head[3],tail[3];
long long x,y,tt;
int main()
{
    freopen("test.in","r",stdin);
    freopen("test.out","w",stdout);
    scanf("%d%d%d%d%d%d",&n,&m,&q,&u,&v,&t);
    for (int i=1;i<=n+m;i++)
        a[0][i]=a[1][i]=a[2][i]=M;
    for (int i=1;i<=n;i++)
        scanf("%lld",&a[0][i]);
    sort(a[0]+1,a[0]+1+n,cmp);
    tail[0]=n;
    tail[1]=0;
    tail[2]=0;
    head[1]=0;
    head[2]=0;
    head[0]=1;
    for (int i=1;i<=m;i++)
    {
        maxn=M;
        int k=0;
        for (int j=0;j<=2;j++)
            if (a[j][head[j]]>maxn)
            {
                maxn=a[j][head[j]];
                k=j;
            }
        tt=0;
        tt=maxn+(i-1)*q;
        if (i%t==0) printf("%lld " ,&tt);
        head[k]++;
        x=tt*u/v;
        y=tt-x;
        a[1][++tail[1]]=x-i*q;
        a[2][++tail[2]]=y-i*q;
    }
    printf("\n");
    for (int i=1;i<=m+n;i++)
    {
        maxn=M;
        int k=0;
        for (int j=0;j<=2;j++)
            if (a[j][head[j]]>maxn)
            {
                maxn=a[j][head[j]];
                k=j;
            }
        tt=0;
        tt=maxn+m*q;
        if(i%t==0) printf("%lld " ,&tt);
        head[k]++;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章