JZOJ 5281. 【NOIP提高组模拟A组8.15】钦点
生活随笔
收集整理的這篇文章主要介紹了
JZOJ 5281. 【NOIP提高组模拟A组8.15】钦点
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
Description
Input
Output
Sample Input
4 4 2
a a b b
a a b b
c c d d
c c d d
1 1 3 3 2 2
3 1 1 3 2 2
Sample Output
d d c c
d d c c
b b a a
b b a a
Data Constraint
Solution
一道模擬題,但是交換矩陣不能暴力交換——時間不允許。
于是用四向鏈表維護一個點的四個方向的點是什么,
交換時維護矩陣邊緣的點的指針即可。
注意: 讀入的字符串長度可能長短不一,開三維數組存會爆內存,用一個 Vector 存即可。
Code
#include<cstdio> #include<algorithm> #include<vector> using namespace std; const int N=1002; struct data {int v,u,d,l,r; }a[N*N]; int tot; int f[N][N]; vector<int>s[N*N]; inline int read() {int X=0,w=1; char ch=0;while(ch<'0' || ch>'9') {if(ch=='-') w=-1;ch=getchar();}while(ch>='0' && ch<='9') X=(X<<3)+(X<<1)+ch-'0',ch=getchar();return X*w; } int main() {int n=read(),m=read(),q=read();for(int i=0;i<=n+1;i++){for(int j=0;j<=m+1;j++){f[i][j]=i*(m+2)+j;if(i>=1 && i<=n && j>=1 && j<=m){char ch=getchar();while(!(ch>='a' && ch<='z')) ch=getchar();while(ch>='a' && ch<='z') s[f[i][j]].push_back(ch),ch=getchar();}a[f[i][j]].u=f[i-1][j];a[f[i-1][j]].d=f[i][j];a[f[i][j]].l=f[i][j-1];a[f[i][j-1]].r=f[i][j];a[f[i][j]].v=f[i][j];}}while(q--){int x1=read(),y1=read();int x2=read(),y2=read();int l=read(),c=read();int z1=a[1].d,z2=a[1].d;for(int i=2;i<=x1;i++) z1=a[z1].d;for(int i=2;i<=y1;i++) z1=a[z1].r;for(int i=2;i<=x2;i++) z2=a[z2].d;for(int i=2;i<=y2;i++) z2=a[z2].r;for(int i=0,x=a[z1].l,y=a[z2].l;i<l;i++,x=a[x].d,y=a[y].d) swap(a[x].r,a[y].r);for(int i=0,x=a[z1].u,y=a[z2].u;i<c;i++,x=a[x].r,y=a[y].r) swap(a[x].d,a[y].d);int p=a[z1].l,q=a[z2].l;for(int i=1;i<=c;i++) p=a[p].r,q=a[q].r;for(int i=0;i<l;i++,p=a[p].d,q=a[q].d) swap(a[p].r,a[q].r);p=a[z1].u,q=a[z2].u;for(int i=1;i<=l;i++) p=a[p].d,q=a[q].d;for(int i=0;i<c;i++,p=a[p].r,q=a[q].r) swap(a[p].d,a[q].d);p=z1,q=z2;for(int i=0;i<l;i++,p=a[p].d,q=a[q].d) swap(a[p].l,a[q].l);p=z1,q=z2;for(int i=1;i<=c;i++) p=a[p].r,q=a[q].r;for(int i=0;i<l;i++,p=a[p].d,q=a[q].d) swap(a[p].l,a[q].l);p=z1,q=z2;for(int i=0;i<c;i++,p=a[p].r,q=a[q].r) swap(a[p].u,a[q].u);p=z1,q=z2;for(int i=1;i<=l;i++) p=a[p].d,q=a[q].d;for(int i=0;i<c;i++,p=a[p].r,q=a[q].r) swap(a[p].u,a[q].u);}for(int i=a[1].d,p=1;p<=n;p++,i=a[i].d,putchar('\n'))for(int j=i,q=1;q<=m;q++,j=a[j].r,putchar(' '))for(int k=0;k<s[j].size();k++) putchar(s[j][k]);return 0; }總結
以上是生活随笔為你收集整理的JZOJ 5281. 【NOIP提高组模拟A组8.15】钦点的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JZOJ 5264. 【NOIP2017
- 下一篇: JZOJ 5286. 【NOIP2017