##题目描述
在某些岛屿上有一个奇特的风俗,岛上的居民要么只说真话,要么只说假话。在岛上有一所有很多岛上的居民工作的工业大学。大学里面的所有人不论你问谁他们都会且只会给你说下面两个事实:
1.这里有不到
个职员做的工作比我多。
2.这里有至少
个职员得到的工资比我高。
可以知道的事实还有,没有任意两个职员有同样的工资。并且没有任意两个职员都做相同的工作量。下面请你帮忙计算这个大学里面一共有多少个职员。
##输入输出格式
输入格式
输入文件包含两个整数,
和
,意义如题目描述。
输出格式
输出文件包含一个整数,为这个大学的职员数。
##输入输出样例
输入样例
1 1
输出样例
2
##说明
对于
的数据,
对于
的数据,
##分析+证明
这个题真的就是一个
,具体证明如下:
1.由题意知:显然,
,证毕。
2.上面那个是假的不要信
3.真の证明:题目说居民可以全说真话,也可以全说假话。我们不妨设总人数为
。
①已知每个人都说有不到
个人做的工作比自己多,且全说真话,这个毫无悬念
。
②已知每个人都说有至少
个人的工资比自己高,且全说真话,这个也是毫无悬念
(因为工资最高的那个人肯定只能说有0个人的工资比他高啊)。
③但是!居民可以说谎啊!
(1)所以如果工资最高的人说谎,显然
,那么此时做的工作比工资最高的人还要多的人的人数
就会
。但是又因为
,且
,所以
设有
人说谎,如果
人中处在边界情况(例如此时
,工资第二高的人说谎,那么
)的人有
个
,那么
,所以
。并且我们貌似证出了一个玄学的结论:“工资最高的人做的事情最少”。(此结论欢迎提出意见)
(2)如果工资最高的人没有说谎,那么
,因为没有人影响边界,且根据结论"工资最高的人做的事情最少",所以
,那么
。
证毕!
蛤?这种题还要贴代码?行吧!
PS:long long警告。
PS:神仙代码警告!
#include<bits/stdc++.h>
using namespace std;
#define __ long long
#define _____ cin
#define ______ >>
#define ______________ <<
#define ___ cout
#define ________ ,
#define ________________ +
#define _______________________ return
#define _______________________________ ;
int main()
{
__ ____ ________ __________ _______________________________
_____ ______ ____ ______ __________ _______________________________
___ ______________ ____ ________________ __________ _______________________________
_______________________ 0 _______________________________
}