POJ 2497 Strategies
题意:有三个人,Bill, Steve and Linus,他们参加竞赛,给出竞赛的题目和比赛时间,然后给出每道题需要的时间(他们解同一道题花的时间相同),然后他们有不同的策略来做题。每道题的得分为当前比赛进行的时间,最后的得分为所有题目得分的和。最后做出题目最多的人获胜(若做出题目数目相同,则看得分最少)。如果三人都相同,那么规定Steve为胜者。(我在想一个问题,会不会出现这种情况,那就是Bill和Linus做的题目相同,且他俩排名高于Steve,那么胜者应该是Bill还是Linus???------貌似应该不会出现这种情形)
3人得策略如下,
Bill: 按题目给的顺序依次往下做
Steve: 先做花费时间小的题目
Linus:先做花费时间大的题目
思路:直接的想法就是,直接把三个人结果的求出来,比较一下,得出胜者(我也是这么做的)
但是,看了poj讨论版中的评论,有的说这样的策略很明显胜者就是Steve,因为他这是最优的策略。自己想想也是这么回事。。。那么直接求Steve的结果,输出就ok了
代码:分别求的三个人得结果,进行比较
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std; struct node{
int p;//解题数目
int s;//得分
int y;//优先级,把Steve的设为最高,在最后排序时使用
char name[10];//姓名
};
bool cmp(node a,node b){
if(a.p!=b.p) return a.p>b.p;//解题数目多的在前
if(a.s!=b.s) return a.s<b.s;//得分少的在前
return a.y<b.y;//当解题数目和得分相同时,把Steve排在最前面
}
int main(){
int n,n2,totaltime,num,a[30],i,timeused,testcase=0;
node p[3];
scanf("%d",&n);//测试组数
n2=n;
while(n2--){
testcase++;
timeused=0;
scanf("%d%d",&totaltime,&num);//比赛时间,题目数量
memset(p,0,sizeof(p));
p[0].y=p[2].y=1;
strcpy(p[0].name,"Bill");
strcpy(p[1].name,"Steve");
strcpy(p[2].name,"Linus");
for(i=0;i<num;i++)//输入每道题所花费的时间
scanf("%d",&a[i]);
for(i=0;i<num;i++){//Bill得分
timeused=timeused+a[i];
if(timeused>totaltime) break;
p[0].p++;
p[0].s=p[0].s+timeused;
}
sort(a,a+num);//把题目按时间升序
timeused=0;
for(i=0;i<num;i++){//Steve得分
timeused=timeused+a[i];
if(timeused>totaltime) break;
p[1].p++;
p[1].s=p[1].s+timeused;
}
timeused=0;
for(i=num-1;i>=0;i--){//Linus得分
timeused=timeused+a[i];
if(timeused>totaltime) break;
p[2].p++;
p[2].s=p[2].s+timeused;
}
sort(p,p+3,cmp);//排序,排完后第一名在p[0]
printf("Scenario #%d:\n",testcase);
printf("%s wins with %d solved problems and a score of %d.\n",p[0].name,p[0].p,p[0].s);
if(testcase<n) printf("\n");
}
return 0;
}
POJ 2497 Strategies的更多相关文章
- POJ 3370. Halloween treats 抽屉原理 / 鸽巢原理
Halloween treats Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 7644 Accepted: 2798 ...
- POJ 2356. Find a multiple 抽屉原理 / 鸽巢原理
Find a multiple Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7192 Accepted: 3138 ...
- POJ 2965. The Pilots Brothers' refrigerator 枚举or爆搜or分治
The Pilots Brothers' refrigerator Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 22286 ...
- POJ 1753. Flip Game 枚举or爆搜+位压缩,或者高斯消元法
Flip Game Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 37427 Accepted: 16288 Descr ...
- POJ 3254. Corn Fields 状态压缩DP (入门级)
Corn Fields Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 9806 Accepted: 5185 Descr ...
- POJ 2739. Sum of Consecutive Prime Numbers
Sum of Consecutive Prime Numbers Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 20050 ...
- POJ 2255. Tree Recovery
Tree Recovery Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 11939 Accepted: 7493 De ...
- POJ 2752 Seek the Name, Seek the Fame [kmp]
Seek the Name, Seek the Fame Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 17898 Ac ...
- poj 2352 Stars 数星星 详解
题目: poj 2352 Stars 数星星 题意:已知n个星星的坐标.每个星星都有一个等级,数值等于坐标系内纵坐标和横坐标皆不大于它的星星的个数.星星的坐标按照纵坐标从小到大的顺序给出,纵坐标相同时 ...
随机推荐
- 配置fio支持rbd測试引擎
fio的rbd測试引擎能够非常方便的对rbd进行測试.以下示范怎样安装fio支持rbd引擎. git clone git://git.kernel.dk/fio.git $ cd fio $ ./co ...
- NativeBase准备工作
环境 node>= 4.0 npm>= 3.0 rnpm (only if React Native version < 0.29) ReactNativeCLI 安装及运行 ht ...
- wifi认证Portal开发系列(四):portal协议的java封装
一.报文封装类 AbstractPortalMsg.java Portal协议数据报文封装类 package org.yoki.edu.common.protocol.portal.msg; imp ...
- linux SPI驱动——spidev之deive(五)
1.定义board设备 1: struct spi_board_info { 2: /* the device name and module name are coupled, like platf ...
- HTML5,不仅仅是看上去非常美(第二弹:打造最美3D机房)
前言 近期项目开发任务告一段落,刚好有时间整理这大半年的一些成果.使用html5时间还不久,对js的认识还不够深入.没办法,曾经一直搞java,对js的一些语言特性和概念一时还转换只是来. 上一篇第一 ...
- Touch ID和Passcode框架,Apple Watch风格的应用布局
本文转载至 http://www.cocoachina.com/ios/20141031/10110.html 水平滚动条(artwalk) 测试环境:Xcode 6.0,iOS 8.0 VE ...
- GS(道具,帮会)定时存储
//最近数据库存储做了重大改变,数据库内部的回头再说,先看看GS这边的 .现在感觉数据库的状态将请求包放入命令队列中,以前是全部放进去,这样让其他的数据库操作不会随着数据库定时器而变慢,GS线程去驱动 ...
- 已知段地址,求CPU寻址范围
已知段地址为0001H,仅通过变化偏移地址寻址,则CPU的寻址范围是? 物理地址 = 段地址×16 + 偏移地址 所以物理地址的范围是[16×1H+0H, 16×1H+FFFFH] 也就是[10H×1 ...
- Android之ProgressBar读取文件进度解析
ProgressBar进度条, 分为旋转进度条和水平进度条,进度条的样式根据需要自定义,之前一直不明白进度条如何在实际项目中使用,网上演示进度条的案例大多都是通过Button点 击增加.减少进度值,使 ...
- java.lang.UnsupportedClassVersionError: org/openqa/selenium/WebDriver : Unsupported major.minor version 51.0
周一上班,正常打开myeclipse,随便写了一个main方法执行.发现报错了... 问题提示如下: java.lang.UnsupportedClassVersionError: org/openq ...