今天是noip2017d2测验
因为没开longlong写挂t1是一种什么样的体验???
1.奶酪
因为最近在练dfs,就十分钟写出dfs然后过了样例就交了不管了。
就不放代码了,看下次再写还记不记得开longlong
2.宝藏
其实之前刷状压时做过,写起来还好,中间因为剪错了枝,一度调试到不知所措。
1 const int maxn=1e4+5; 2 int f[1<<12],d[20],e[20][20]; 3 int n,m,ans=0x3f3f3f3f,num; 4 void read() 5 { 6 memset(e,0x3f,sizeof(e)); 7 n=quick(); 8 m=quick(); 9 int x,y,l;10 for(int i=1;i<=m;i++)11 {12 x=quick();13 y=quick();14 l=quick();15 e[x][y]=e[y][x]=min(e[x][y],l);16 }17 }18 void dfs(int now)19 {20 //printf("%d\n",now); 21 if(num==n)22 {23 ans=min(ans,f[(1<f[(1<
3.列队
先写了个30分代码,然后考试剩下的一个多小时全花在攻克n==1那4组数据上了,用鬼畜的线段树没有做出来,不过好歹练习了下线段树模版
30分+失败的线段树
1 const int maxn=1e6+5; 2 int n,m,q,ans,mark1,mark2; 3 int a[1005][1005]; 4 int sum[maxn],lazytag[maxn],b[maxn]; 5 void build(int l,int r,int x,int y,int z) 6 { 7 if(x==y) 8 { 9 if(x==m) 10 mark1=z; 11 sum[z]=0; 12 return; 13 } 14 int j=(x+y)>>1; 15 build(l,r,x,j,z<<1); 16 build(l,r,j+1,y,z<<1|1); 17 } 18 void pushdown(int x,int y,int z) 19 { 20 if(!lazytag[z]) 21 return; 22 lazytag[z<<1]=lazytag[z<<1|1]=lazytag[z]; 23 lazytag[z]=0; 24 } 25 void query(int u,int x,int y,int z) 26 { 27 if(u==x&&u==y) 28 { 29 ans=b[u+lazytag[z]]; 30 return; 31 } 32 pushdown(x,y,z); 33 int j=(x+y)>>1; 34 if(u<=j) 35 query(u,x,j,z<<1); 36 if(u>j) 37 query(u,j+1,y,z<<1|1); 38 39 } 40 void change1(int l,int r,int x,int y,int z) 41 { 42 if(l<=x&&r>=y) 43 { 44 lazytag[z]++; 45 return; 46 } 47 pushdown(x,y,z); 48 int j=(x+y)>>1; 49 if(l<=j) 50 change1(l,r,x,j,z<<1); 51 if(r>j) 52 change1(l,r,j+1,y,z<<1|1); 53 } 54 void change2(int u,int x,int y,int z) 55 { 56 if(u==x&&u==y) 57 { 58 lazytag[mark1]+=b[u]-b[m+lazytag[mark1]]; 59 return; 60 } 61 pushdown(x,y,z); 62 int j=(x+y)>>1; 63 if(u<=j) 64 change2(u,x,j,z<<1); 65 if(u>j) 66 change2(u,j+1,y,z<<1|1); 67 } 68 int main() 69 { 70 input(); 71 n=quick(); 72 m=quick(); 73 q=quick(); 74 if(n!=1&&n<=1000&&m<=1000) 75 { 76 for(int i=1;i<=n;i++) 77 for(int j=1;j<=m;j++) 78 a[i][j]=(i-1)*m+j; 79 int x,y; 80 for(int i=1;i<=q;i++) 81 { 82 x=quick(); 83 y=quick(); 84 printf("%d\n",a[x][y]); 85 int t=a[x][y]; 86 for(int i=y+1;i<=m;i++) 87 a[x][i-1]=a[x][i]; 88 for(int i=x+1;i<=n;i++) 89 a[i-1][m]=a[i][m]; 90 a[n][m]=t; 91 } 92 } 93 if(n==1) 94 { 95 for(int i=1;i<=m;i++) 96 b[i]=i; 97 build(1,m,1,m,1); 98 int x,y; 99 for(int i=1;i<=q;i++)100 {101 x=quick();102 y=quick();103 query(y,1,m,1);104 if(ans%m>0)105 ans%=m;106 printf("%d\n",ans);107 change1(y,m-1,1,m,1);108 change2(ans,1,m,1);109 }110 }111 return 0;112 }