題目鏈接
題意:給定一些點,點有值,現在3種操作交換行,列,詢問某個點值
思路:這是簽到題,坐標系很大,所以把坐標離散化儲存,每次交換的時候只要把相應的行列坐標交換即可,查詢就在交換過的上面查就可以了
代碼:
#include #include #include #include using namespace std; #define MP(a,b) make_pair(a,b) typedef pair pii; int t, n, m, k, xn, yn; map val; map X; map Y; void add(map &X, int x, int &xn) { if (X.count(x)) return; X[x] = xn++; } int main() { int cas = 0; scanf("%d", &t); while (t--) { val.clear(); X.clear(); Y.clear(); xn = yn = 0; scanf("%d%d%d", &n, &m, &k); int x, y, v; while (k--) { scanf("%d%d%d", &x, &y, &v); add(X, x, xn); add(Y, y, yn); val[MP(X[x],Y[y])] = v; } scanf("%d", &k); int q, a, b; printf("Case #%d:\n", ++cas); while (k--) { scanf("%d%d%d", &q, &a, &b); if (q == 1) { add(X, a, xn); add(X, b, xn); swap(X[a], X[b]); } else if (q == 2) { add(Y, a, yn); add(Y, b, yn); swap(Y[a], Y[b]); } else { if (val.count(MP(X[a], Y[b]))) printf("%d\n", val[MP(X[a],Y[b])]); else printf("0\n"); } } } return 0; }
The area Time Limit: 2000
Introduction I have designed a
HDU 2084 數塔(DP初步應用)
你好,C++(15)四兩撥千斤——3.9 指向內存位置的指
POJ 2528 Mayor's poste