zoukankan      html  css  js  c++  java
  • 【省选模拟测试3】

                    T1

    题目:

    【题目描述】

    现有给定一个序列a_0,a_1,.....a_(n-1)共n项以及m个操作。操作分成以下三类:

    0: 将区间[l,r]中的数加上一个值x

    1: 将区间[l,r]中的数乘上-1

    2: 询问区间[l,r]中的数的绝对值之和

    编程实现以上操作。

    【输入格式】

    第一行两个数n,m,分别表示序列的长度和操作的个数

    第二行n个数,第i个数表示a_(i-1)

    第三至m+2行,每行采取下列形式之一:

    0 l r x (表示第0种操作)

    1 l r (表示第1种操作)

    2 l r (表示第2种操作)

    l,r,x意义如题目描述中所述。

    【输出格式】

    共k行(其中k是第2种操作的个数),第i行有且仅有一个数,表示第i次第2种操作的答案。

    【样例输入】

    4 4

    -2 -1 0 1

    2 0 3

    1 1 3

    0 0 1 2

    2 0 2

    【样例输出】

    4

    3

    【时空限制与数据约束】

    时间:3s  空间:256MB

    对于40%的数据,n,m<=10000

    对于100%的数据,n,m<=100000

    数据保证所有时刻序列中的数的绝对值总和不会超过64位有符号整形范围。

    题解:

      乍一看以为是水题……写了一个多小时Seg套Splay发现调不出来……oh,fxxk!然后就mengbier了= =。

      zyf大佬使用吉司机线段树思想?(这是什么?)

      题解是分块233,真是妙啊。

      当时一心想怎么用线段树维护233,没有考虑用分块/莫队……emmmm,真是

      改起来也十分不方便……真的很naive……

      考虑如何维护,因为*-1实际上绝对值不会改变只是每个值从$now[x]=a[x]+add[bel[x]]$改变为$-now[x]$,但以后给该元素+add就会变为-add,画个图就明白了,这样搞定了操作0。

      然后对于*-1的维护(当然是两边的啦),假设这个块被标记了奇数次-1,那么实际每个数值均为当前记录的值的相反数,但是我们又有一部分变为了偶数次-1,发现假设块的add不变,我们直接给这几个值*-1是错的,(列列式子就明白),那么处理这个问题有两种方式,1是块里每个元素+add再乘-1,然后把add清空,再把部分修改的值*-1,重建这个块,2是给修改元素+add*2,再*-1。第一个很好理解,第二个化化式子就明白了。

      当然由于维护块内答案需要二分,所以要把块设的小一点。

    代码:

      1 #include "bits/stdc++.h"
      2 
      3 using namespace std;
      4 
      5 typedef long long ll;
      6 
      7 inline int read(){
      8     int s=0,k=1;char ch=getchar();
      9     while (ch<'0'|ch>'9')   ch=='-'?k=-1:0,ch=getchar();
     10     while (ch>47&ch<='9')   s=s*10+(ch^48),ch=getchar();
     11     return s*k;
     12 }
     13 
     14 
     15 inline ll readll(){
     16     ll s=0,k=1;char ch=getchar();
     17     while (ch<'0'|ch>'9')   ch=='-'?k=-1:0,ch=getchar();
     18     while (ch>47&ch<='9')   s=s*10+(ch^48),ch=getchar();
     19     return s*k;
     20 }
     21 
     22 const int N=1e5+10;
     23 
     24 
     25 ll a[N],ans[N],mo[N],b[1005][202],sum[1005][205];
     26 
     27 bool rev[N];
     28 
     29 int n,m,leth,bel[N],vis[N],L[N],R[N];
     30 
     31 inline void build(int op,int l,int r){
     32     int i;
     33     memcpy(b[op],a+l,sizeof b[op]);
     34     sort(b[op],b[op]+r-l+1);
     35     memcpy(sum[op],b[op],sizeof sum[op]);
     36     ans[op]=abs(b[op][0]+mo[op]);
     37     for (i=1;i+l<=r;++i)
     38         sum[op][i]+=sum[op][i-1],ans[op]+=abs(b[op][i]+mo[op]);
     39     vis[op]=0;
     40 }
     41 
     42 inline void update(int l,int r,int lk,int rk,ll add){        
     43     int i;
     44     if(lk==rk)  {
     45         if(rev[lk]) add=-add;
     46         for (i=l;i<=r;++i) a[i]+=add;
     47         build(lk,L[lk],R[lk]);
     48     }else   {
     49         ll pl;
     50         if(rev[lk]) pl=-add;else pl=add;
     51         for (i=l;i<=R[lk];++i)  a[i]+=pl;
     52         build(lk,L[lk],R[lk]);
     53         if(rev[rk]) pl=-add;else    pl=add;
     54         for (i=L[rk];i<=r;++i)  a[i]+=pl;
     55         build(rk,L[rk],R[rk]);
     56         for (i=lk+1;i<rk;++i)   mo[i]+=(rev[i]?-add:add),vis[i]=true;
     57     }
     58 }
     59 
     60 inline void sigh(int l,int r,int lk,int rk){        
     61     int i;
     62     if(lk==rk)  {
     63         for (i=l;i<=r;++i)   a[i]=-(a[i]+2*mo[lk]);
     64         build(lk,L[lk],R[lk]);
     65     }else   {
     66         for (i=l;i<=R[lk];++i)  a[i]=-(a[i]+2*mo[lk]);
     67         build(lk,L[lk],R[lk]);
     68         for (i=L[rk];i<=r;++i)  a[i]=-(a[i]+2*mo[rk]);
     69         build(rk,L[rk],R[rk]);
     70         for (i=lk+1;i<rk;++i)   rev[i]^=1;
     71     }
     72 } 
     73 
     74 inline ll query (int op){
     75     int l=-1,r=R[op]-L[op]+1,mid;
     76     while(l+1<r){
     77         int mid=l+r>>1;
     78         if(b[op][mid]+mo[op]>=0)   r=mid;
     79         else    l=mid;
     80     }
     81     vis[op]=0;
     82     ans[op]=(sum[op][R[op]-L[op]]-sum[op][l])+mo[op]*(R[op]-l-L[op])
     83             -((l+1)*mo[op]+sum[op][l]);   
     84     return ans[op];
     85 }
     86 
     87 inline ll query (int l,int r,int lk,int rk){
     88     ll ret=0;int i;
     89     if(lk==rk)  
     90         for (i=l;i<=r;++i)      ret+=abs(a[i]+mo[lk]);
     91     else   {
     92         for (i=l;i<=R[lk];++i)  ret+=abs(a[i]+mo[lk]);
     93         for (i=L[rk];i<=r;++i)  ret+=abs(a[i]+mo[rk]);
     94         for (i=lk+1;i<rk;++i)   
     95             if(!vis[i]) ret+=ans[i];
     96             else    ret+=query(i);
     97     }
     98     return ret;
     99 }
    100 
    101 int main(){
    102     scanf("%d%d",&n,&m);leth=100;
    103     for (int i=1;i<=n;++i){
    104         a[i]=readll();
    105         bel[i]=(i-1)/leth;
    106         L[bel[i]]?0:L[bel[i]]=i;
    107         R[bel[i]]=i;
    108         b[bel[i]][i-bel[i]*leth-1]=a[i];
    109     }
    110     register int i,j;
    111 
    112     for (i=0;i<=bel[n];++i){
    113         sort(b[i],b[i]+R[i]-L[i]+1);
    114         memcpy(sum[i],b[i],sizeof (sum[i]));
    115         ans[i]=abs(b[i][0]);
    116         for (j=1;j+L[i]<=R[i];++j) sum[i][j]+=sum[i][j-1],ans[i]+=abs(b[i][j]);
    117     }
    118     ll x;
    119     int type,l,r;
    120     int tot=0;
    121     while (m--){
    122         type=read(),l=read()+1,r=read()+1;
    123         if(!type)   
    124             x=read(),     update(l,r,bel[l],bel[r],x);
    125         else   if(type&1)     sigh(l,r,bel[l],bel[r]);
    126         else printf("%lld
    ",query(l,r,bel[l],bel[r]));
    127     }
    128 }
    t1

              T2

    题目:

    【题目描述】

    fibonotci序列定义为下:

    F[n] = s[n-1]F[n-1] + s[n-2]F[n-2] (n >= 2)。

    F[0]=0,F[1]=1。

    其中s是一个循环长度为n的循环数组,即满足s[i] = s[i % n]。

    不过,s这个数组被熊孩子修改了几个位置,他把s中的第j个位置修改为了vj,也就是说,对于位置j,s[j] = v[j](j >= n)。

    请你在熊孩子修改之后,求出F[k]对P取模的结果。

    【输入】

    第一行两个整数k,P。

    接下来一行一个整数n,接下来一行n个整数,表示s[i]。

    再接下来一行一个整数m,表示熊孩子的修改。

    接下来m行,每行两个整数j,v[j],表示熊孩子做的修改,除修改位置之外的位置i,满足,s[i] = s[I % n](I >= n)

    【输出】

    输出一个整数,表示答案。

    【样例输入】

    10 8

    3

    1 2 1

    2

    7 3

    5 4

    【样例输出】

    4

    【数据范围】

    对于20%的数据,m = 0

    对于60%的数据,k <= 10^6

    对于100%的数据,n,m <= 50000, 0 <= K <= 10^18, 1 <= P <= 10^9,

    1 <= s[i], v[j] <= 10^9, n <= j <= 10^18,数据保证j互不相同。

    题解:

      (还是仿宋好看

      考试花了3h打+调,最后还是交了暴力。

      考虑没有熊孩子。

      可以发现,其中任意一个元素$f(x)$可以表示成关于$a*f_{0}+b*f_{1}$的一个表达式。

      进一步想,对于$f_{x}$必然可以用$Af_{y}+Bf_{y+1},y<x$来表达。

      深层思考循环数组,可以知道$f_{x}=Af_{y}+Bf_{y+1}$,若$y%n==z$,且$x-y$的值不变,会发现对任意的满足上式的系数$A、B$其实是不会改变的,而且我们发现这个系数$A,B$从$y,y+1$到$x,x+1$再到$z,z+1$的和$y,y+1$到$z,z+1$的系数是有关的,很容易得到一个表达式,而且发现可以矩阵乘。

      然后对于维护系数,我们发现可以直接维护(0,1)递推到[1,n+1]的系数,这个用线段树来。

      剩下就是有熊孩子的情况,我们直接矩阵乘优化,跑的有熊孩子前一个位置的二元组(x,x+1),(x+1)上有熊孩子,再用递推式暴力走过这个熊孩子。

      细节很多,就不细说了。

      不得不说,循环展开快3倍……

    代码:

      

      1 #include "bits/stdc++.h"
      2 
      3 using namespace std;
      4 
      5 typedef  long long ll;
      6 
      7 inline int read(){
      8    int s=0,k=1;char ch=getchar();
      9    while (ch<'0'|ch>'9')   ch=='-'?k=-1:0,ch=getchar();
     10    while (ch>47&ch<='9')   s=s*10+(ch^48),ch=getchar();
     11    return s*k;
     12 }
     13 
     14 
     15 const int N=50005;
     16 
     17 int n,m,p,s[N];
     18 
     19 ll k;
     20 
     21 struct Matrix{
     22     ll a[2][2];
     23     Matrix(){memset(a,0,sizeof a);}
     24     Matrix(int A,int b,int c,int d){
     25         a[0][0]=A,a[0][1]=b,a[1][0]=c,a[1][1]=d;
     26     }
     27     friend Matrix operator *(Matrix a,Matrix b){
     28         Matrix c;
     29         c.a[0][0]=(1ll*a.a[0][0]*b.a[0][0]+1ll*a.a[0][1]*b.a[1][0])%p;
     30         c.a[0][1]=(1ll*a.a[0][0]*b.a[0][1]+1ll*a.a[0][1]*b.a[1][1])%p;
     31         c.a[1][0]=(1ll*a.a[1][0]*b.a[0][0]+1ll*a.a[1][1]*b.a[1][0])%p;
     32         c.a[1][1]=(1ll*a.a[1][0]*b.a[0][1]+1ll*a.a[1][1]*b.a[1][1])%p;
     33         
     34         return c;
     35     }
     36     friend Matrix operator ^(Matrix a,ll b){
     37         Matrix ans;
     38         for (int i=0;i<2;++i)   ans.a[i][i]=1;
     39         for (;b;b>>=1,a=a*a)
     40             if(b&1) ans=ans*a;
     41         return ans;
     42     }
     43 };
     44 
     45 struct Tree{
     46      Matrix g;
     47 }tree[N*4];
     48 
     49 #define lc(x) (x<<1)
     50 #define rc(x) (x<<1|1)
     51 
     52 inline void build(int u,int l,int r){
     53     if(l==r)    {
     54         tree[u].g=Matrix(0,1,s[l],s[l+1]);
     55         return ;
     56     }
     57     int mid=l+r>>1;
     58     build(lc(u),l,mid);
     59     build(rc(u),mid+1,r);
     60     tree[u].g=tree[rc(u)].g*tree[lc(u)].g;
     61 }
     62 
     63 inline Matrix query(int u,int l,int r,int x,int y){
     64     if(x>y) return Matrix(1,0,0,1);    
     65     if(x<=l&&r<=y)  return tree[u].g;
     66     int mid=l+r>>1;
     67     Matrix ret=Matrix(1,0,0,1);
     68     if(y>mid)   ret=ret*query(rc(u),mid+1,r,x,y);    
     69     if(x<=mid)  ret=ret*query(lc(u),l,mid,x,y);
     70 
     71     return ret;
     72 }
     73 
     74 struct node{
     75     ll id;int v;
     76     friend bool operator <(node a,node b){
     77         return a.id<b.id;
     78     }
     79 }bc[N];
     80 
     81 map<ll,int> mp;
     82 
     83 int main(){
     84     scanf("%lld",&k),p=read();
     85     n=read();register int i=0,j;
     86     for (;i<n;++i)  s[i]=read()%p;
     87     s[n]=s[0];
     88     build(1,0,n-1);
     89     m=read();
     90     for (i=1;i<=m;++i)
     91         scanf("%lld",&bc[i].id),bc[i].v=read()%p;
     92     sort(bc+1,bc+m+1);
     93     while (bc[m].id>=k) --m;
     94     if(bc[m].id!=k-1)
     95         bc[++m]=(node){k-1,s[(k-1)%n]};
     96     Matrix ans=Matrix(1,0,0,0);
     97     int x=1,y=0,tt,t1,t2,nowa;
     98     ll now,to,t;
     99     Matrix e;
    100     for (i=1,now=0;i<=m;){
    101         ans=Matrix(y,0,x,0);
    102         to=bc[i].id-2,nowa=now%n;
    103         e=query(1,0,n-1,0,nowa-1)*query(1,0,n-1,nowa,n-1);   
    104         ans=(e^((to-now)/n))*ans;
    105         now+=n*((to-now)/n);
    106         if(to/n==now/n) e=query(1,0,n-1,nowa,to%n);
    107         else    e=query(1,0,n-1,0,to%n)*query(1,0,n-1,nowa,n-1);
    108         ans=e*ans,mp.clear(),y=ans.a[0][0],x=ans.a[1][0];    
    109             
    110         mp[bc[i].id]=bc[i].v;
    111 
    112         for (j=i+1;j<=m;++j)
    113             if(bc[j].id>bc[j-1].id+2) break;
    114             else    mp[bc[j].id]=bc[j].v;
    115         t=max(bc[i].id+1,now+2);
    116         t1=(t-1)%n,t2=(t-2)%n,tt;
    117         for (;t<=bc[j-1].id+2;++t,++t1,++t2)    {            
    118             tt=1ll*x*(mp.count(t-1)?mp[t-1]:s[t1])%p+1ll*y*(mp.count(t-2)?mp[t-2]:s[t2])%p;
    119             y=x,x=tt%p;
    120             (t1^n)?0:t1=0;
    121             (t2^n)?0:t2=0;
    122         }   
    123         now=t-2;
    124         i=j;
    125     }
    126 
    127     printf("%d
    ",y);
    128 }
    t2

                  T3

    题目:

      

    【题目描述】

    现有一个n*m的棋盘,上面有c个格子里有蟑螂药(蟑螂不能在上面行走),有d个格子里有蟑螂食分发器(分发器可以始终让这个格子上具有蟑螂食)。现有足够多的蟑螂要在棋盘上游走(每时每刻蟑螂都必须在行走,只可走向有公共边的格子),每只蟑螂的路线都是回路,蟑螂的路线互不相交。为了不让蟑螂食腐烂,需要让每个分发器都有一只蟑螂经过。现在问有几种符合以上条件的安排方案(注意在没有蟑螂食的时候,一只蟑螂都不放也是一种方案)。

    【输入格式】

    第一行四个数n,m,c,d,如题目描述所述。

    如果c不为0,则第二至c+1行每行两个数表示含有蟑螂药的格子的坐标。

    如果d不为0,则第c+2至c+d+1行每行两个数表示含有蟑螂食分发器的格子的坐标。

    【输出格式】

    第一行有且仅有一个数,表示方案数对1e9+7取模的结果。

    【样例输入】

    2 4 0 1

    1 1

    【样例输出】

    4

    【时空限制与数据约束】

    时间:2s  空间:256MB

    对于20%的数据,n<=6

    对于40%的数据,n<=1e6

    对于40%的数据,c=d=0

    对于100%的数据,1<=n<=1e18,1<=m<=4,0<=c<=15,0<=d<=15

    题解:  

      由于题目太过恶心,所以考试时候并没有想++。然而发现是最水的题……

      矩阵乘+插头DP。由于之前老师在上一场以前说,上一场要考插头DP,然而并没有考,于是我调侃那天数位DP为“老师该不会认为这是矩阵乘+插头DP吧”。所以老师确实是这么认为的……有着些许的迷茫

      会插头基本看到就知道是SB题,就是写起来有点麻烦……

      早知道就先做这道题了……

    代码:

      

      1 #include "bits/stdc++.h"
      2 
      3 #define int long long 
      4 
      5 using namespace std;
      6 
      7 inline int read(){
      8     int s=0,k=1;char ch=getchar();
      9     while (ch<'0'|ch>'9') ch=='-'?k=-1:0,ch=getchar();
     10     while (ch>47&ch<='9') s=s*10+(ch^48),ch=getchar();
     11     return s*k;
     12 }
     13 
     14 const int mod=1e9+7,N=1e4+10;
     15 
     16 typedef long long ll;
     17 
     18 map<int,int> id;
     19 
     20 int large,rid[20];
     21 
     22 struct Matrix{
     23     int a[20][20];
     24     Matrix () {memset(a,0,sizeof a);}
     25     friend Matrix operator *(Matrix a,Matrix b){
     26         Matrix c;
     27         for (int i=1;i<=large;++i)
     28             for (int j=1;j<=large;++j)
     29                 for (int k=1;k<=large;++k)
     30                     c.a[i][j]=(c.a[i][j]+a.a[i][k]*1ll*b.a[k][j]%mod)%mod;
     31         return c;
     32     }
     33 
     34     friend Matrix operator ^(Matrix a,ll b){
     35         Matrix ans;
     36         for (int i=1;i<=large;++i)  ans.a[i][i]=1;
     37         for (;b;b>>=1,a=a*a)  
     38             if(b&1) ans=ans*a;
     39         return ans;
     40     }
     41 }e;
     42 
     43 int bit[15];
     44 
     45 int tot[2],stk[2][N],h[N],t,dp[2][N],mp[100][10],n,m,c,d;
     46 
     47 inline void add(int s,ll val){
     48     int pos=s%N;
     49     while (h[pos]!=-1){
     50         if(stk[t][h[pos]]==s)   {
     51             dp[t][h[pos]]+=val;
     52             if(dp[t][h[pos]]>=mod)
     53                 dp[t][h[pos]]%=mod;
     54             return ;
     55         }
     56         ++pos;
     57         if(pos==N)  pos=0;
     58     }
     59     dp[t][++tot[t]]=val;
     60     h[pos]=tot[t];
     61     stk[t][tot[t]]=s;
     62 }
     63 
     64 inline void insert(int i,int j){
     65     t^=1;tot[t]=0;
     66     memset(h,-1,sizeof(h));
     67     register int k;
     68     for(k=1;k<=tot[t^1];++k){
     69         int s=stk[t^1][k];
     70         ll val=dp[t^1][k];
     71         int p=(s>>bit[j-1])&3,q=(s>>bit[j])&3;  
     72         if(!mp[i][j]){if(!p&&!q)  add(s,val);
     73         }else   if(!p&&!q){
     74             if((~mp[i][j])&2)   add(s,val);
     75             if(mp[i][j+1]&&mp[i+1][j]){
     76                 s+=(1<<bit[j-1])+(1<<bit[j]+1);
     77                 add(s,val);
     78             }
     79         }else   if(!p&&q){
     80             if(mp[i][j+1]) add(s,val);
     81             if(mp[i+1][j]){
     82                 s+=(q<<bit[j-1])-(q<<bit[j]);
     83                 add(s,val);
     84             }
     85         }else   if(!q&&p){
     86             if(mp[i+1][j])  add(s,val);
     87             if(mp[i][j+1]){
     88                 s+=(p<<bit[j])-(p<<bit[j-1]);
     89                 add(s,val);
     90             }
     91         }else if(p+q==2){
     92             int b=1;
     93             for(int a=j+1;a<=m;++a){
     94                 int v=(s>>bit[a])&3;
     95                 if (v==1) b++;
     96                 if (v==2) b--;
     97                 if (!b){
     98                     s-=(1<<bit[a]);
     99                     break;
    100                 }
    101             }
    102             s-=(1<<bit[j-1])+(1<<bit[j]);
    103             add(s,val);
    104         }
    105         else if (p+q==4){
    106             int b=1;
    107             for(int a=j-2;a;--a){
    108                 int v=(s>>bit[a])&3;
    109                 if (v==2) b++;
    110                 if (v==1) b--;
    111                 if(!b){
    112                     s+=(1<<bit[a]);
    113                     break;
    114                 }
    115             }
    116             s-=(1<<bit[j-1])+(1<<bit[j])<<1;
    117             add(s,val);
    118         }else   if(p+q==3){
    119             s^=(p<<bit[j-1])|(q<<bit[j]);
    120             add(s,val);
    121         }
    122     }
    123 }
    124 
    125 inline void DP(int beg,int val,int level){
    126     t=0;
    127     tot[0]=1,dp[t][1]=val,stk[t][1]=beg;
    128     register int i,j,k;
    129     for (i=1;i<=level;++i){        
    130         for (j=1;j<=tot[t];++j)  stk[t][j]<<=2;
    131         for (j=1;j<=m;++j)
    132             insert(i,j);
    133     }
    134 }
    135 
    136 struct node {
    137     ll x,y;int type;
    138     friend bool operator <(node a,node b){
    139         return a.x<b.x||(a.x==b.x&&a.y<b.y);
    140     }
    141 }p[50];
    142 
    143 int all;
    144 
    145 int val[20];
    146 
    147 inline void Get_ans(int level){
    148     tot[0]=large;
    149     t=0;
    150     for (int i=1;i<=large;++i)
    151         stk[t][i]=rid[i],dp[t][i]=val[i];
    152     register int i,j,k;
    153     for (i=1;i<=level;++i){        
    154         for (j=1;j<=tot[t];++j)  stk[t][j]<<=2;
    155         for (j=1;j<=m;++j)
    156             insert(i,j);
    157     }
    158 }
    159 
    160 inline void solve(){
    161     ll now=0;
    162     Matrix ans;
    163     val[1]=1;        int level;
    164 
    165     for (int i=1;i<=all;){
    166         for (int j=1;j<=80;++j)
    167             for (int k=1;k<=m;++k)  mp[j][k]=1;
    168         for (int j=1;j<=large;++j)  ans.a[j][1]=val[j];
    169         ans=(e^(max(p[i].x-now-2,0ll)))*ans; 
    170         now=max(p[i].x-2,0ll);
    171         for (int j=1;j<=large;++j)  val[j]=ans.a[j][1];
    172         int j=i+1;
    173         mp[p[i].x-now][p[i].y]=p[i].type;
    174         for (;j<=all;++j)
    175             if(p[j].x>p[j-1].x+2)   break;
    176             else   mp[p[j].x-now][p[j].y]=p[j].type;
    177         level=p[j-1].x-now;
    178         Get_ans(level);
    179         i=j,now=p[j-1].x;
    180         memset(val,0,sizeof(val));
    181 
    182         for (int j=1;j<=tot[t];++j)
    183             val[id[stk[t][j]]]=dp[t][j];
    184     
    185     }
    186     printf("%lld
    ",val[1]);
    187 }
    188 
    189 signed main(){
    190     for (int i=0;i<=10;++i) bit[i]=i<<1;
    191     n=read(),m=read(),c=read(),d=read();
    192     ll x,y;
    193     for (int i=1;i<=c;++i)  {
    194         scanf("%lld%lld",&x,&y);
    195         if(y==0)    {
    196             --i,--c;continue;
    197         }
    198         p[i]=(node){x,y,0};
    199     }
    200     for (int i=1;i<=d;++i)  {
    201         scanf("%lld%lld",&x,&y);
    202         if(y==0)    {
    203             --i,--d;continue;
    204         }
    205         p[i+c]=(node){x,y,2};
    206     }
    207     sort(p+1,p+c+d+1);all=c+d;
    208     if(p[c+d].x!=n)    p[++all]=(node){n,m,1};
    209     for (int i=1;i<=3;++i)
    210         for (int j=1;j<=m;++j)
    211             mp[i][j]=true;
    212     DP(0,1,2);
    213     for (int i=1;i<=tot[t];++i)
    214         id[stk[t][i]]=i;
    215     map<int,int>::iterator it;
    216     large=id.size();
    217     int i;
    218     for (it=id.begin(),i=1;it!=id.end();++it){
    219         rid[i]=it->first;
    220         it->second=i++;
    221     }
    222     for (it=id.begin();it!=id.end();++it){
    223         DP(it->first,1,1);
    224         for (int i=1;i<=tot[t];++i) {
    225             e.a[id[stk[t][i]]][it->second]=dp[t][i];
    226         }
    227     }
    228     solve();
    229 }
    垃圾t3
  • 相关阅读:
    笔记类软件的选择——有道云笔记与OneNote
    蓝屏的解决办法
    imshow()不显示灰度图像
    对待电子产品出问题的态度
    文献的管理、阅读及笔记
    电脑安全设置
    搜索引擎的选择与在chrome上的设置
    用Quartz处理定时执行的任务
    bootstrap datetimepick 时分秒选择,坑我15个小时,整理记录
    bootstrap可编辑下拉框jquery.editable-select
  • 原文地址:https://www.cnblogs.com/Troywar/p/8391006.html
Copyright © 2011-2022 走看看