hdu Inverting Cups
这题需要分类讨论:
第一种情况:
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==) return n/m;
if (n%== && m%==) return -;
if (n>=*m) return (n/m-)+Solve(n%m+*m,m);
if ((n%)==(m%)) return ;
if (n>=*m) return ;
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<) printf("No Solution!\n");
else printf("%I64d\n",ret);
}
return ;
}
hdu Inverting Cups的更多相关文章
- hdu 3859 Inverting Cups
题意是给出A个杯子,一开始都朝上,每次可以翻B个杯子,问最少需要翻转多少次可以让所有杯子都朝下. 分类讨论: 首先对于A%B==0一类情况,直接输出. 对于A>=3B,让A减到[2B,3B)区间 ...
- hdu 5232 Shaking hands 水题
Shaking hands Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pi ...
- hdu 4112 Break the Chocolate 贪心
Break the Chocolate Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem. ...
- hdu 5881 Tea (2016 acm 青岛网络赛)
原题地址:http://acm.hdu.edu.cn/showproblem.php?pid=5881 Tea Time Limit: 3000/1000 MS (Java/Others) Me ...
- HDU 6667 Roundgod and Milk Tea (思维)
2019 杭电多校 8 1011 题目链接:HDU 6667 比赛链接:2019 Multi-University Training Contest 8 Problem Description Rou ...
- HDOJ 2111. Saving HDU 贪心 结构体排序
Saving HDU Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- 【HDU 3037】Saving Beans Lucas定理模板
http://acm.hdu.edu.cn/showproblem.php?pid=3037 Lucas定理模板. 现在才写,noip滚粗前兆QAQ #include<cstdio> #i ...
- hdu 4859 海岸线 Bestcoder Round 1
http://acm.hdu.edu.cn/showproblem.php?pid=4859 题目大意: 在一个矩形周围都是海,这个矩形中有陆地,深海和浅海.浅海是可以填成陆地的. 求最多有多少条方格 ...
- HDU 4569 Special equations(取模)
Special equations Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u S ...
随机推荐
- cocos2dx阴影层的实现
效果图 //ShadowLayer.h class ShadowLayer : public CCLayer { protected: ShadowLayer() :m_pRender(NULL) , ...
- swift init继承问题
当在子类的 designated init方法中不手动调用 父类的 designated init方法时,如果父类有不接受任何参数的init,那么系统会自动调用它,编译器不会报错.但是如果父类中没有不 ...
- JavaScript设计模式 - 单例模式
单例模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点. 一.实现一个标准的单例模式,用一个变量来标志当前是否已经为某个类创建过对象, 如果是,则在下一次获取该对象实例时,直接返回之前创建的对 ...
- SQL 删除存在于A表但是不存在B表中的记录
目的是是的A表和B表某一个列集合相等 delete from A where tagetColumn not in ( select targetColumn from B)
- [Android Pro] UI设计师不可不知的安卓屏幕知识
reference to : http://www.android100.org/html/201505/24/149342.html 不少设计师和工程师都被安卓设备纷繁的屏幕搞得晕头转向,我既做UI ...
- July 24th, Week 31st Sunday, 2016
Miracles happen every day. 奇迹每天都在发生. Miracles actually happen every day, every moment. You may think ...
- AU版有锁机的福利,704越狱彻底解决+86问题,完美IM/FT,重启不掉APN设置
http://bbs.25pp.com/thread-172881-1-1.html 串号99的是au版 串号013的是sb版 44050 AU为 找到咱们SB版的文件,为44020 http:/ ...
- JAVA基础学习之throws和throw的区别、Java中的四种权限、多线程的使用等(2)
1.throws和throw的区别 throws使用在函数外,是编译时的异常,throw使用在函数内,是运行时的异常 使用方法 public int method(int[] arr) throws ...
- C# Window Form播放音乐的4种方式
C#播放背景音乐通常有四种方式: 1.播放系统事件声音 2.使用System.Media.SoundPlayer播放wav------------------------仅仅是对波形音乐 3.使用MC ...
- linux tricks 之 typeof用法.
typeof是gcc的扩展功能,比较简单,是用来取得参数类型,具体可参考gcc官网的解释. https://gcc.gnu.org/onlinedocs/gcc/Typeof.html ------- ...