hdu 4941 Magical Forest 离散化 +模拟 /(map应用)
来源:互联网 发布:25颗摇头矩阵灯厂家 编辑:程序博客网 时间:2024/06/14 05:13
非常不开心。。这么简单的题都实现错了。。。。唉。。
题意: 给你n行,m列,的矩形,k个水果
每个水果属性,x,y,v,表示在x行y列
t次查询
每次 q=1把 a,b行互换
q=2把a,b列互换
q=3查询 mp[a][b]是否存在果子,存在则输出对应的v,否则输出0
显然对于行列互换操作,只需要用一个数组记录 row[i]最终指向的行,每次交换只需要把row[i],row[j]互换即可。
然后我是开k个vector,每个vector表示一行,元素是node(y,v)表示第y列的水果
当然每个vector排好序
每次查询就在 vector[x]里面二分查找y的存在 然后判断输出即可 【这里判断不存在我居然直接看迭代器是否==end(),真不知道当时吃了什么毒奶粉】
这里的n,m很大,需要离散化。。。。离散化我是用数组离散化的。。。。每次二分查找对应下标便是离散化后的下标。。。在每次查询时。。我直接 a 在离散化的行数组查询。。b在列数组查询。。又是一斤毒奶粉。。。。明明查询操作不同 查询的a,b代表的是行还是列不同啊
最后面是纯map的写法,也很简单
#include <cstdio>#include <cmath>#include <cstring>#include <string>#include <algorithm>#include <queue>#include <map>#include <set>#include <vector>#include <iostream>using namespace std;const double pi=acos(-1.0);double eps=0.000001; __int64 row[100055];__int64 col[100055];__int64 row_vis[100055];__int64 col_vis[100055]; struct node{ __int64 y,val; node(){} node(__int64 a,__int64 b){y=a,val=b;} bool operator<(const node&b) { return y<b.y; }}; vector<node> ::iterator it;vector<node> mp[100055]; __int64 x[100055],y[100055],v[100055]; vector<__int64> tmpx,tmpy; int main(){ int test=0; cin>>test; __int64 cnt=1; while(test--) { printf("Case #%I64d:\n",cnt++); __int64 i; tmpx.clear(); tmpy.clear(); __int64 n,m,k; scanf("%I64d%I64d%I64d",&n,&m,&k); for (i=0;i<=k;i++) row[i]=i ; for (i=0;i<=k;i++) mp[i].clear() ; for (i=0;i<=k;i++) col[i]=i; memset(row_vis,0,sizeof(row_vis)); memset(col_vis,0,sizeof(col_vis)); for (i=0;i<k;i++) { scanf("%I64d%I64d%I64d",&x[i],&y[i],&v[i]); tmpx.push_back(x[i]); tmpy.push_back(y[i]); } sort(tmpx.begin(),tmpx.end()); tmpx.erase(unique(tmpx.begin(),tmpx.end()),tmpx.end()); sort(tmpy.begin(),tmpy.end()); tmpy.erase(unique(tmpy.begin(),tmpy.end()),tmpy.end()); for (i=0;i<k;i++) { __int64 xx=lower_bound(tmpx.begin(),tmpx.end(),x[i])-tmpx.begin(); __int64 yy=lower_bound(tmpy.begin(),tmpy.end(),y[i])-tmpy.begin(); __int64 vv=v[i]; mp[xx].push_back(node(yy,vv)); row_vis[xx]=1; col_vis[yy]=1; } for (i=0;i<k;i++) sort(mp[i].begin(),mp[i].end()); int t; __int64 q,a,b;; cin>>t; while(t--) { scanf("%I64d%I64d%I64d",&q,&a,&b); if (q==1) { a=lower_bound(tmpx.begin(),tmpx.end(),a)-tmpx.begin(); b=lower_bound(tmpx.begin(),tmpx.end(),b)-tmpx.begin(); if (row_vis[row[a]]==row_vis[row[b]]) swap(row[a],row[b]); } if (q==2) { a=lower_bound(tmpy.begin(),tmpy.end(),a)-tmpy.begin(); b=lower_bound(tmpy.begin(),tmpy.end(),b)-tmpy.begin(); if (col_vis[col[a]]==col_vis[col[b]]) swap(col[a],col[b]); } if (q==3) { a=lower_bound(tmpx.begin(),tmpx.end(),a)-tmpx.begin(); b=lower_bound(tmpy.begin(),tmpy.end(),b)-tmpy.begin(); __int64 rr=row[a]; __int64 cc=col[b]; node xx=node(cc,0); it= lower_bound(mp[rr].begin(),mp[rr].end(),xx); if (it==mp[rr].end() ) printf("0\n"); elseif (it->y!=cc) printf("0\n");else { __int64 vvv=it->val; printf("%I64d\n",vvv); } } } } return 0; }
#include <cstdio>#include <cmath>#include <cstring>#include <string>#include <algorithm>#include <queue>#include <map>#include <set>#include <vector>#include <iostream>using namespace std;const double pi=acos(-1.0);double eps=0.000001; int row_vis[100055];int col_vis[100055];map<int ,int> row,col;int x[100055];int y[100055];int tmpx[100055];int tmpy[100055];int v[100055];map<int ,map<int ,int> > mp;int main(){int test;cin>>test;int i,j;int cnt=1;while(test--){mp.clear();row.clear();col.clear();memset(col_vis,0,sizeof(col_vis));memset(row_vis,0,sizeof(row_vis));printf("Case #%d:\n",cnt++);int n,m,k;cin>>n>>m>>k; for (i=0;i<k;i++){scanf("%d%d%d",&x[i],&y[i],&v[i]);tmpx[i]=x[i];tmpy[i]=y[i];}sort(tmpx,tmpx+k);sort(tmpy,tmpy+k);for (i=0;i<k;i++){if (row[x[i]]==0) row[x[i]]=i;row_vis[row[x[i]]]=1; if (col[y[i]]==0) col[y[i]]=i;col_vis[col[y[i]]]=1; mp[row[x[i]]][col[y[i]]]=v[i]; } int t;cin>>t;while(t--){int q,a,b;cin>>q>>a>>b;if (q==1){if (row_vis[row[a]]==row_vis[row[b]])swap(row[a],row[b]);}elseif (q==2){if (col_vis[col[a]]==col_vis[col[b]])swap(col[a],col[b]);}else{int rr=row[a];int cc=col[b];printf("%d\n",mp[rr][cc]); }}}return 0;}
0 0
- hdu 4941 Magical Forest 离散化 +模拟 /(map应用)
- HDU 4941 Magical Forest 【离散化】【map】
- Hdu 4941 Magical Forest(map+离散化)
- HDU 4941 Magical Forest(离散化)
- HDU 4941 Magical Forest 离散化
- HDU 4941 Magical Forest --STL Map应用
- hdu 4941 Magical Forest(STL之map应用)
- hdu 4941 Magical Forest (map容器)
- hdu 4941 Magical Forest map
- hdu 4941 Magical Forest (map)
- hdu 4941 Magical Forest(Map)
- hdu 4941 Magical Forest (map)
- hdu 4941 Magical Forest map
- hdu 4941 Magical Forest(STL之map应用)2014多校训练第7场
- hdu 4941 Magical Forest(STL map & 结构体运用)
- hdu round7 Magical Forest(map)
- HDU-4941-Magical Forest
- HDU 4941 Magical Forest
- DOM操纵样式表
- Linux 压缩解压缩命令大全(我最常用tar)
- 【2016/3】C++ 类与对象进阶 运算符重载 new delete 模板 继承
- onClick在Chrome下无效
- 中缀转后缀同时求值
- hdu 4941 Magical Forest 离散化 +模拟 /(map应用)
- Mysql中各种常见数据库存储引擎对比
- NavigationBar相关的问题
- 解密ThreadLocal
- 基于ORA-12170 TNS 连接超时解决办法详解
- 技术学习地址
- 程序员的自我修养——编译和链接
- 模版--矩阵快速幂
- UVa 592 - Island of Logic