17.11.06

  • 上午模拟考试
    • 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(不计分)

一个差分约束。

(原来相邻的两个点不一定要建边啊。是要看是否有隐含条件的。)

posted @ 2017-11-09 20:52  *ZJ  阅读(131)  评论(0编辑  收藏  举报