题目
题目翻译
如入四个数,都是0或1 iIn1, iIn2, iIn3, iIn4 输出 ((iIn1^iIn2) & (iIn3 | iIn4)) ^ ((iIn2&iIn3) | (iIn1^iIn4))
"^"表示异或 "|"表示或 "&"表示与
感谢@PC_DOS 提供的翻译
题目描述
输入输出格式
输入格式:
The input consists of four lines, each line containing a single digit 0 or 1.
输出格式:
Output a single digit, 0 or 1.
输入输出样例
输入样例#1: 复制
0
1
1
0
输出样例#1: 复制
0
思路
可以考虑更高效算法,因为是一张n∗m的表,所以的到乘积是按大小依次放入表中的,每一个表中的值,都肯定能被行数整除,商则是列数,而列数小于等于这个商的值都小于等于此数
所以满足单调性,同时答案在一个区间内,可用二分答案求解
代码
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
long long n,m,k;
bool check(long long x)
{
long long sum=0;
for(int i=1;i<=n;i++)
{
sum+=min(m,x/i);
}
return sum>=k;
}
int main()
{
scanf("%lld%lld%lld",&n,&m,&k);
long long pow=n*m;
long long l=1,r=pow;
while(l<r){
long long mid=(l+r)>>1;
if(check(mid))r=mid;
else l=mid+1;
}
printf("%lld",l);
}