正确答案

正确答案

标题问题代表

小H和小Y正好结尾uoip外卡组预赛,我等不及要经过试场了。。

“吔,我的答案和你的不大可能。!”,小Y说,咱们早已向天做出计划了答案。。

M卡使成群的论文决议了这个问题。,小H和小Y从对立面N,那时的问天的答案。。那时的我向G努力赶上,在P中,天获得满分。,Q有零度,对立面神出于零或不,。这将容许一小Y和小H送交。。你能帮他们回复标准答案吗?结果有很多receive 接收,。不克不及出口1。

输出

第社交聚会四约整数n, m, p, q,如上所述。

接下来的n行,每行m刻n或y,上面说的是God Ben的回复。

出口

独自的社交聚会,m一节或- 1的刻串。

样例输出

2 2 2 0
YY
YY

样例出口

YY

迹象

[通知漫游]

30% : n <= 100.

60% : n <= 5000 , m <= 100.

100% : 1 <= n <= 30000 , 1 <= m <= 500. 0 <= p , q. p + q <= n.

创作

长乐八中等学校的第整天

solution:

见M和500,N 30000,时期复杂的事物O(n?2)相对不值得讨论的。,独自的O(nm)。这意图找到一答案,早已呈现了好几次,无法细目,要节省,最大本钱是O(LG) n的时期查询)。因而每个答案都必要编号。,记起哈希是很自是的。。至多会有N个答案。,不克不及直线用部署兵力内存,因要翻开低级的,P麝香更小。,鉴于诞辰自相矛盾的人或事,会有很多冲。,这是一散列,弄错了易于。,这太不可靠了。。实则,P极大。,履行使发誓,单哈希也可以被测。,但它依然缺席翻开部署兵力。,它不如双重散列法。。胜过的方式是将每对散列值绑定被拖。,排序,当你昂首看时,两分钟就好了。,查询时期复杂的事物(LG) n),可以的。自然,C 的球员平均,我小病写这,我很懒的。你可以本身运用set和两点。,因此会实用的多了。,只因为,最实用的的是身负重担的人。,直线作为部署兵力,一瞧10×18次的部署兵力。,实则,独自的O(n)的挡住通路。,神器啊!另一方面身负重担的人是用红和黑的树写的。,因而时期复杂的事物是O(LG) n),常数遗传因子较大。,拍子会变慢。。侥幸的是,这个话题否认惧怕颞叶癫痫。,运用起来是变得安全的。。因此做易于。,细目每一答案,计算散列值,获得它呈现的次数。,判别假设本利之和P,结果是,那时的把它取返回(n到y),Y变N),计算散列值,判别假设本利之和q,结果是平均的,把刻串与答案比力,最小字典挨次。注重p、Q可以是0,要特别处置,显著地当p=q=0,直线曲解的狭条是好的。,O(n)的。上面是加密,运用STL静静地很长的路要走。……

#include#include#include#include#include#include#includeusingnamespacestd;
typedeflonglong ll;
ll read(){
    ll ans=0;
    char ch=getchar(),last='' '';
    while(CH>''9''||ch<''0''){
        last=ch;
        ch=getchar();
    }
    while(CH<=''9''&&ch>=''0''){
        ans=ans*10+ch-''0'';
        ch=getchar();
    }
    if(决赛''-'')
        ans=-ans;
    return ans;
}
mapmapint> > a;
int n,m,p,q;
ll x,y,ans,xx,yy,p1,p2;
char st[30005][505],ac[505];
bool flag;
bool ok(char* a,char* b){
    for(int i=0;iif(a [ i ]!=b[i])
            return [我]returnfalse;
}
int main(){
    p1=(ll)1000000007;
    p2=(ll)1000000003;
    n=read();
    m=read();
    p=read();
    q=read();
    for(int i=1;i<=n;i++){
        scanf("%s",st [ i ]
        x=y=0;
        for(int j=0;jif(st[i][j]==''Y''){
                x=(x+(ll)1)%p1;
                y=(y+(ll)1)%p2;
            }
        }
        a[x][y]++;
    }
    if(p==0&&q==0){
        for(int i=0;i''N'';
        交流[M].1]=''Y'';
        while(1){
            x=y=0;
            for(int j=0;jif(ac)''Y''){
                    x=(x+(ll)1)%p1;
                    y=(y+(ll)1)%p2;
                }
            }
            xx=yy=0;
            for(int j=0;jif(ac)''N''){
                    xx=(xx+(ll)1)%p1;
                    yy=(yy+(ll)1)%p2;
                }
            }
            if(a[x][y]==0[ YY ]0){
                flag=true;
                break;
            }
            int k=-1;
            for(int j=m-1;j>=0;j--)
                if(ac)''N''){
                    k=j;
                    break;
                }
            ac [ K ]''Y'';
            for(int j=k+1;j''N'';  
        }
        if(记号)
            for(int j=0;jprintf("%c",交流[ J ]
            printf("\n");
        }
        elseprintf("-1\n");
        return0;
    }
    if(p==0){
        for(int i=1;i<=n;i++){
            x=y=0;
            for(int j=0;jif(st[i][j]==''Y''){
                    x=(x+1)%p1;
                    y=(y+1)%p2;
                }
            }
            xx=yy=0;
            for(int j=0;jif(st[i][j]==''N''){
                    xx=(xx+1)%p1;
                    yy=(yy+1)%p2;
                }
            }
            if(a[x][y]==q[ YY ]p){
                ans++;
                if(ANS1好的(AC,st [ i ]
                    for(int j=0;jif(ANS)
            for(int j=0;jprintf("%c",交流[ J ]''Y''?''N'':''Y'');
            printf("\n");
        }
        return0;
    }
    if(q==0){
        for(int i=1;i<=n;i++){
            x=y=0;
            for(int j=0;jif(st[i][j]==''Y''){
                    x=(x+1)%p1;
                    y=(y+1)%p2;
                }
            }
            xx=yy=0;
            for(int j=0;jif(st[i][j]==''N''){
                    xx=(xx+1)%p1;
                    yy=(yy+1)%p2;
                }
            }
            if(a[x][y]==p[ YY ]q){
                ans++;
                if(ANS1好的(st I),交流)
                    for(int j=0;jif(ANS)
            for(int j=0;jprintf("%c",交流[ J ]
            printf("\n");
        }
        return0;
    }
    for(int i=1;i<=n;i++){
        x=y=0;
        for(int j=0;jif(st[i][j]==''Y''){
                x=(x+1)%p1;
                y=(y+1)%p2;
            }
        }
        xx=yy=0;
        for(int j=0;jif(st[i][j]==''N''){
                xx=(xx+1)%p1;
                yy=(yy+1)%p2;
            }
        }
        if(a[x][y]==p[ YY ]q){
            ans++;
            if(ANS1好的(st I),交流)
                for(int j=0;jif(ANS)
        for(int j=0;jprintf("%c",交流[ J ]
        printf("\n");
    }
    elseprintf("-1\n");
    return0;
}

发表评论

电子邮件地址不会被公开。 必填项已用*标注

`