zoukankan      html  css  js  c++  java
  • bzoj 2375: 疯狂的涂色

    2375: 疯狂的涂色

    Time Limit: 5 Sec  Memory Limit: 128 MB

    Description

    小t非常喜爱画画,但是他还是一个初学者。他最近费尽千辛万苦才拜到已仙逝的达芬奇为师(神仙?妖怪?谢谢)。达芬奇果然是画鸡蛋长大的,让小t一入门就拿着一张白纸条疯狂地涂色。假设纸条被划分成了n个区域,用1~n的整数从左到右顺序编号,达芬奇总共下达了m条指令。第I条指令是让小t把编号为(I*p+q)mod n+1与(I*q+p)mod n+1(p,q为常整数)之间的区域(连续的一段区域)涂成第I种颜色。你可以假设达芬奇家中颜料的颜色数足够多(达芬奇是画鸡蛋长大的)。
    现在由于达芬奇下达的指令过多,小t一时应付不过来。达芬奇只让他回答每一个区域最后的颜色。趁达芬奇还在“五谷轮回之所”忙碌时,小t偷偷的请让你这个计算机高手帮他算出最后的颜色状态,并告诉他。时间紧迫,要快哟!(达芬奇的指令次数多到恶心)
     

    Input

    为四个整数n,m,p,q。

    Output

    n行,第I行代表最后第I个格子的颜色。白色编号为0。

    HINT

    1≤n≤1000000,1≤m≤10000000;1≤m*p+q,m*q+p≤231-1;

     友情提示:

    加入编译开关{$M 100000000,0,100000000},可防栈溢出。

    一千多行的样例,不粘了

    m≤10000000,肯定不能每个操作挨着做一遍

    染色就是覆盖,所以最终答案是最后一次染色

    所以倒着染,并查集fa[i]=j 表示自i往后第一个没有染颜色的是j

    每次染一个点后,令fa[i]=find(j+1)

    当find(1)==n+1时,全部染色完毕,break

    这样保证每个点只被染一遍,时间复杂度O(n)

    #include<cstdio>
    #include<algorithm>
    using namespace std;
    int fa[1000011],ans[1000011];
    inline int read()
    {
        int x=0,f=1; char c=getchar();
        while(c<'0'||c>'9') { if(c=='-') f=-1; c=getchar(); }
        while(c>='0'&&c<='9') { x=x*10+c-'0'; c=getchar(); }
        return x*f;
    }
    inline int find(int i) { return fa[i]==i ? i : fa[i]=find(fa[i]);   }
    int main()
    {
        int n,m,p,q,l,r,tmp;
        n=read(); m=read(); p=read(); q=read();
        for(int i=1;i<=n+1;i++) fa[i]=i;
        for(int i=m;i;i--)
        {
            l=(i*p+q)%n+1; r=(i*q+p)%n+1; 
            if(l>r) swap(l,r); 
            for(int j=find(l);j<=r;j=tmp)
            {
                ans[j]=i;
                tmp=find(j+1);
                fa[j]=tmp;
            }
            if(find(1)==n+1) break;
        }
        for(int i=1;i<=n;i++) printf("%d
    ",ans[i]);
    }
  • 相关阅读:
    php 实现店铺装修3
    脸如何瘦
    第一次约会看电影的细节 了解好男人的标准看他是否合格
    14细节 看男人爱你到什么程度:第一次约会时他沉默寡言
    男生第一次约会穿什么?
    提高心理素质 2
    心理素质差的原因
    如何提高心理素质
    不适合做老婆的女人,五大特质(转载)
    心理素质差的表现
  • 原文地址:https://www.cnblogs.com/TheRoadToTheGold/p/6868896.html
Copyright © 2011-2022 走看看