码迷,mamicode.com
首页 > 编程语言 > 详细

算法竞赛入门经典训练指南-做题详细记录(更新中)

时间:2019-07-20 21:25:36      阅读:100      评论:0      收藏:0      [点我收藏+]

标签:++   ons   输出   ++i   names   第一章   bre   scan   return   

第一章

技术图片
 1 #include <iostream>
 2 #include <algorithm>
 3 #include <cstdio>
 4 using namespace std;
 5 typedef long long ll;
 6 //吐槽:WA一次。原因是不会输出 Loowater is doomed。由于原代码没有判断骑士是否已经杀了一个头。鉴于题目里提到n>=1.所以一旦有骑士杀了龙,那么就让骑士 b[i]=-1,这样他就相当于被标记过了。本来还想开个bool vis数组记录一下。
 7 bool dragon(int x,int y)
 8 {
 9     return x>y;
10 }
11 bool ability(int x,int y)
12 {
13     return x<y;
14 }
15 
16 int main()
17 {
18     int n,m,a[20000+5],b[20000+5],cnt;    ll x;
19     while(scanf("%d%d",&n,&m)==2)
20     {
21         if(m==n&&n==0)
22             break;
23         x=cnt=0;
24         bool flag=false;
25         for(int i=0;i<n;++i)
26             scanf("%d",&a[i]);
27         for(int i=0;i<m;++i)
28             scanf("%d",&b[i]);
29         sort(a,a+n,dragon);
30         sort(b,b+m,ability);
31         for(int i=0;i<n;++i)//head
32         {
33             int t=cnt;
34             for(int j=0;j<m;j++)//person
35             {
36                 if(a[i]<=b[j])
37                 {
38                     cnt++;
39                     x+=b[j];
40                     b[j]=-1;
41                     break;
42                 }
43             
44             }
45             if(cnt!=t+1)
46                 {flag=true;break;}
47         }
48         if(flag||cnt!=n)
49             printf("Loowater is doomed!\n");
50         else{
51             printf("%lld\n",x);
52         }
53     }
54 }
UVA11292:The Dreagon of Loowater
技术图片
 1 #include <iostream>
 2 #include <algorithm>
 3 #include <cstdio>
 4 using namespace std;
 5 typedef long long ll;
 6 
 7 struct per{
 8     int b;
 9     int j;
10     bool operator < (const per& x) const{return j>x.j;}//第一次尝试不用cmp函数 
11 }p[1000+7];
12 //
13 //bool cmp(per x,per y)
14 //{
15 //    return x.j>y.j;
16 //}
17 int main()
18 {
19     int n,cas=0,s,ans;
20     while(scanf("%d",&n)==1&&n)
21     {
22         ans=s=0;
23         cas++;
24         for(int i=0;i<n;++i)
25             scanf("%d%d",&p[i].b,&p[i].j);
26         sort(p,p+n);                    //        sort(p,p+n,cmp);
27         for(int i=0;i<n;++i){
28             s+=p[i].b;
29             ans=max(ans,s+p[i].j);    
30         }
31         printf("Case %d: %d\n",cas,ans);
32     }
33     return 0;
34 }
UVA11729:Commando War

 

 

算法竞赛入门经典训练指南-做题详细记录(更新中)

标签:++   ons   输出   ++i   names   第一章   bre   scan   return   

原文地址:https://www.cnblogs.com/greenaway07/p/11219147.html

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