HDU--1052
来源:互联网 发布:面试题php了解多少 编辑:程序博客网 时间:2024/05/06 04:40
http://acm.hdu.edu.cn/showproblem.php?pid=1052
有关于田忌赛马的问题
这是一个贪心问题,思路:首先将两组数据从大到小排序
每次取田忌最快马与国王最快马比较,分三种情况:
当田忌最快的马的速度>国王最快马的速度,当然用这两匹马比较,此时田忌显然胜一场;
当田忌最快的马的速度<国王最快马的速度,需要用田忌最慢的马跟国王最快的马比一场,输一场;
当田忌最快的马的速度=国王最快马的速度,需要分类讨论,以最慢的马的速度来分析:
1、田忌最慢的马的速度>国王最慢马的速度,赢一场;
2、田忌最慢的马的速度<国王最慢马的速度,用田忌最慢的马跟国王最快的马比一场;
3、田忌最慢的马的速度=国王最慢马的速度,用田忌最慢的马跟国王最快的马比一场;
#include<iostream>#include<stdio.h>#include<string>#include<math.h>#include<vector>#include<queue>#include<string.h>#include<algorithm>#define N 1005#define mod 1000000007#define ll long long#define ex 2.7182818284590452354#define pi 3.141592653589793239#define INFF 999999999using namespace std;int a[N],b[N],c[N];bool cmp(int a,int b){ return a>b;}int main(){ int n; while(scanf("%d",&n)!=EOF&&n!=0) { int i,j; int tk,gk,tm,gm,sum; for(i=0;i<n;i++) scanf("%d",&a[i]); sort(a,a+n,cmp); for(i=0;i<n;i++) scanf("%d",&b[i]); sort(b,b+n,cmp); tk=gk=0,tm=gm=n-1,sum=0; while(tk<=tm) { if(a[tk]>b[gk]) { c[tk]=gk; tk++; gk++; } else if(a[tk]<b[gk]) { c[tm]=gk; tm--; gk++; } else if(a[tk]==b[gk]) { if(a[tm]>b[gm]) { c[tm]=gm; tm--; gm--; } else { c[tm]=gk; tm--; gk++; } } } for(i=0;i<n;i++) { if(a[i]>b[c[i]]) sum++; else if(a[i]<b[c[i]]) sum--; } printf("%d\n",sum*200); } return 0;}
0 0
- hdu 1052
- hdu-1052
- hdu 1052
- hdu 1052
- hdu 1052
- HDU--1052
- hdu 1052
- hdu 1052
- HDU 1052
- hdu 1052贪心算法
- hdu 1052 (水)
- hdu 1052 贪心
- hdu 1052 贪心
- HDU 1052(贪心)
- hdu 1052 贪心
- HDU ACM 1052
- hdu 1052 (greedy algorithm)
- HDU 1052(贪心)
- 技术网站汇总
- 高效能人士的七个习惯摘录
- Android Studio 快捷键
- 毗邻目录算法与左右值无限分支算法的结合
- 青蛙的烦恼 题解
- HDU--1052
- win8下更改codeblocks颜色
- java验证码
- poj1230 Pass-Muraille 贪心算法,形成良好的代码风格很重要
- 协同过滤算法
- codeforces round #236 div.2 A
- Java学习笔记_14_switch、continue、break执行语句要点
- hibernate的继承关系映射(一)
- 人在旅途