hdu 4941 Magical Forest

来源:互联网 发布:网络棋牌机器人规律 编辑:程序博客网 时间:2024/05/16 11:30

hdu 4941 Magical Forest

题意就是有一片森林  组成是一些网格 在一些点上种果树  果树还有附加的能量值

一开始给出网格大小 以及多少棵果树  下面再给出果树的位置 以及相应的能量值

之后会有三种操作  交换行的操作 交换列的操作  求相应位置上果树的能量值

但是由于N M的上限太大 没办法通过数组的形式存储  因为K的值相对比较小   可以通过map离散化进行存储

进行交换行交换列操作时  交换map映射的值  

代码比较好理解  离散化的处理 以及的map的应用  还得强化下

#include <cstdio>#include <iostream>#include <cstring>#include <cmath>#include <algorithm>#include <string.h>#include <string>#include <map>#define eps 1e-8#define op operator#define MOD  10009#define MAXN  100100#define FOR(i,a,b)  for(int i=a;i<=b;i++)#define FOV(i,a,b)  for(int i=a;i>=b;i--)#define REP(i,a,b)  for(int i=a;i<b;i++)#define REV(i,a,b)  for(int i=a-1;i>=b;i--)#define MEM(a,x)    memset(a,x,sizeof a)#define ll __int64using namespace std;map <int,int> row;map <int,int> col;map <int,map<int,int> > mp;int main(){//freopen("ceshi.txt","r",stdin);    int tc;    scanf("%d",&tc);    int cnt=1;    while(tc--)    {        row.clear();        col.clear();        mp.clear();        int r=0,co=0;        int n,m,k;        scanf("%d%d%d",&n,&m,&k);        int a,b,c;        int x,y;        for(int i=0;i<k;i++)        {            scanf("%d%d%d",&a,&b,&c);            if(!row[a])            {                row[a]=++r;                x=row[a];            }            else x=row[a];            if(!col[b])            {                col[b]=++co;                y=col[b];            }            else  y=col[b];            mp[x][y]=c;        }        scanf("%d",&k);        printf("Case #%d:\n",cnt++);        while(k--)        {            scanf("%d%d%d",&a,&b,&c);            if(a==1)            {                int tmp=row[b];                row[b]=row[c];                row[c]=tmp;            }            else if(a==2)            {                int tmp=col[b];                col[b]=col[c];                col[c]=tmp;            }            else            {                printf("%d\n",mp[row[b]][col[c]]);            }        }    }    return 0;}


0 0
原创粉丝点击