BZOJ 刷題記錄 PART 4

來源:互聯網
上載者:User

標籤:刷題記錄   題解   bzoj   

【BZOJ1143】CTSC的題目。。。先用floyed傳遞閉包,然後直接上匈牙利演算法。

【BZOJ1452】從未寫過的二維樹狀數組。好像很簡單。。

struct two_bit{  int f[305][305];  inline void add(int x,int z,int A)  {    for (;x<=n;x+=L(x))      for (int y=z;y<=m;y+=L(y))        f[x][y]+=A;  }  inline int ask(int x,int z)  {    int ans=0;    for (;x;x-=L(x))      for (int y=z;y;y-=L(y))        ans+=f[x][y];    return ans;  }}a[105];

【BZOJ1876】高精GCD。但是實現卡的很緊。如果是裸的GCD,是否逾時不論,光是代碼長度就令人毛骨悚然。(詳見我的VIJOS1047題解)於是可以用二進位GCD來最佳化。

若A,B是偶數,GCD(A,B)=GCD(A/2,B/2)

若A是奇數,B是偶數,GCD(A,B)=GCD(A,B/2)

若A是奇數,B是奇數,GCD(A,B)=GCD(A-B,B)

直到A,B中的一個是0,或者A=B。

【BZOJ3038&3211】開始還以為是神題,後來發現了一個性質:一個數即使暴力根號操作,幾次後就會變成1。(主要還要特判0的情況!!!)於是我們可以用線段樹暴力修改。

【BZOJ1695&1743】這道許可權題萎了我好長時間。開始我倒著走,在字母樹中有子節點更新父節點——但是狂WA不止。於是開始更新子節點,總算A了。

for (i=1;i<=n;i++)    for (j=m;j;j--)      for (k=1;k<=num[map[i][j]];k++)      {        x=record[map[i][j]][k];        if (flag[x]) for (p=1;p<=j;p++) c[x][p]++;        for (son=0;son<26;son++)          if ((t=tree[x][son])>-1)            for (p=1;p<=j;p++)              c[x][p]+=c[t][j];      }  for (son=0;son<26;son++)     if (tree[0][son]>-1)      ans+=c[tree[0][son]][1];

【BZOJ3170】經典的座標重構。

for (i=1;i<=n;i++)   {    scanf("%lld%lld",&x,&y);a[i].x=x+y;a[i].y=x-y;    a[i].id=i;endx+=a[i].x;endy+=a[i].y;  }

【BZOJ3319】我淡淡地說:暴力RANK1,你能信?

【BZOJ1765&1356】找最大的面積?卡時間!先把所有對角線全部都找出來,排一遍序。從大到小枚舉每一個相等的對角線的集合,一但匹配成功就機智的BREAK。

【BZOJ1879】看題目這麼神,就是一個簡單的狀壓DP。

f[0][0]=1;    for (i=0;i<len;i++)      for (status=0;status<(1<<n);status++)        if (f[i][status])          for (j=0;j<26;j++)            up(f[i+1][status|c[i+1][j]],f[i][status]);

【BZOJ1226】神狀壓!注意到一個性質:BI<=7,也就是說,對於某一個點,影響他的只有前7個和後7個點。

PS:a or b-a and b不就是a xor b嗎?

    f[1][0][-1+A]=0;    for (i=1;i<=n;i++)      for (status=0;status<256;status++)        for (k=-8;k<=7;k++)          if (f[i][status][k+A]<INF)          {            if (status&1) {up(f[i+1][status>>1][k-1+A],f[i][status][k+A]);continue;}            r=INF;            for (j=0;j<=B[i];j++)              if (!(status&(1<<j)))              {                if (i+j>r) break;                up(r,B[i+j]+i+j);                up(f[i][status|(1<<j)][j+A],f[i][status][k+A]+cost(i+k,i+j));              }          }

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.