首页 > 代码库 > HDU 4941 Magical Forest
HDU 4941 Magical Forest
题意:
10^8*10^8个点图上,有一些点及其点值,会进行一些换行换列操作。
查询其新图上某点值。
思路:
用map存当前行/列指向原图的哪行/列
map<pair>存原来图上点值
学到map储存二维的用法。倒是一个方便所在。
#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#include <vector>#include <utility>#include <stack>#include <queue>#include <map>#include <deque>#define max(x,y) ((x)>(y)?(x):(y))#define min(x,y) ((x)<(y)?(x):(y))using namespace std;map<pair<int,int>,int> mapp;map<int,int> xx;//lie xmap<int,int> yy;//hang yint tt,t,n,m,k,x,y,c,q,a,b;int main(){ scanf("%d",&tt); for(int j=1; j<=tt; j++) { xx.clear(); yy.clear(); mapp.clear(); printf("Case #%d:\n",j); scanf("%d%d%d",&n,&m,&k); for(int i=1; i<=k; i++) { scanf("%d%d%d",&x,&y,&c); xx[x]=x; yy[y]=y; mapp[make_pair(x,y)]=c; } scanf("%d",&t); while(t--) { scanf("%d%d%d",&q,&a,&b); switch(q){ case 1: if(xx.find(a)!=xx.end() && xx.find(b)!=xx.end()) { int tmp=xx[a]; xx[a]=xx[b]; xx[b]=tmp; } break; case 2: if(yy.find(a)!=yy.end() && yy.find(b)!=yy.end()) { int tmp=yy[a]; yy[a]=yy[b]; yy[b]=tmp; } break; case 3: printf("%d\n",mapp[make_pair(xx[a],yy[b])]); break; } } } return 0;}
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。