题目链接:http://codeforces.com/problemset/problem/460/A

题目意思:有一个人有 n 对袜子,每天早上会穿一对,然后当天的晚上就会扔掉,不过他会在 m 的倍数所代表的天数(1m,2m,3m...)会购入一双袜子,不过是在那一天的晚上买。问他拥有的袜子够他穿几天。

首先他是晚上扔掉,早上穿,晚上买这些信息是无关紧要的,好像不影响解题,不要太纠结......这题最关键的是,他穿完 他本来购入的 n 对袜子后,又再购入的情况,因为假设他在前 n 日(也就是m,2m,3m,....。这些 m 的倍数的天数不超过n)购入 bought对袜子,那么接下来的 n+1天他就可以穿这 bought对袜子了,天数依次为n+1, n+2, ...,n+1+bought。但是,有一个情况要考虑到,就是这些天数中有一些可能又是 m 的倍数,也就是又要在这些倍数里买一对袜子。

可以这样处理,不断模拟 n+1天之后的情况,每一天bought的数量减一(代表当日穿这双袜子,顺便当晚扔掉),天数就不断累加啦,如果天数是 m 的倍数,bought数量加一,退出循环的条件就是 bought数变为0.还犯了一个比较低级的错误,循环初始时的值没有搞清楚,就是n+1嘛,想太多了....

自从被人hack了之后,就永无翻身之地啦,接下来的日子尽量多做virtual,做其他oj题之后,发现做回cf的题目有点适应不了= =,呜呜呜~~~继续努力!

 #include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
using namespace std; int main()
{
int n, m, tmp;
while (scanf("%d%d", &n, &m) != EOF)
{
int bought = ;
for (int i = ; i * m <= n; i++)
bought++;
tmp = bought;
for (int i = n+; bought; i++) // 注意是从n+1天开始
{
bought--;
if (i % m == )
{
bought++; // 模拟袜子被用数量
tmp++; // 存储袜子在有的情况下累积的天数
}
}
printf("%d\n", tmp + n);
}
return ;
}

听说还有一个公式算的: n + [(n-1)/(m-1)]的下取整

最新文章

  1. 微信 小程序 drawImage wx.canvasToTempFilePath wx.saveFile 获取设备宽高 尺寸问题
  2. 使用自己的ClassLoader实现热替换
  3. ubifs总体设计分析
  4. Python中用datetime包进行对时间的一些操作
  5. DevExpress licenses.licx 问题
  6. hdu - 1240 Nightmare &amp;&amp; hdu - 1253 胜利大逃亡(bfs)
  7. SCSS loader effect
  8. matlab怎么同时显示imshow 两幅图片
  9. HDFS 搭建记录
  10. 模块化开发之sea.js实现原理总结
  11. OSI七层模型基础知识及各层常见应用
  12. Android TextView里直接显示图片的三种方法
  13. 常用的.net开源项目
  14. Linux源码-等待队列注释
  15. 求解: Windows Phone XAML Controls 为什么是disable状态?
  16. thinkPHP5.0 URL路由优化
  17. CVS简单介绍
  18. 二进制按位与(&amp;)&#160;按位或(|)&#160;&#160;异或运算(^)
  19. GMA Round 1 向量计算
  20. Ollydbg

热门文章

  1. tyvj 1061 Mobile Service
  2. Ubuntu MySQL的安装使用
  3. oracle 连接数据库以及查看当前用户、当前数据库实例
  4. webstorm取消自动保存并标识修改的文件为星星标记
  5. 三种Model模式
  6. 洛谷——P1746 离开中山路
  7. Ubuntu下Deb软件包相关安装与卸载
  8. android 获得屏幕宽度和高度
  9. 【Todo】UDP P2P打洞原理
  10. 线性表的顺序存储和链式存储的实现(C)