题解:P10892 SDOI2024

观察发现分为两种情况:

  • nn 是偶数,直接除以 22
  • nn 是奇数,为了使纠结(猫猫有奇数只)的次数变少,则在 n+12\frac{n+1}{2}n12\frac{n-1}{2} 之间选出奇数猫猫只带走才能使剩下的猫猫有偶数只。

代码如上模拟,要开 long long

#include<bits/stdc++.h>
using namespace std;
long long t, n;
int main(){
	cin >> t;
	while(t --){
		long long ans = 0;
		cin >> n;
		while(n){
			if(n & 1){//有奇数只猫猫
				ans ++;
				if((n + 1) / 2 & 1) n = n - (n + 1) / 2;
				else n = n - (n - 1) / 2;
			}
			else n = n / 2;
		}
		cout << ans << "\n";
	}
	return 0;
}

posted on 2024-08-21 21:04  zhangzirui66  阅读(11)  评论(0)    收藏  举报  来源

导航