码迷,mamicode.com
首页 > 其他好文 > 详细

HDU 4941 Magical Forest(离散化)

时间:2014-08-13 01:14:54      阅读:190      评论:0      收藏:0      [点我收藏+]

标签:style   http   color   os   io   for   ar   代码   

HDU 4941 Magical Forest

题目链接

题意:给定一些点,点有值,现在3种操作交换行,列,询问某个点值

思路:这是签到题,坐标系很大,所以把坐标离散化储存,每次交换的时候只要把相应的行列坐标交换即可,查询就在交换过的上面查就可以了

代码:

#include <cstdio>
#include <cstring>
#include <algorithm>
#include <map>
using namespace std;

#define MP(a,b) make_pair(a,b)

typedef pair<int, int> pii;
int t, n, m, k, xn, yn;
map<pii, int> val;
map<int, int> X;
map<int, int> Y;

void add(map<int, int> &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;
}


HDU 4941 Magical Forest(离散化),布布扣,bubuko.com

HDU 4941 Magical Forest(离散化)

标签:style   http   color   os   io   for   ar   代码   

原文地址:http://blog.csdn.net/accelerator_/article/details/38524113

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!