zoukankan      html  css  js  c++  java
  • 【POJ2893&HDOJ6620】M × N Puzzle(n*m数码判定)

    题意:给定一个n*m的矩阵,其中不重复地填【0,n*m-1】,问是否能通过有限步数将0移到右下角

    n,m<=1e3

    思路:结论题 当板子了

     1 #include<bits/stdc++.h>
     2 using namespace std;
     3 typedef long long ll;
     4 typedef unsigned int uint;
     5 typedef unsigned long long ull;
     6 typedef pair<int,int> PII;
     7 typedef pair<ll,ll> Pll;
     8 typedef vector<int> VI;
     9 typedef vector<PII> VII;
    10 //typedef pair<ll,ll>P;
    11 #define N  1000010
    12 #define M  200010
    13 #define fi first
    14 #define se second
    15 #define MP make_pair
    16 #define pb push_back
    17 #define pi acos(-1)
    18 #define mem(a,b) memset(a,b,sizeof(a))
    19 #define rep(i,a,b) for(int i=(int)a;i<=(int)b;i++)
    20 #define per(i,a,b) for(int i=(int)a;i>=(int)b;i--)
    21 #define lowbit(x) x&(-x)
    22 #define Rand (rand()*(1<<16)+rand())
    23 #define id(x) ((x)<=B?(x):m-n/(x)+1)
    24 #define ls p<<1
    25 #define rs p<<1|1
    26 
    27 const int MOD=1e9+7,inv2=(MOD+1)/2;
    28       double eps=1e-4;
    29       int INF=1e9;
    30       int inf=0x7fffffff;
    31       int dx[4]={-1,1,0,0};
    32       int dy[4]={0,0,-1,1};
    33 
    34       int t[N],mx;
    35 
    36 int read()
    37 {
    38    int v=0,f=1;
    39    char c=getchar();
    40    while(c<48||57<c) {if(c=='-') f=-1; c=getchar();}
    41    while(48<=c&&c<=57) v=(v<<3)+v+v+c-48,c=getchar();
    42    return v*f;
    43 }
    44 
    45 int query(int x)
    46 {
    47     int res=0;
    48     while(x<=mx)
    49     {
    50         res^=t[x];
    51         x+=lowbit(x);
    52     }
    53     return res;
    54 }
    55 
    56 void add(int x)
    57 {
    58     while(x)
    59     {
    60         t[x]^=1;
    61         x-=lowbit(x);
    62     }
    63 }
    64 
    65 int main()
    66 {
    67     int n,m;
    68     while(scanf("%d%d",&n,&m)!=EOF)
    69     {
    70         if(!n) break;
    71         mx=n*m;
    72         rep(i,1,mx) t[i]=0;
    73         int s=0,ans=0,k=0;
    74         rep(i,1,n)
    75          rep(j,1,m)
    76          {
    77              s++;
    78              int x=read();
    79              if(!x) k=n-i;
    80               else
    81               {
    82                   ans^=query(x);
    83                   add(x);
    84               }
    85          }
    86         if(m&1) k=0;
    87         if((ans+k)%2==0) printf("Yes
    ");
    88          else printf("No
    ");
    89     }
    90     return 0;
    91 }
  • 相关阅读:
    Java容器学习之ArrayList
    Java容器学习之List
    个人感悟
    python_批量修改密码综评
    修改的一段递归文件代码
    showtimu
    20190321xlVBA_明细信息表汇总成数据表
    20190320xlVBA_考场座位设置
    RG
    wdVBA_替换删除选择题括号中的选项
  • 原文地址:https://www.cnblogs.com/myx12345/p/11644397.html
Copyright © 2011-2022 走看看