这题需要分类讨论:

第一种情况:

n为奇数m为偶数的情况无解,因为m为偶数,每次翻转将把从正面翻到反面的个数x减去从反面翻到正面的个数y,得到的数必定为偶数。因为x+y为偶数,x-y也为偶数。而总个数为奇数,所以无解。

第二种情况:

n能整除m显然直接输出n/m。

第三种情况:

n,m同奇偶,且3*m>n的时候,可以3次解决:

1.将m个正的变成反的,则此时正的有n-m个,反的有m个。

2.将(n-m)/2个正的翻成反的,将(3m-n)/2个反的翻成正的,此时正的有n-m-(n-m)/2+(3m-n)/2=m,反的有m+(n-m)/2-(3m-n)/2=n-m

3.将剩下m个正的翻成反的。

因为n,m同奇偶,所以(n-m)/2和(3m-n)/2必定为整数。

第四种情况:

如果n>3*m的话先每次将m个正的翻成反的,一直翻到剩下p个正的有3*m>p时再用上述方法翻。

当n为偶数,m为奇数,且3*m>n>2*m的时候,可以四步解决:

1.先将m个正的翻成反的,此时有n-m个正的,m个反的。

2.将(n-m-1)/2个正的翻成反的,将(3m-n+1)/2个反的翻成正的,则此时有m+1个正的,n-m-1个反的。

3.将(m+1)/2个正的硬币翻成反的,将(m-1)/2个反的硬币翻成正的,此时有m个正的,n-m个反的。

4.将剩下所有的正的翻过来。

第一次必须把m个正的翻成反的,最后一次必须把m个反的翻成正的,而对于m为奇数的情况,设把正面翻成反面的个数为x,反面翻成正面的个数为y,因为x+y=m为奇数,x-y也为奇数,所以必须经过偶数次翻转才能把杯子全部翻成反的,因此4次是最少的情况。

对于n>3*m显然也可以每次翻m个正的直到剩下p个正的,且有3*m>p的时候再用这种方法翻。

对于n<2*m的情况,翻转次数F(n,m)显然和F(n,n-m)相等,因为前面提到了,答案肯定是偶数,对于每两次翻转,(n,m)和F\(n,n-m)都能通过各自的方式得到同样的结果,因为每两次翻转将杯子翻转两遍的个数范围为[2m-n,m],也就是说这两次翻转只将[0,2(n-m)]的杯子翻转了一遍,而对于(n,n-m)的情况,翻转两次去掉重复翻转的,剩下的只翻转一次的杯子个数范围也是[0,2(n-m)],所以F(n,m)==F(n,n-m)。

每次只需要按照上面的方法判断一遍就可以给出结果了。

#include <stdio.h>
__int64 Solve(__int64 n,__int64 m)
{  if (n%m==0) return n/m;  if (n%2==1 && m%2==0) return -1;  if (n>=3*m) return (n/m-2)+Solve(n%m+2*m,m);  if ((n%2)==(m%2)) return 3;  if (n>=2*m) return 4;  return Solve(n,n-m);
}
int main()
{  __int64 n,m,ret,q,r;  while(scanf("%I64d%I64d",&n,&m)!=EOF)  {  ret=Solve(n,m);  if (ret<0) printf("No Solution!\n");  else printf("%I64d\n",ret);  }  return 0;
}  

View Code

转载于:https://www.cnblogs.com/acm-jing/p/4358003.html

hdu Inverting Cups相关推荐

  1. HDU——1106排序(istringstream的使用、STLvector练习)

    排序 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submiss ...

  2. hdu 5438 Ponds 拓扑排序

    Ponds Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/contests/contest_showproblem ...

  3. HDU 1248 寒冰王座(全然背包:入门题)

    HDU 1248 寒冰王座(全然背包:入门题) http://acm.hdu.edu.cn/showproblem.php?pid=1248 题意: 不死族的巫妖王发工资拉,死亡骑士拿到一张N元的钞票 ...

  4. hdu 1312 Red and Black 解题报告

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1312 第二条深搜,题目并不难,但是做了我好久好久,由于一个细节,让我赌上了一个晚上的时间. 题目大意: ...

  5. HDU 1429 胜利大逃亡(续) (BFS+位压缩)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1429 胜利大逃亡(续) Time Limit: 4000/2000 MS (Java/Others)  ...

  6. hdu 1272 小希的迷宫

    Problem Description 上次Gardon的迷宫城堡小希玩了很久(见Problem B),现在她也想设计一个迷宫让Gardon来走.但是她设计迷宫的思路不一样,首先她认为所有的通道都应该 ...

  7. HDOJ 1157 HDU 1157 Who's in the Middle ACM 1157 IN HDU

    MiYu原创, 转帖请注明 : 转载自 ______________白白の屋   题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=1157 题目描述: ...

  8. 大数加法【HDU 1002】

    大数加法模板 一般的加法只要int类型的两数直接相加即可,大一点的数可以设为long long类型,而超过长整型的数则属于大数问题了,大数加法其实也比较简单,利用数组实现就可以啦: 主要思想如下: ( ...

  9. hdu 2665(主席树查询区间k大值)

    先贴我自己写的代码做模板虽然跟原博主没什么两样.(一开始空间开的4*maxn,交到hdu上一直TLE很奇怪) #include<bits/stdc++.h> using namespace ...

  10. hdu 1599 find the mincost route(找无向图最小环)(floyd求最小环)

    ps(我到今天才知道Floyd的核心思想是动态规划==) hdu 1599 find the mincost route(找无向图最小环) 注意!这里写成   #define data 0x3f3f3 ...

最新文章

  1. 深度学习--TensorFlow(7)拟合(过拟合处理)(数据增强、提前停止训练、dropout、正则化、标签平滑)
  2. ASCII 编码对照表
  3. html如何设置字符类型,html 空格字符类型
  4. android标题显示栏菜单在标题之下,Android菜单项标题不显示
  5. [HNOI2016] 序列(线段树 + 莫队 + 倍增)
  6. JavaWeb 命名规则
  7. 对php的感受100字_最新2020个人年终工作总结开头范文100字
  8. vc无法连接的原因分析
  9. 千兆网线和百兆网线可以通用吗?
  10. 五种开源协议的比较(BSD,Apache,GPL,LGPL,MIT) – 整理
  11. 网站速度这样优化,让你的网站飞起来
  12. MPLS排错练习题分享
  13. 请简述一下”==”和”equals”的区别
  14. [错误分析][Error]no match for ‘operator<<‘无匹配的左移运算符
  15. ios10之后的一些新特性
  16. IPv6下的DHCP(DHCPv6)
  17. javascript--浅谈函数与闭包
  18. tkinter-button详解
  19. 爬取微信朋友圈信息-可视化
  20. 如何获得的office 365 年卡

热门文章

  1. CCF CSP历年题解(python)
  2. CCF CSP 202009-3 点亮数字人生
  3. ENSP下载还有其他资料地址
  4. win10怎么用计算机二进制,教你如何使用Win10计算器进行进制转换?
  5. 测试进阶必备,这5款http接口自动化测试工具真的很香
  6. 【fake_useragent】网络爬虫获取随机User-Agent
  7. log4j日志配置(超详细)
  8. HR:这样的简历我只看了5秒就扔了,软件测试简历模板想要的进。
  9. 抖音seo排名优化技术工具源代码
  10. UART协议就应该这么理解