CTF
Description
在迷迷糊糊的进入大学以后,你决定参加竞赛出人头地,但是身处机算机学院的你,却发现竞赛并不等于电竞,你左选右选,发现了acm和ctf,一直想成为黑客的你,决定去ctf那里学习一下,但是当ctf要学的东西真是太多辣,pwn,web,逆向....,作为萌新的你决定多刷题。
学长给你指定了一个学习计划,考虑到计算机的本质是个二进制,所以你将在2^1天内每天刷一题,2^2天内每天刷两题,即第1,2天每天刷一题,第 3到 6 天每天刷两题,2^x天每天刷x题,以此类推,有算法基础的你决定写一个程序来看看自己在规定的天数内到底要写几道题
Input
一个整数 t 表示天数(1≤t≤1e7)。
Output
一个整数x表示要刷的题目数量。
Sample Input 1
9Sample Output 1
19大佬勿喷,我可菜了。。。
#include <iostream> using namespace std; int ksm(int a,int n){ long long ans=1; while(n){ if(n&1){ ans=(ans*a); } a=a*a; n>>=1; } return ans; } int main(){ long long x; cin>>x; long long ans=0; long long sum=0; for(int i=2;i<=24;i++){ sum=sum+ksm(2,i-1); if(x>=sum){ // sum=sum+ksm(2,i-1); if(i-1>1){ ans=(ksm(2,i)-ksm(2,i-1))*(i-1)+ans; } else{ ans=(ksm(2,i)-2)*(i-1)+ans; } } else{ long long y=x-(sum-ksm(2,i-1)); ans=ans+y*(i-1); break; } } cout<<ans<<endl; return 0; }