题解 P7040 【[NWRRC2016]Java2016】

· · 题解

构造。

对很多个 ? 取 \max 得到的值有很大概率为 255,用 255 除以 255 就可以得到 1

2^k2^k 相加可以得到 2^{k+1},因此用 1 可以得到 2 的幂次。

c 转成二进制,用 2 的幂次相加即可。

注意特判 0

#include<bits/stdc++.h>
using namespace std;
int main(){
    int i,c;
    bool f=0;
    scanf("%d",&c),puts("a=? max ?"),c=c?c:256;
    for(i=0;i<10;++i)printf("%c=%c max %c\n",'a'+i+1,'a'+i,'a'+i);
    puts("l=k/j");
    for(i=0;i<10;++i)printf("%c=%c+%c\n",'l'+i+1,'l'+i,'l'+i);
    for(i=0;i<10;++i)if(c&(1<<i)){
        if(f)putchar('+');
        putchar('l'+i),f=1;
    }
    return 0;
}