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

map

时间:2016-04-08 00:43:13      阅读:206      评论:0      收藏:0      [点我收藏+]

标签:

Map

Poj,1840

题意很好懂。采用分治法直接把复杂度割掉2/5。

用short数组可以防止爆内存,int数组就GG了。

学习:考虑到爆内存,换范围小一点的。考虑时间,可以用滚动/动态滚动数组.dp[i][j] i或j可以变化不一定一开就很大。

其实就是也可以是hash表数据差不多。网上看了一下,似乎char和short都可以防止爆内存

其实数据50^4*3*2+5就可以了,防止越界加个5

技术分享
 1 #include <iostream>
 2 #include <cstdio>
 3 #include <map>
 4 #include <cstring>
 5 #define maxn 25000010
 6 using namespace std;
 7 
 8 typedef long long ll;
 9 
10 short cnt[maxn];
11 int main()
12 {
13     int a1,a2,a3,a4,a5;
14     scanf("%d %d %d %d %d",&a1,&a2,&a3,&a4,&a5);
15     memset(cnt,0,sizeof(cnt));
16     for(int x4=-50;x4<=50;x4++)
17     {   if(!x4)
18         continue;
19         for(int x5=-50;x5<=50;x5++)
20         {
21             if(!x5)
22                 continue;
23             cnt[x4*x4*x4*a4+x5*x5*x5*a5+12500000]++;
24         }
25     }
26     int count=0;
27     for(int x1=-50;x1<=50;x1++)
28     {
29         if(!x1)
30             continue;
31         for(int x2=-50;x2<=50;x2++)
32         {
33             if(!x2)
34                 continue;
35             for(int x3=-50;x3<=50;x3++)
36             {
37                 if(!x3)
38                     continue;
39                 int y=a1*x1*x1*x1+a2*x2*x2*x2+a3*x3*x3*x3;
40                 y*=-1;
41                 if(y<=12500000&&y>=-12500000)
42                     count+=cnt[y+12500000];
43             }
44         }
45     }
46     
47     printf("%d\n",count);
48     return 0;
49 }
View Code

 

Poj,2153

自己的思路是对的,注意每次输入之后用getchar()接收空格。要不然数据会是空。

技术分享
 1 #include <iostream>
 2 #include <cstdio>
 3 #include <map>
 4 #include <string.h>
 5 
 6 using namespace std;
 7 
 8 typedef pair<string,int> PAIR;
 9 
10 struct cmp
11 {
12     bool operator()(const PAIR& x,const PAIR& y)
13     {
14         return x.second>y.second;
15     }
16 };
17 
18 string s;
19 map<string,int> mp;
20 int main()
21 {
22     int N;
23     int M,S,count;
24     scanf("%d",&N);
25     getchar();
26     for(int i=0;i<N;i++)
27     {
28         getline(cin,s);
29         mp[s]=0;
30     }
31     scanf("%d",&M);
32     getchar();
33     for(int j=0;j<M;j++)
34     {
35         for(int i=0;i<N;i++)
36         {
37             cin>>S;
38             getchar();
39             getline(cin,s);
40             mp[s]+=S;
41         }
42         count=1;
43         
44         for(map<string,int>::iterator it=mp.begin();it!=mp.end();it++)
45         {
46             if(it->second>mp["Li Ming"]&&it->first!="Li Ming")
47             {
48                 count++;
49             }
50         }
51         cout<<count<<endl;
52     }
53     return 0;
54 }
View Code

Poj,3481

一下就过了,开心~

技术分享
 1 #include <iostream>
 2 #include <cstdio>
 3 #include <map>
 4 #include <string.h>
 5 #include <algorithm>
 6 
 7 using namespace std;
 8 
 9 
10 
11 map<int,int> mp;
12 int main()
13 {
14     int K,P,R;
15     while(scanf("%d",&R) && R)
16     {
17         map<int,int>::iterator it;
18         map<int,int>::iterator rit;
19         if(R==1)
20         {
21             scanf("%d %d",&K,&P);
22             mp[P]=K;
23             continue;
24         }
25         if(mp.empty())
26         {
27             puts("0");
28             continue;
29         }
30         rit=mp.end();
31         if(R==2)
32         {
33             printf("%d\n",(--rit)->second);
34             mp.erase(rit);
35             continue;
36         }
37         it=mp.begin();
38         if(R==3)
39         {
40             printf("%d\n",it->second);
41             mp.erase(it);
42             continue;
43         }
44     }
45     return 0;
46 }
View Code

HDU,4287 一下就过了,开心~

技术分享
 1 #include <iostream>
 2 #include <cstdio>
 3 #include <map>
 4 #include <string.h>
 5 #include <algorithm>
 6 
 7 using namespace std;
 8 const int maxn=5000;
 9 
10 map<char,int> np;
11 map<int,int> mp;
12 int n[maxn+5];
13 char m[7];
14 
15 void init()
16 {
17     int j=3;
18     int count=2;
19     for(int i=1;i<=26;i++)
20     {
21         int k=i;
22         char c=a+i-1;
23         np[c]=count;
24         if(c>=r)
25             k--;
26         if(c>=y)
27             k--;
28         if(k%j==0)
29         {
30             count++;
31         }
32     }
33 }
34 
35 int main()
36 {
37     init();
38     int T;
39     int N,M;
40     scanf("%d",&T);
41     while(T--)
42     {
43         int i,j;
44         scanf("%d %d",&N,&M);
45         for(i=0;i<N;i++)
46         {
47             scanf("%d",&n[i]);
48             mp[n[i]]=0; //记得初始化
49         }
50         getchar();
51         for(j=0;j<M;j++)
52         {
53             scanf("%s",m);
54             getchar();
55             int k=0;
56             int S=0;
57             for(int k=0;k<strlen(m);k++)
58             {
59                 S*=10;
60                 S+=np[m[k]];
61             }
62             mp[S]++;
63         }
64         for(i=0;i<N;i++)
65             printf("%d\n",mp[n[i]]);
66     }
67     return 0;
68 }
View Code

 

map

标签:

原文地址:http://www.cnblogs.com/do-it-best/p/5366184.html

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