HDU
lihaogegehuting
这个作者很懒,什么都没留下…
展开
-
hdu 1867 A + B for you again
真的受不了了,原创 2014-07-16 14:32:58 · 637 阅读 · 0 评论 -
HDU 1108 最小公倍数
这个不多说了,只要学过编程jiuh原创 2014-07-10 20:19:51 · 564 阅读 · 0 评论 -
HDU 1157 Who's in the Middle
快排就是好用原创 2014-07-10 22:32:25 · 631 阅读 · 0 评论 -
HDU 2594 Simpsons’ Hidden Talents
字符串s1,s2分别原创 2014-07-15 01:03:56 · 581 阅读 · 0 评论 -
hdu 2177 取(2堆)石子游戏
天资愚笨啊,网上的一大堆没看懂。。。。。。总结百科的方法为:1.a==b同时减去a 得到0,02.a==a_k b>b_kb -(b-b_k)3.a==a_k b同时拿走a_k-a_(b-a_k)得到 a_(b-a_k) a_(b-a_k) + b-a_k4.a>a_k b==b_k原创 2014-08-11 23:46:19 · 971 阅读 · 0 评论 -
hdu 1527 取石子游戏
先解释一下威佐夫博弈吧:所谓威佐夫博弈,是ACM题中常见的组合游戏中的一种,大致上是这样的:有两堆石子,不妨先认为一堆有 10,另一堆有 15 个,双方轮流取走一些石子,合法的取法有如下两种:1、在一堆石子中取走任意多颗;2、在两堆石子中取走相同多的任意颗;约定取走最后一颗石子的人为赢家,求必胜策略。两堆石头地位是一样的,我们用余下的石子原创 2014-08-11 21:49:20 · 871 阅读 · 0 评论 -
hdu 1847 Good Luck in CET-4 Everybody!
法一:首先我们可以想到在面对3的时候是必败局,谁面对3时无论拿多少都会败 ! 那么就要尽量造成这样的局势给对方,因为任何不是3的倍数的数加1或2都可以变成3的倍数,同理减去1或2也可以变成3的倍数,也就是说假设目前的个数不是3的倍数,那我肯定能把它拿成3的倍数,比如现在是11个,那我拿走2个就变成9,这样就造成对方为3的倍数局势,那么对方拿m个我都可以通过拿原创 2014-08-12 21:49:50 · 849 阅读 · 0 评论 -
hdu 1536 S-Nim|| poj 2960 S-Nim (sg函数)
#include #include int s[110];int sg[10010],hash[110];int n, m;int getsg(int x) //sg模板 { int i; if(sg[x] != -1) return sg[x]; memset(hash,0,sizeof(hash)); for(i = 0; i < n; i++) {原创 2014-08-13 18:07:30 · 1070 阅读 · 0 评论 -
hdu 2000 ASCII码排序
#include#include#includeint cmp(const void *a,const void *b){ return *(char *)a-*(char *)b;}int main(){ int i; char str[4]; while(~scanf("%s",str)) { qsort(str,3,sizeo原创 2014-08-14 17:51:33 · 703 阅读 · 0 评论 -
hdu 2004 成绩转换
#includeint main(){ double x; while(~scanf("%lf",&x)) { if(x100) printf("Score is error!\n"); else { if(x<60) printf("E\n");原创 2014-08-14 20:21:34 · 628 阅读 · 0 评论 -
hdu 2008
#includeint main(){ int n,i,j,k,m; double a[100]; while(scanf("%d",&n)&&n!=0) { j=0;k=0;m=0; for(i=0;i<n;i++) { scanf("%lf",&a[i]); if(a[i]<0) j++; else if(a[i]==0) k++;原创 2014-08-14 20:43:17 · 823 阅读 · 0 评论 -
hdu 2001 计算两点间的距离
开始WA,两点间距离公式竟然写错了,想死的心都有了。。。。#include#includeint main(){ double x1,x2,y1,y2,m; while(~scanf("%lf%lf%lf%lf",&x1,&y1,&x2,&y2)) { m=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2)); p原创 2014-08-14 18:23:07 · 756 阅读 · 0 评论 -
hdu 2006
#includeint main(){ int n,a,sum,i; while(~scanf("%d",&n)) { sum=1; for(i=1;i<=n;i++) { scanf("%d",&a); if(a%2!=0) sum*=a; } p原创 2014-08-14 20:38:42 · 724 阅读 · 0 评论 -
hdu 2005 第几天?
#include int year,month,day,ans;int main(){ while(scanf("%d/%d/%d",&year,&month,&day)!=EOF){ ans=0; switch(month-1){ //这里需要减一,加的是上个月的时间,本月的只加天数 case 11: ans+=30; //c原创 2014-08-14 20:32:02 · 728 阅读 · 0 评论 -
hdu 2025 查找最大元素
#include#includeint main(){ int i,len; char str[110],max; while(~scanf("%s",str)) { len=strlen(str); max='A'; for(i=0;i<len;i++) if(str[i]>max) max=str原创 2014-08-14 17:31:07 · 810 阅读 · 0 评论 -
hdu 2002 计算球体积
#include#define PI 3.1415927int main(){ double r,m; while(~scanf("%lf",&r)){ m=(4.0/3.0)*PI*(r*r*r); printf("%.3lf\n",m);}return 0;}原创 2014-08-14 18:36:29 · 738 阅读 · 0 评论 -
hdu 2003 求绝对值
#includeint main(){ double a; while(~scanf("%lf",&a)) { if(a<0) printf("%.2lf\n",-a); else printf("%.2lf\n",a); } return 0;}原创 2014-08-14 18:42:18 · 614 阅读 · 0 评论 -
hdu 2010
#include#include#includeint main(){int m,n;int a,b,c;while(scanf("%d%d",&m,&n)!=EOF){int flag=0;if(m>n){int temp=n;n=m;m=temp;}for(int i=m;i<=n;i++){a=i/100;b=(i%100)/10;c=(i%100)%10;原创 2014-08-14 20:47:01 · 719 阅读 · 0 评论 -
HDU 1106 排序
原本很简单的一道题做了l原创 2014-07-10 18:15:46 · 570 阅读 · 0 评论 -
hdu 1850 Being a Good Boy in Spring Festival
我们知道在Nim博弈中如果我们面对的是一个非奇异局势(a,b,c),要如何变为奇异局势呢?假设 a b)=(a(+)a)(+)(b(+)b)=0(+)0=0。要将c 变为a(+)b,只要从 c中减去 c-(a(+)b)即可。 也就是说,其中一个堆C必须大于所有其他所有堆异或的值,由此我们可以进行枚举即(sum^a[i])#includeint main()原创 2014-07-27 23:24:32 · 771 阅读 · 0 评论 -
hdu 1711 Number Sequence
竟然忘了边界情况,原创 2014-07-16 22:20:59 · 600 阅读 · 0 评论 -
hdu 4513 吉哥系列故事——完美队形II
参见hdu 3068 的manacher算法代码如下:#include#include#define M 110010int s[M],ss[M*2];//s代表原来的字符串,ss代表插入之后的字符串int p[M*2]; //表示以i为中心的(包含i这个字符)回文串半径长int min(int a,int b){ return a>b?b:a;}int mai原创 2014-07-17 23:32:45 · 1098 阅读 · 0 评论 -
HDU 1031 Design T-Shirt
找了1个多小时的错误,竟然出现在const 上原创 2014-07-10 11:03:35 · 587 阅读 · 0 评论 -
hdu 3294 Girls' research
#include#include#define MAX 200020char s[MAX],ss[MAX*2],str[2];int p[MAX*2];int chance(char s){ return (s- str[0] + 26) % 26 + 'a'; }int min(int a,int b){return a>b?b:a;}int main(){原创 2014-07-19 01:16:44 · 1197 阅读 · 0 评论 -
hdu 1236 排名
结构体定义没搞明白,一直WA,终于AC了,真是高兴呀代码如下:#include#include#include struct student{ char id[30]; int score;}person[1001];int cmp(const void *a,const void *b){ struct student *aa=(struct studen原创 2014-07-18 17:51:28 · 837 阅读 · 0 评论 -
hdu 1203 I NEED A OFFER!
不懂得见算法背包问题详解代码如下:#includestruct node{ int cost; double wei;} a[10004];double min(double a,double b){ return a>b? b:a;}int main(){ int i,j,n,m; double dp[10004]; whil原创 2014-07-24 14:18:21 · 721 阅读 · 0 评论 -
hdu 2546饭卡
#include#include#includeint s[1050];int dp[1050];int cmp(const void *a,const void * b){ return *(int *)b-*(int *)a; }int maxx(int a,int b){return a>b?a:b;}int main(){ int n,i,j,sum,MA原创 2014-07-25 18:13:18 · 809 阅读 · 0 评论 -
hdu 2995 Robberies
分析:01背包的概率问题当前的概率基于前一种状态的概率,即偷n家银行而不被抓的概率等于偷n-1家银行不被转的概率乘以偷第n家银行不被抓的概率。用dp[i]表示偷价值为 i 时不被抓的概率,则状态转移方程为:dp[j] = max(dp[j] , dp[j-m[i]] * (1-p[i]));自己写关键在01背包的转换,原意是提供银行个数和期望被捕概率,然后将每个银行的钱数和逃脱概率给出,通过将总数原创 2014-07-24 17:44:09 · 1131 阅读 · 0 评论 -
hdu 1248 寒冰王座
代码如下:#include#includeint dp[10000];int max(int a,int b){return a>b?a:b;}int main(){ int w[4]; int i,j,t,n; scanf("%d",&t); w[0]=150,w[2]=200,w[3]=350; while(t--) {原创 2014-07-25 23:43:07 · 927 阅读 · 0 评论 -
hdu 1114 Piggy-Bank
求最大价值:要求恰好装满背包,那么在初始化时除了dp[0]为0其它dp[1..V]均设为-∞ 求最小价值:要求恰好装满背包,那么在初始化时除了dp[0]为0其它dp[1..V]均设为∞代码如下: 注意下标问题#includeint p[1008],w[1008];int dp[10000];int min(int a,int b){ret原创 2014-07-25 23:17:44 · 762 阅读 · 0 评论 -
hdu 2516 取石子游戏
引用:http://blog.csdn.net/dgq8211/article/details/7602807有一堆个数为n的石子,游戏双方轮流取石子,满足:1)先手不能在第一次把所有的石子取完;2)之后每次可以取的石子数介于1到对手刚取的石子数的2倍之间(包含1和对手刚取的石子数的2倍)。约定取走最后一个石子的人为赢家,求必败态。这个和之前的Wythoff原创 2014-07-27 15:25:47 · 838 阅读 · 0 评论 -
hdu 1907 John
取火柴的游戏题目1:今有若干堆火柴,两人依次从中拿取,规定每次只能从一堆中取若干根, 可将一堆全取走,但不可不取,最后取完者为胜,求必胜的方法。 若sum=0;则先取者输,后取者胜; 若sum=!0,则先取者使其变成奇异状态,先取者胜 即谁先面临奇异状态谁输;题目2:今有若干堆火柴,两人依次从中拿取,规定每次只能从一堆中取若干根, 可将一堆全取走,但不可不取,原创 2014-07-28 00:38:45 · 1195 阅读 · 0 评论 -
hdu 2509 Be the Winner
详解:hdu 1907 John - lihaogegehuting的专栏 - 博客频道 - CSDN.NET两道题几乎一样代码如下:#includeint main(){ int T,a[100],i,sum,ok; while(~scanf("%d",&T)) { sum=0; ok=0;原创 2014-07-28 15:56:48 · 960 阅读 · 0 评论 -
hdu 悼念512汶川大地震遇难同胞——选拔志愿者
简单的巴什博弈代码如下: #includeint main(){ int n,m,c ; scanf("%d",&c); while(c--) { scanf("%d%d",&n,&m); if(n<m) printf("Grass\n"); else if(n%(m+1)==0) printf("Rabbit原创 2014-07-27 13:43:54 · 932 阅读 · 0 评论 -
hdu 2987 邂逅明下
巴什博弈的变形:假设先取者为A,后取者为B,初始状态下有石子n个,除最后一次外其他每次取得石子个数必须在[p,q]之间。若当前石子共有n =(p+q)* r个,则A必胜,必胜策略为:A第一次取q个,以后每次若B取K个,A取(p+q-k)个,如此下去最后必剩下p个给B,所以A必胜。若n =(p+q)* r + left个(1 left p)B必胜,必胜策略为:每次取石子活动中,若A原创 2014-07-27 16:38:44 · 995 阅读 · 0 评论 -
hdu 1849 Rabbit and Grass
Nim博弈题意:有m堆牌,两个人先后取某堆中的任意(不少于一)张牌,最后取完者胜;问先手取胜第一次取牌有多少种取法。思路:1)如若给出 的是必败状态:a1^a2^......^an=0,则先手不会有任何可能获得胜利; 2)若给出的是必胜状态:a1^a2^.......^an=k,(其中k不为零),那么我们的目的是要把必胜状态 转化为原创 2014-07-27 22:47:37 · 746 阅读 · 0 评论 -
hdu 1846 Brave Game
(一)巴什博奕(Bash Game):只有一堆n个物品,两个人轮流从这堆物品中取物,规定每次至少取一个,最多取m个。最后取光者得胜。 显然,如果n=m+1,那么由于一次最多只能取m个,所以,无论先取者拿走多少个,后取者都能够一次拿走剩余的物品,后者取胜。因此我们发现了如何取胜的法则:如果n=(m+1)r+s,(r为任意自然数,s≤m),那么先取者要拿走s个物品,如果后取者拿走原创 2014-07-27 13:24:49 · 813 阅读 · 0 评论 -
hdu 1196 Lowest Bit
#includeint main(){ int i,n,a[10000],sum,j; while(~scanf("%d",&n)&&n) { sum=1; for(i=0;;i++) { a[i]=n%2; n=n/2; if(a[i]原创 2015-03-11 21:00:36 · 602 阅读 · 0 评论