• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            pku 1176 Party Lamps

            這道題題意是:
            有N盞燈,每個燈有兩個狀態:開、關。有4個按鈕,第一個按鈕使得所有燈改變狀態,第二個按鈕使得奇數號燈改變狀態,第三個按鈕使得偶數號燈改變狀態,第四個按鈕使得3K+1號燈改變狀態。
            開始所有燈都是亮著的,給出操作次數,最后亮著的燈和滅了的燈,求最后所有可能的狀態。
            這題可以用模二方程組來表示。設a、b、c、d分別為第一個、第二個、第三個、第四個按鈕按過的次數。count為操作總數,滿足:
            如第k盞燈亮著
            如k%2==1&&(k-1)%3==0,則(a+b+d)%2=0
            如k%2==1&&(k-1)%3==1,則(a+b)%2=0
            如k%2==0&&(k-1)%3==0,則(a+c+d)%2=0
            如k%2==0&&(k-1)%3==1,則(a+c)%2=0
            如第k盞燈滅著
            如k%2==1&&(k-1)%3==0,則(a+b+d)%2=1
            如k%2==1&&(k-1)%3==1,則(a+b)%2=1
            如k%2==0&&(k-1)%3==0,則(a+c+d)%2=1
            如k%2==0&&(k-1)%3==1,則(a+c)%2=1

            開始想用高斯消元來處理這個方程組,后來一看變量只有4個。。而且是模二關系下的方程組,直接枚舉即可,總狀態數不過16種。然后構造解并hash判重即可。

            代碼如下:
             1import java.io.*;
             2import java.util.*;
             3public class Main {
             4
             5    /**
             6     * @param args
             7     */

             8    static int n=0,co=0,flag[]=new int [10];
             9    static char res[];
            10    static TreeSet<String> ans=new TreeSet<String>();
            11    static void makeans(int a,int b,int c,int d,int pos)
            12    {
            13        if(pos>n)
            14        {
            15            ans.add(new String(res));
            16        }

            17        else
            18        {
            19            if(pos%2==1)
            20                if((pos-1)%3==0)
            21                    res[pos-1]=(char)((a+b+d+1)%2+48);
            22                else
            23                    res[pos-1]=(char)((a+b+1)%2+48);
            24            else
            25                if((pos-1)%3==0)
            26                    res[pos-1]=(char)((a+c+d+1)%2+48);
            27                else
            28                    res[pos-1]=(char)((a+c+1)%2+48);
            29            makeans(a,b,c,d,pos+1);
            30        }

            31    }

            32    public static void main(String[] args) throws IOException{
            33        StreamTokenizer in=new StreamTokenizer(new BufferedReader(new InputStreamReader(System.in)));
            34        in.nextToken();
            35        n=(int)in.nval;;
            36        in.nextToken();
            37        co=(int)in.nval;
            38        Arrays.fill(flag,-1);
            39        flag[0]=co&1;
            40        res=new char[n];
            41        while(true)
            42        {
            43            in.nextToken();
            44            if((int)in.nval==-1break;
            45            int t=(int)in.nval;
            46            if((t&1)==1)
            47                if((t-1)%3==0)
            48                    flag[3]=0;
            49                else
            50                    flag[1]=0;
            51            else
            52                if((t-1)%3==0)
            53                    flag[4]=0;
            54                else
            55                    flag[2]=0;
            56        }

            57        while(true)
            58        {
            59            in.nextToken();
            60            if((int)in.nval==-1break;
            61            int t=(int)in.nval;
            62            if((t&1)==1)
            63                if((t-1)%3==0)
            64                    flag[3]=1;
            65                else
            66                    flag[1]=1;
            67            else
            68                if((t-1)%3==0)
            69                    flag[4]=1;
            70                else
            71                    flag[2]=1;
            72        }

            73        for(int a=0;a<=1;a++)
            74            for(int b=0;b<=1;b++)
            75                for(int c=0;c<=1;c++)
            76                    for(int d=0;d<=1;d++)
            77                    {
            78                        if(a+b+c+d>co) continue;
            79                        if(((a+b+c+d)&1)!=flag[0]) continue;
            80                        if(flag[1]!=-1&&((a+b)&1)!=flag[1]) continue;
            81                        if(flag[2]!=-1&&((a+c)&1)!=flag[2]) continue;
            82                        if(flag[3]!=-1&&((a+b+d)&1)!=flag[3]) continue;
            83                        if(flag[4]!=-1&&((a+c+d)&1)!=flag[4]) continue;
            84                        makeans(a,b,c,d,1);
            85                    }

            86        for(String p:ans)
            87           System.out.println(p);
            88    }

            89
            90}

            91

            posted on 2010-10-19 14:17 yzhw 閱讀(217) 評論(0)  編輯 收藏 引用 所屬分類: numberic

            <2010年10月>
            262728293012
            3456789
            10111213141516
            17181920212223
            24252627282930
            31123456

            導航

            統計

            公告

            統計系統

            留言簿(1)

            隨筆分類(227)

            文章分類(2)

            OJ

            最新隨筆

            搜索

            積分與排名

            最新評論

            閱讀排行榜

            一本综合久久国产二区| 久久夜色精品国产噜噜亚洲a| 欧美伊人久久大香线蕉综合| 精品久久久久久无码专区 | 一级做a爰片久久毛片看看| 精品久久人人爽天天玩人人妻| 18岁日韩内射颜射午夜久久成人| 伊人精品久久久久7777| 久久996热精品xxxx| 国产一级持黄大片99久久| 久久AV高潮AV无码AV| 免费无码国产欧美久久18| 久久96国产精品久久久| 99久久国产热无码精品免费| 久久久www免费人成精品| 18禁黄久久久AAA片| 亚洲精品乱码久久久久久| 亚洲AV无码久久精品成人| 欧美va久久久噜噜噜久久| 国产精品久久久久久| 一级做a爰片久久毛片人呢| 99久久99久久精品国产片果冻| 97精品伊人久久久大香线蕉| 99久久精品久久久久久清纯| 久久男人AV资源网站| 伊人久久无码中文字幕| 精品一区二区久久久久久久网站| 久久99精品免费一区二区| 久久香蕉国产线看观看精品yw| 精品久久人人做人人爽综合| 伊人久久久AV老熟妇色| 久久精品女人天堂AV麻| 中文字幕无码久久久| 国产精品美女久久久网AV| 色综合久久中文字幕无码| 中文字幕无码久久久| 久久久久综合网久久| 国产亚洲欧美精品久久久| 久久人人爽人人爽人人片AV东京热| 久久免费线看线看| 国产精品一区二区久久精品无码 |