1. 程式人生 > 其它 >JSP基礎教程:Beans and Forms處理

JSP基礎教程:Beans and Forms處理

技術標籤:Codeforcesc++

C. p-binary

題意: 給n 和p 構造多個 (2^x + p) 這樣的數的和等於n 問最小多少個這樣的二進位制數

題解:當前數字構成的

所以我們將 列舉t 即可
但是列舉的時候有個坑,有可能當前的二進位制值可能用多個
具體看程式碼

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 1e6+6;
ll n, p;

int main()
{
	cin >> n >> p;
	if(n <= p)
	{
cout << -1 << endl; return 0; } ll ans = -1; ll ji = 0; ll sum = 0; for(int i = 1; i < 32; i ++) //列舉 因為1e9 最多是2的32次 { ll cnt = 0; //這裡記錄當前sum值 有多少個1 也就是由多少個二進位制陣列成的 sum = n-p*i; // 根據公式減去 while(sum > 0) // 迴圈記錄有多少個1 { if(sum&1) cnt ++; sum >>= 1; } if(
cnt <= i && i <= n-p*i ) // 這裡坑,如果剛好二進位制的數剛好 { // 等於當前列舉的個數的時候 ans = i; // 當如果不等於的時候 我們可以知道 break; // 一個4+p 可以變成2+p+2+p } // 所以如果當前列舉的個數不全為1的時候就可以, 雖然我覺得可以hack } cout << ans << endl; return 0; }