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

第一章

 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

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

时间: 2024-08-25 03:03:34

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

算法竞赛入门经典-训练指南(10881-Piotr&#39;s Ants)

题目大意: 一根长度为L的木棍一堆蚂蚁爬,向左或向右,速度都为1,若两蚂蚁碰撞则同时转头(转身时间忽略不计),问T时间之后每只蚂蚁的位置: 输入:t,(t个样例),每个样例输入 L,T,n,接下来是n行每行两个数据,一个POS(位置),一个dir(方向): 输出:按输入顺序输出每只蚂蚁的最终位置,若处于碰撞状态则输出Turning,掉下去输出"Fell off": 解题思路: 本题类似于<挑战程序设计>的一道水题(POJ -1852  Ants),思路题:不过本题输入并不一

算法竞赛入门经典训练指南

最近在看算法竞赛入门经典训练指南这本书,书中不错的算法我将在博客中发布,和大家共同学习. 题目: 在你的王国里有一条n个头的恶龙,你希望雇一些骑士把它杀死(即砍掉所有头).村里有m个骑士可以雇佣,一个能力值为m的骑士可以砍掉一个直径不超过x的头,且需要支付x个金币.如何雇佣骑士才能砍掉恶龙的所有头,且需要支付的金币最少?注意,一个骑士只能砍一个头(且不能被雇佣两次). 输入格式: 输入包含多组数据.每组数据的第一行为正整数m和n(1<=m,n<=20 000):以下m行每行为一个整数,即恶龙每

《算法竞赛入门经典——训练指南》第二章题库

UVa特别题库 UVa网站专门为本书设立的分类题库配合,方便读者提交: http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=442 注意,下面注有"extra"的习题并没有在书中出现,但在上面的特别题库中有,属于附加习题. 基础练习 (Basic Problems) UVa11388 GCD LCM UVa11889 Benefit UVa10943 How do y

算法竞赛入门经典——训练指南

1. UVa 11300 我的代码: #include<iostream> #include<cstdio> #include<algorithm> using namespace std; long long C[1000010], M, a; int main() { int n; while (~scanf("%d", &n)) { C[0] = 0; for (int i = 1; i <= n; i++) { scanf(&q

UVa11300——算法竞赛入门经典训练指南

(xl)LT1-3 这道题还是比较考验数学水平,由于所有的交换仅限于相邻两个人之间的交换,所以容易列n-1个方程组,要注意到这是一个环,所以第n个方程是可以被推导出来所以不能算作有效的方程组,即使无法解出所有的值,但是我们注意到,只要求一个最小值,那么这种求极值问题,就可以通过x1一个变量来表示所有的,即消元完成.这样转化为“单变量极值问题”. 然后就是显然的坐标上求啊求...再用显然的中位数就可解了. 然而编程的时候就是恶心,我一直以为我的式子可能错了,然而问题竟然是tot没有初始化,恶心啊恶

UVa11729——算法竞赛入门经典训练指南

(xl)LT1-2 这道题还是没什么难度,但是注意一下运算符重载,以便sort,以及构造成员,还有sort遇到vector用迭代器. 写了两份代码. 先附上自己的普通方法: #include<iostream> #include<cstdio> #include<algorithm> using namespace std; const int maxn=1000+5; struct soldier{ int b; int j; bool operator <(c

【读书笔记/复健向】算法竞赛入门经典训练指南1.1贪心部分

例题一(UVa11292) 基础贪心,没什么需要多讲的,直接放上代码.有一点要注意的是我第一遍写的时候竟然犯了两个错误. 错误点 将dragon.knight与i.j对应错误了,仔细一想人有先后对应的天性,下次设置i.j时还是老老实实根据输入顺序来,避免出错 第23行遗漏了(j<n)这个条件,使得在龙已经全被砍头的情况下却雇佣了剩余的骑士. 本题重点 砍龙头的时候设置两个指针,分别移动,使用频率挺高的一个小技巧,不难,但是挺重要的. 1 #include<iostream> 2 #inc

算法竞赛入门经典训练指南【递推问题】------2015年1月24日

1. 常见的数列总结 (1)斐波那契数列: 如何实现斐波那契数列,我们可以采取如下方法: (1)递归求解(慢)(2)递推法 (3)矩阵快速幂 下面给出矩阵快速幂的由来: 除了这些问题,我们对于斐波那契数列还可能涉及高精度数的处理问题. (2)卡特兰数 卡塔兰数是组合数学中一个常出现在各种计数问题中出现的数列.由以比利时的数学家欧仁·查理·卡塔兰 (1814–1894)命名. 卡塔兰数的一般项公式为                       另类递归式:  h(n)=((4*n-2)/(n+1)

《算法竞赛入门经典》学习笔记 2.4.4 C++中的输入输出

2.4.3 64位整数输入输出long long除了cin,cout,也可以借助于printf和scanf语句,但对应的占位符缺是和平台与编译器相关的:在Linux中,gcc很同意的用%lld:在Windows中,MinGW的gcc和VC6都需要用%I64d:但VS2008却是用%lld.2.4.4 C++中的输入输出问题是经典的“A+B”问题:输入若干对整数,输出每对之和.第1种方法: #include <cstdio> //功能和C中的stdio.h很接近,但有些许不同 using nam