社区讨论

蒟蒻自己都没想到,不用if竟AC了P5709

灌水区参与者 5已保存回复 8

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
8 条
当前快照
1 份
快照标识符
@locxj9hn
此快照首次捕获于
2023/10/30 21:22
2 年前
此快照最后确认于
2023/11/05 07:45
2 年前
查看原帖
本蒟蒻最近买了《深基》,决心要打好基础。
做到了31页的Apples Prologue一题(洛谷P5709 题目),发现要求是尝试不使用if来做题(因为“还没有教”)。
于是蒟蒻冥思苦想,找到了一点奇怪的思路,写出了一个非常奇怪的代码:
CPP
#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的结果的。
不胜感谢。

回复

8 条回复,欢迎继续交流。

正在加载回复...