zoukankan      html  css  js  c++  java
  • bug运输[辽宁2014年省队互测一]

    奇奇怪怪的题目,不知道他要我们干什么。

    我们观察一波局势,发现答案最大不过5.因为如果答案是6或以上的话,我们就至少要2^(5*5)个5*5的方格。

    仔细计算一波时间复杂度,再信仰一波,坚信暴力压正解。

    #include<bits/stdc++.h>
    #define sight(c) ('0'<=c&&c<='9')
    #define N 1007
    #define X(x) x<<=1,x|=a[j+ii][k+jj]
    #define Y(x) x<<=1,x|=a[j+jj][k+ii]
    #define MARICLE __attribute__((optimize("-O3")))
    #define O(x) f[x]?(x=0):(f[x]=1,ans++,x=0);
    MARICLE inline void read(int &x){
        static char c;
        for (c=getchar();!sight(c);c=getchar());
        for (x=0;sight(c);c=getchar())x=x*10+c-48;
    }
    MARICLE inline void reads(bool &x){
        static char c;
        for (c=getchar();!sight(c);c=getchar()); x=(int)c-48;
    }
    using namespace std;
    MARICLE void write(int x){if (x<10) {putchar('0'+x); return;} write(x/10); putchar('0'+x%10);}
    MARICLE inline void writeln(int x){ if (x<0) putchar('-'),x*=-1; write(x); putchar('
    '); }
    int n,ag,op,ans,ap,ot;
    bool a[N][N],k[2],f[(1<<25)+7];
    MARICLE void writeLn(int x,int len){
        for (int i=len-1;~i;i--) {
         for (int j=len-1;~j;j--)
          putchar('0'+(x>>i*len+j&1));putchar('
    ');}
    }
    MARICLE int main () {
    //  freopen("a.in","r",stdin);
        read(n);
        for (int i=1;i<=n;i++) for (int j=1;j<=n;j++) reads(a[i][j]),k[a[i][j]]=1;
        if (!k[0]) {writeln(1);writeln(0);return 0;}
        if (!k[1]) {writeln(1);writeln(1);return 0;}
        for (int i=2;i<=5;i++) {
          memset(f,0,sizeof f);ans=0;
          for (int j=n-i+1;j;j--)
            for (int k=n-i+1;k;k--) {
               for (int ii=0;ii<i;ii++) for (int jj=0;jj<i;jj++) X(ag),Y(ap); 
                O(ag);O(ap);
               for (int ii=i-1;~ii;ii--) for (int jj=0;jj<i;jj++) X(ag),Y(ap); 
                O(ag);O(ap);
               for (int ii=0;ii<i;ii++) for (int jj=i-1;~jj;jj--) X(ag),Y(ap); 
                O(ag);O(ap);
               for (int ii=i-1;~ii;ii--) for (int jj=i-1;~jj;jj--) X(ag),Y(ap); 
                O(ag);O(ap);
            }
          if (ans^(1<<i*i)) {
            ot=1<<i*i;
            for (int g=0;g<ot;g++)
             if (!f[g])  { writeln(i),writeLn(g,i); return 0;}
          } 
        }
    }
  • 相关阅读:
    一些鲜为人知的编程真相
    一些鲜为人知的编程真相
    Ruby 1.9不会杀死Python
    Boost.Asio和ACE之间关于Socket编程的比较
    Effective C++第17条:要在单独的语句中使用智能指针来存储由new创建的对象
    Ruby 1.9不会杀死Python
    Boost智能指针——weak_ptr
    对象生死劫 - 构造函数和析构函数的异常
    Protocol Buffers:Google 的数据交换格式
    根据出生日期计算年龄
  • 原文地址:https://www.cnblogs.com/rrsb/p/8215077.html
Copyright © 2011-2022 走看看