著名出题人小Q出过非常多的题目,在这个漫长的过程中他发现,确定题目的数据范围是非常痛苦的一件事。
每当思考完一道题目的时间效率,小Q就需要结合时限以及评测机配置来设置合理的数据范围。
因为确定数据范围是一件痛苦的事,小Q出了非常多的题目之后,都没有它们设置数据范围。对于一道题目,小Q会告诉你他的算法的时间复杂度为 O(nalogbn)O(nalogbn),且蕴含在这个大 OO记号下的常数为 11。同时,小Q还会告诉你评测机在规定时限内可以执行 kk条指令。小Q认为只要 na(⌈log2n⌉)bna(⌈log2n⌉)b不超过 kk,那么就是合理的数据范围。其中, ⌈x⌉⌈x⌉表示最小的不小于 xx的正整数,即 xx上取整。
自然,小Q希望题目的数据范围 nn越大越好,他希望你写一个程序帮助他设置最大的数据范围。
Input第一行包含一个正整数
T(1≤T≤1000)T(1≤T≤1000),表示测试数据的组数。
每当思考完一道题目的时间效率,小Q就需要结合时限以及评测机配置来设置合理的数据范围。
因为确定数据范围是一件痛苦的事,小Q出了非常多的题目之后,都没有它们设置数据范围。对于一道题目,小Q会告诉你他的算法的时间复杂度为 O(nalogbn)O(nalogbn),且蕴含在这个大 OO记号下的常数为 11。同时,小Q还会告诉你评测机在规定时限内可以执行 kk条指令。小Q认为只要 na(⌈log2n⌉)bna(⌈log2n⌉)b不超过 kk,那么就是合理的数据范围。其中, ⌈x⌉⌈x⌉表示最小的不小于 xx的正整数,即 xx上取整。
自然,小Q希望题目的数据范围 nn越大越好,他希望你写一个程序帮助他设置最大的数据范围。
每组数据包含一行三个正整数 a,b,k(1≤a,b≤10,106≤k≤1018)a,b,k(1≤a,b≤10,106≤k≤1018),分别描述时间复杂度以及允许的指令数。Output对于每组数据,输出一行一个正整数 nn,即最大可能的 nn。Sample Input
3 1 1 100000000 2 1 100000000 1 3 200000000Sample Output
4347826 2886 48828
虽然代码改出来了,但是我也不太懂
#include<bits/stdc++.h> using namespace std; typedef long long ll; ll a,b,k; ll Log(ll x) { ll c=0,i=-1; while(c<x) { i++; c=pow(2,i); } return i; } int jude(ll m) { ll n=1; for(ll i=0;i<a;i++) { if(n<k/m) { n*=m; } else return 1; } ll nc=1; ll temp=Log(m); if(temp==0) return 1; for(ll i=0;i<b;i++) { if(nc<=k/temp) { nc*=temp; } else return 1; } if(n<=k/nc) return 0; return 1; } int main() { int t; scanf("%d",&t); while(t--) { scanf("%lld%lld%lld",&a,&b,&k); ll l=1,r=k,mid; while(l<r) { mid=(l+r)/2; if(jude(mid)) r=mid; else l=mid+1; } printf("%lld\n",l-1); } return 0; }