【HDOJ】2016年中国大学生程序设计竞赛(杭州)(持续更新)(n^n模板)

Difference

题意:

f(233,2)=22+32+32=22    x=f(y,K)y   现在给出x,k 求可能的y有多少个

思路

0x10^9     1K9       y>10^10时,f(y,k)−y≤0(下面代码是证明过程)

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int inf = 0x3f3f3f3f;
int sum[20][20];
ll fum(ll i){
    ll s=0;
    while(i){
        s=s*10+9;
        i--;
    }
    return s;
}
int main()
{

    for(int i = 1; i < 10; i++)
    {
        sum[i][0] = 1;
        for(int j = 1; j <= 9; j++)
        {
            sum[i][j] = sum[i][j - 1] * i;
        }
    }
    freopen("out.txt", "w", stdout);
    ll i;
    for(i=8;i<=15;i++){
        if(i*sum[9][9]<fum(i)){
            cout<<i<<endl;
            break;
        }

    }
    fclose(stdout);
    return 0;
}

输出10

因为y最长是是个字符,那么就可以把y分成两部分来二分查找(后来知道这种思想叫折半枚举,一部分是前五位,一部分是后五位。

代码:

这个是求n^n模板

int sum[20][20];
for(int i = 1; i < 10; i++)
{
    sum[i][0] = 1;
    for(int j = 1; j <= 9; j++)
    {
        sum[i][j] = sum[i][j - 1] * i;
    }
}

猜你喜欢

转载自www.cnblogs.com/Kohinur/p/8982452.html