本文主要是介绍codeforces#256DIV2 D题Multiplication Table,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目地址:http://codeforces.com/contest/448/problem/D
当时是按照找规律做的,规律倒是找出来了,但是很麻烦很麻烦。。看到前几名的红名爷们3分钟就过了,于是果断放弃了。。赛后才知道是用二分的方法做,知道了二分之后,剩下的就很简单了。。关键在于能不能想到用二分。。
代码如下:
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <math.h>
#include <ctype.h>
#include<algorithm>using namespace std;int main()
{__int64 low, high, mid, x, ans, s1, s2, n, m, k, i;scanf("%I64d%I64d%I64d",&n,&m,&k);high=n*m;low=1;while(low<=high){mid=(low+high)/2;s1=s2=0;for(i=1;i<=n;i++){x=mid/i;if(x>m){s1+=m;}else{if(mid%i==0){s2++;s1+=x-1;}else{s1+=x;}}}if(k>=s1+1&&k<=s1+s2){ans=mid;break;}else if(k>s1+s2){low=mid+1;}else{high=mid-1;}}printf("%I64d\n",ans);return 0;
}
这篇关于codeforces#256DIV2 D题Multiplication Table的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!