本蒟蒻最近买了《深基》,决心要打好基础。
做到了31页的Apples Prologue一题(洛谷P5709 题目),发现要求是尝试不使用if来做题(因为“还没有教”)。
于是蒟蒻冥思苦想,找到了一点奇怪的思路,写出了一个非常奇怪的代码:
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
int m,t,s;
cin>>m>>t>>s;
int eaten=ceil(1.0*s/t);//吃掉的苹果数
int num=((m-eaten)+abs(m-eaten))/2;/*很奇怪的写法,在不用if的情况下特判s/t>m的情况:
当m-s/<0时,(m-eaten)+abs(m-eaten)等于2倍的m-eaten,
再除以2,也能得到想要的结果;
当m-s/t<0时,(m-eaten)+abs(m-eaten)等于0,再除以2还是0*/
cout<<num<<endl;
return 0;
}
蒟蒻本来以为这个奇怪的代码只能A掉1,3,4,5号数据点(因为第2个数据点中t=0),结果发现5个点都AC了?!
哪位神犇来给我讲讲t=0时程序是怎么算出1.0 *s/t的结果的。
不胜感谢。