标签:ace 遇到 code 就是 reac color contest 自己 for
这题大体意思就是你一开始给一个数1,之后每一天这个数都会自乘2,并且你可以在其中的任意一天把这个数加1,以此来得到你最终想要的数n,并且要求操作次数最少。
题目链接:https://codeforces.com/gym/102830/problem/C
这种题其实遇到过好多次了,但是每次都想着下一次一定查题解结果拖到了自己把这种题解出来。
可以理解为一种贪心算法,如果想得到这个数n,并且要求其操作数最少,就要尽量的少加1。
即如果n为偶数就一直除以2,直到其为奇数;
若n为奇数且不为1,就减一除以2,同时操作数加1;
最后这两种情况都会化为1,所有在程序的最后加1。
#include<iostream> using namespace std; int main() { long long n; scanf("%lld",&n); long long op=0; if(n==1||n==2) { printf("1\n"); return 0; } for(long long i=0;1;i++) { if(n==2||n==1) { op++; break; } if(n%2==0) { n/=2; continue; } else { op++; n--; n/=2; } } printf("%lld",op); return 0; }
C. Kevin's Meme Reacts(UTPC Contest 11-06-20 Div. 2 (Beginner))
标签:ace 遇到 code 就是 reac color contest 自己 for
原文地址:https://www.cnblogs.com/Elbow-613/p/14156655.html