2014多校7最水的题
Magical Forest |
Magical ForestTime Limit: 24000/12000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) Total Submission(s): 253 Accepted Submission(s): 120 Problem Description There is a forest can be seen as N * M grid. In this forest, there is some magical fruits, These fruits can provide a lot of energy, Each fruit has its location(Xi, Yi) and the energy can be provided Ci. Input The input consists of multiple test cases. Output For each case, you should output "Case #C:" first, where C indicates the case number and counts from 1. Sample Input 1 Sample Output Case #1: Hint No two fruits at the same location. Author UESTC Source 2014 Multi-University Training Contest 7 Recommend We have carefully selected several similar problems for you: 4944 4943 4942 4941 4940 |
题意:给出矩阵的长、宽,各个水果的能量、在矩阵中的位置,接下来有t个操作。操作有3种,一种是交换某两列,一种是交换某两行,一种是输出某坐标的水果的能量。矩阵长宽大得飞起,水果最多10^5个。
题解:STL::map
由于地图大得飞起,肯定不能真的存地图,我们建一个map<pair<int,int> , int>把水果的坐标、能量撸进去。然后还有交换行列操作,可以发现这两个操作是独立的,我们可以建立行和列的序号数组,只交换序号就行。但其实行和列也大得飞起,不能真的每行每列都建序号数组,我们也建两个map来存行和列的序号,用来交换。
水得飞起来,我刚开始还想自己写hash,结果写逗乐,发现时限大得飞起,直接用map就过了…
1 //#pragma comment(linker, "/STACK:102400000,102400000") 2 #include<cstdio> 3 #include<cmath> 4 #include<iostream> 5 #include<cstring> 6 #include<algorithm> 7 #include<cmath> 8 #include<map> 9 #include<set> 10 #include<stack> 11 #include<queue> 12 using namespace std; 13 #define ll long long 14 #define usint unsigned int 15 #define mz(array) memset(array, 0, sizeof(array)) 16 #define minf(array) memset(array, 0x3f, sizeof(array)) 17 #define REP(i,n) for(i=0;i<(n);i++) 18 #define FOR(i,x,n) for(i=(x);i<=(n);i++) 19 #define RD(x) scanf("%d",&x) 20 #define RD2(x,y) scanf("%d%d",&x,&y) 21 #define RD3(x,y,z) scanf("%d%d%d",&x,&y,&z) 22 #define WN(x) printf("%d\n",x); 23 #define RE freopen("D.in","r",stdin) 24 #define WE freopen("1biao.out","w",stdout) 25 26 const int MOD=100007; 27 28 struct fruit{ 29 int r,c,e; 30 }; 31 32 int n,m,k; 33 map<int,int>r,c; 34 map<pair<int,int>,int>S; 35 36 int main(){ 37 int T,cas=1; 38 int q,x,y,i,qn; 39 fruit t; 40 scanf("%d",&T); 41 while(T--){ 42 scanf("%d%d%d",&n,&m,&k); 43 r.clear(); 44 c.clear(); 45 S.clear(); 46 for(i=0;i<k;i++){ 47 scanf("%d%d%d",&t.r,&t.c,&t.e); 48 S[make_pair(t.r,t.c)]+=t.e; 49 r[t.r]=t.r; 50 c[t.c]=t.c; 51 } 52 scanf("%d",&qn); 53 printf("Case #%d:\n",cas++); 54 while(qn--){ 55 scanf("%d%d%d",&q,&x,&y); 56 if(q==1)swap(r[x],r[y]); 57 else if(q==2)swap(c[x],c[y]); 58 else{ 59 printf("%d\n",S[make_pair(r[x],c[y])]); 60 } 61 } 62 } 63 return 0; 64 }
hdu4941 Magical Forest (stl map),布布扣,bubuko.com