这明明就是给纯C选手的大杀器啊。
题意:给你k坐标,表示 X,Y 有值C,有 3种操作
1) 交换A,B两行
2) 交换A,B两列
3) 询问(A,B)的值
解题思路:map离散化
解题代码:
// File Name: 1007.cpp // Author: darkdream // Created Time: 2014年08月12日 星期二 21时05分18秒 #include #include #include #include<set> #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define LL long long using namespace std; map<int,map<int,int> > a; map<int,int> hashx , hashy; const int maxn = 100005; int T , n , m ,k; struct node{ int x, y ,c; }l[maxn]; int cmp(node t,node tt) { return t.x < tt.x; } int cmp1(node t,node tt) { return t.y < tt.y; } int main(){ int T; scanf("%d",&T); for(int ca = 1; ca <= T; ca ++) { hashx.clear(),hashy.clear(),a.clear(); scanf("%d %d %d",&n,&m,&k); for(int i = 1;i <= k;i ++) scanf("%d %d %d",&l[i].x,&l[i].y,&l[i].c); sort(l+1,l+1+k,cmp); int mapx,mapy; mapx = mapy = 0; for(int i = 1;i <= k;i ++) if(hashx.find(l[i].x) == hashx.end()) hashx[l[i].x] = ++mapx; sort(l+1,l+1+k,cmp1); for(int i =1;i <= k ;i ++) { if(hashy.find(l[i].y) == hashy.end()) { hashy[l[i].y] = ++ mapy; } a[hashx[l[i].x]][hashy[l[i].y]] = l[i].c; } scanf("%d",&m); printf("Case #%d:\n",ca); for(int i = 1;i <= m;i ++) { int Q,A,B; scanf("%d %d %d",&Q,&A,&B); if(Q == 1){ if(hashx.find(A) != hashx.end()) { int temp = hashx[A]; hashx[A] = hashx[B]; hashx[B] = temp; } }else if( Q == 2){ if(hashy.find(A) != hashy.end()) { int temp = hashy[A]; hashy[A] = hashy[B]; hashy[B] = temp; } }else { if(hashx.find(A) != hashx.end() && hashy.find(B) != hashy.end()) { printf("%d\n",a[hashx[A]][hashy[B]]); }else printf("0\n"); } } } return 0; }
后来发现了其实不用离散化,改进后的代码如下:
1 // File Name: 1007.cpp 2 // Author: darkdream 3 // Created Time: 2014年08月12日 星期二 21时05分18秒 4 5 #include 6 #include 7 #include 8 #include<set> 9 #include 10 #include 11 #include 12 #include 13 #include 14 #include 15 #include 16 #include 17 #include 18 #include 19 #include 20 #include 21 #include 22 #include 23 #include 24 #define LL long long 25 26 using namespace std; 27 map<int,map<int,int> > a; 28 map<int,int> hashx , hashy; 29 const int maxn = 100005; 30 int T , n , m ,k; 31 struct node{ 32 int x, y ,c; 33 }l[maxn]; 34 int main(){ 35 int T; 36 scanf("%d",&T); 37 for(int ca = 1; ca <= T; ca ++) 38 { 39 hashx.clear(),hashy.clear(),a.clear(); 40 scanf("%d %d %d",&n,&m,&k); 41 for(int i = 1;i <= k;i ++){ 42 scanf("%d %d %d",&l[i].x,&l[i].y,&l[i].c); 43 hashx[l[i].x] = l[i].x; 44 hashy[l[i].y] = l[i].y; 45 a[l[i].x][l[i].y] = l[i].c; 46 } 47 scanf("%d",&m); 48 printf("Case #%d:\n",ca); 49 for(int i = 1;i <= m;i ++) 50 { 51 int Q,A,B; 52 scanf("%d %d %d",&Q,&A,&B); 53 if(Q == 1){ 54 if(hashx.find(A) != hashx.end()) 55 { 56 int temp = hashx[A]; 57 hashx[A] = hashx[B]; 58 hashx[B] = temp; 59 } 60 }else if( Q == 2){ 61 if(hashy.find(A) != hashy.end()) 62 { 63 int temp = hashy[A]; 64 hashy[A] = hashy[B]; 65 hashy[B] = temp; 66 } 67 }else { 68 if(hashx.find(A) != hashx.end() && hashy.find(B) != hashy.end()) 69 { 70 printf("%d\n",a[hashx[A]][hashy[B]]); 71 }else printf("0\n"); 72 } 73 } 74 } 75 76 return 0; 77 }
转载于:https://www.cnblogs.com/zyue/p/3908607.html