hdu 1528-Card Game Cheater(贪心算法)
题意不讲,怕说不清,自己一点点看吧。
思路是贪心,将每个人的牌按从小到大或(从大到小),我是从小到大排的,
然后每次从第二摞排中找比第一摞排的那张大且相差最小的就可以了,每次找到就sum++;
最后sum值就是最优的(贪心思想)。
- 1 #include<stdio.h>
- 2 #include<algorithm>
- 3 #include<iostream>
- 4 #include<stdlib.h>
- 5 #include<string.h>
- 6 #include<math.h>
- 7 int f(const void*p,const void*q);
- 8 typedef struct pp
- 9 {
- 10 int x;
- 11 int y;
- 12 } ss;
- 13 int main(void)
- 14 {
- 15 int n,i,j,k,p,q;
- 16 char a[100];
- 17 char b[100];
- 18 ss kk[100];
- 19 ss qq[100];
- 20 scanf("%d",&k);
- 21 while(k--)
- 22 {
- 23 scanf("%d ",&n);
- 24 gets(a);
- 25 gets(b);
- 26 int uu=0;
- 27 for(i=0; a[i]!='\0'; i++)
- 28 {
- 29 if(i%3==0)
- 30 {
- 31 if(a[i]=='T')
- 32 {
- 33 kk[uu].x=10;
- 34
- 35 }
- 36 else if(a[i]=='J')
- 37 {
- 38 kk[uu].x=11;
- 39 }
- 40 else if(a[i]=='Q')
- 41 {
- 42 kk[uu].x=12;
- 43 }
- 44 else if(a[i]=='K')
- 45 {
- 46 kk[uu].x=13;
- 47 }
- 48 else if(a[i]=='A')
- 49 {
- 50 kk[uu].x=14;
- 51 }
- 52 else kk[uu].x=a[i]-'0';
- 53
- 54 }
- 55 if((i-1)%3==0&&a[i]!='S')
- 56 {
- 57 kk[uu].y=a[i]-'A';
- 58 uu++;
- 59 }
- 60 if((i-1)%3==0&&a[i]=='S')
- 61 {
- 62 kk[uu].y=6;
- 63 uu++;
- 64 }
- 65
- 66 }
- 67 uu=0;
- 68 for(i=0; b[i]!='\0'; i++)
- 69 {
- 70 if(i%3==0)
- 71 {
- 72 if(b[i]=='T')
- 73 {
- 74 qq[uu].x=10;
- 75
- 76 }
- 77 else if(b[i]=='J')
- 78 {
- 79 qq[uu].x=11;
- 80 }
- 81 else if(b[i]=='Q')
- 82 {
- 83 qq[uu].x=12;
- 84 }
- 85 else if(b[i]=='K')
- 86 {
- 87 qq[uu].x=13;
- 88 }
- 89 else if(b[i]=='A')
- 90 {
- 91 qq[uu].x=14;
- 92 }
- 93 else qq[uu].x=b[i]-'0';
- 94
- 95 }
- 96 if((i-1)%3==0&&b[i]!='S')
- 97 {
- 98 qq[uu].y=b[i]-'A';
- 99 uu++;
- 100 }
- 101 if((i-1)%3==0&&b[i]=='S')
- 102 {
- 103 qq[uu].y=6;
- 104 uu++;
- 105 }
- 106 }
- 107 qsort(qq,n,sizeof(ss),f);
- 108 qsort(kk,n,sizeof(ss),f);
- 109 int x,y;
- 110 x=0;
- 111 int s=0;
- 112 for(j=0; j<n; j++)
- 113 {
- 114 for(p=x; p<n; p++)
- 115 {
- 116 if(qq[p].x>kk[j].x)
- 117 {
- 118 x=p+1;
- 119 s++;
- 120 break;
- 121 }
- 122 else if(qq[p].x==kk[j].x)
- 123 {
- 124 if(qq[p].y>kk[j].y)
- 125 {
- 126 x=p+1;
- 127 s++;
- 128 break;
- 129 }
- 130 }
- 131 }
- 132 }
- 133 printf("%d\n",s);
- 134
- 135 }
- 136 return 0;
- 137
- 138 }
- 139 int f(const void*p,const void*q)
- 140 {
- 141 ss*w=(ss*)p;
- 142 ss*ww=(ss*)q;
- 143 if(w->x==ww->x)//如果前面的大小相同,就按后面的从小到大排
- 144 {
- 145 return w->y-ww->y;
- 146 }
- 147 else return w->x-ww->x;
- 148 }
hdu 1528-Card Game Cheater(贪心算法)的更多相关文章
- hdu 1528 Card Game Cheater (二分匹配)
Card Game Cheater Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others ...
- hdu 1528 Card Game Cheater ( 二分图匹配 )
题目:点击打开链接 题意:两个人纸牌游戏,牌大的人得分.牌大:2 < 3 < 4 < 5 < 6 < 7 < 8 < 9 < T < J < ...
- hdu 1789 Doing HomeWork Again (贪心算法)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1789 /*Doing Homework again Time Limit: 1000/1000 MS ...
- HDU 1009 FatMouse' Trade (贪心算法)
题意:就是老鼠要用猫粮换粮食,第i个房间一些东西,要用东西去换,可以不全换.问给定的猫粮最多能换多少粮食. 析:贪心算法.我们先算出来每个房间物品的平均价格是多少,肯定越低越好,并且如果能全换就全换, ...
- HDOJ 1528 Card Game Cheater
版权声明:来自: 码代码的猿猿的AC之路 http://blog.csdn.net/ck_boss https://blog.csdn.net/u012797220/article/details/3 ...
- (简单匹配)Card Game Cheater -- hdu --1528
http://acm.hdu.edu.cn/showproblem.php?pid=1528 Card Game Cheater Time Limit: 2000/1000 MS (Java/Othe ...
- Card Game Cheater(贪心+二分匹配)
Card Game Cheater Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others ...
- 『嗨威说』算法设计与分析 - 贪心算法思想小结(HDU 2088 Box of Bricks)
本文索引目录: 一.贪心算法的基本思想以及个人理解 二.汽车加油问题的贪心选择性质 三.一道贪心算法题点拨升华贪心思想 四.结对编程情况 一.贪心算法的基本思想以及个人理解: 1.1 基本概念: 首先 ...
- HDU 1528 贪心模拟/二分图
Card Game Cheater Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others ...
随机推荐
- Python异步IO之select
1. select模块的基本使用(以socket为例) 1 # -*- coding:utf-8 -*- 2 # Author:Wong Du 3 4 import select 5 import s ...
- 日常Java 2021/10/1
正则表达式 \cx匹配由x指明的控制字符.例如,lcM匹配一个Control-M或回车符.x的值必须为A-Z或a-z之一.否则,将c视为一个原义的'℃'字符.\f匹配--个换页符.等价于\xOc和\c ...
- day07 Linux配置修改
day07 Linux配置修改 昨日回顾 1.系统目录 /etc :系统配置目录 /bin-> /usr/bin :保存常用命令的目录 /root :超级管理员目录 /home :普通管理员目录 ...
- Learning Spark中文版--第三章--RDD编程(1)
本章介绍了Spark用于数据处理的核心抽象概念,具有弹性的分布式数据集(RDD).一个RDD仅仅是一个分布式的元素集合.在Spark中,所有工作都表示为创建新的RDDs.转换现有的RDD,或者调 ...
- [Windows编程]模块遍历
模块遍历 整体思路 1.创建进程快照 2.遍历首次模块 3.继续下次遍历 4.模块信息结构体 相关API的调用 创建进程快照API HANDLE WINAPI CreateToolhelp32Snap ...
- Android Handler 消息机制原理解析
前言 做过 Android 开发的童鞋都知道,不能在非主线程修改 UI 控件,因为 Android 规定只能在主线程中访问 UI ,如果在子线程中访问 UI ,那么程序就会抛出异常 android.v ...
- 转 序列化Serializable和Parcelable的区别详解
什么是序列化,为什么要进行序列化 答:对象要进行传输(如:activity 与activity间 ,网络间 进程间等等).存储到本地就必须进行序列化 . 这种可传输的状态就是序列化. 怎么序列化??两 ...
- Linux基础命令---mail邮件管理程序
mail mail是一个邮件的管理程序,可以用来发送或者接收邮件. 此命令的适用范围:RedHat.RHEL.Ubuntu.CentOS.Fedora. 1.语法 mail [选项] ...
- OC-copy,单例
总结 编号 主题 内容 一 NSFileManager NSFileManager介绍/用法(常见的判断)/文件访问/文件操作 二 集合对象的内存管理 集合对象的内存管理/内存管理总结 三 *copy ...
- SpringBoot(2):运行原理
一. pom.xml 进入父项目,这里才是真正管理SpringBoot应用里面所有依赖版本的地方,SpringBoot的版本控制中心:以后我们导入依赖默认是不需要写版本:但是如果导入的包没有在依赖中管 ...