1. 程式人生 > >17.11.06

17.11.06

判斷 scan true bsp static 忘記 每一個 類型 計算

  • 上午模擬考試
    • Prob.1(AC

      題意:給出一個4*4的黑白棋盤,然後有一個騷操作:選擇一個位置,是它和它的上下左右的四個格子的顏色取反。問最後達到全黑或全白狀態的最小步數。

      1).BFS計算出到達每種狀態的最小步數。O(4*216

      2).劉汝佳先生書上的方法。

      由於每一個位置最多只會被操作一次。(顯然啦)

      所以枚舉第一行的那些位置被操作,然後後面每一行的操作就是要為了把上一行的異種顏色清幹凈。所以之後的操作是唯一固定,只需要判斷到最後一行是否合法就好了。 O(2n*n2,可以處理更大的數據

    • Prob.2(CE

      並查集維護

      (為了加速,在函數前面寫了inline,不僅沒啥用,反而因為這個忘記寫了函數類型(void,int、、、),cena編譯不過。但我的dev是怎麽編譯過的,還那麽正確的運行著???真的是涼了

      。)

      但讀入數據之大(9,000,000++),

      scanf要7~8s,

      普通讀入優化要2~3s

      只有寫神級讀入優化,只要0.8s,附上代碼:

      char gc(){
      	static char s[100005];
      	static int bit=100000,p,len;
      	if(p>=len) len=fread(s,1,bit,stdin),s[len]=EOF,p=0;
      	return s[p++];
      }
      void read(ll &x){
      	static int f;static char ch;
      	x=0; f=1; ch=gc();
      	while(ch<‘0‘||‘9‘<ch){if(ch==‘-‘)f=-1;ch=gc();}
      	while(‘0‘<=ch&&ch<=‘9‘){x=x*10+ch-‘0‘;ch=gc();}
      	x=x*f;
      }
    • Prob.3(AC
    • 一個狀壓dp,維護出F[S],表示集合S的最大值

    • Prob.4(不計分)
    • 一個差分約束。

      (原來相鄰的兩個點不一定要建邊啊。是要看是否有隱含條件的。)

17.11.06