從小數開始模擬找方法規律,然後推廣,尤其敢猜敢嘗試,錯了一種思路繼續猜-----這是一種非常重要的方法啊
這道題還是從小數開始模擬,我是依據16以內的找的規律
依據2^k---2^k-1
2^k+1---2^k-2
...這樣陪下去
當2^k==n的時候,
從2^(k-1)按相同的方法配下去,
wa了非常久,是lower_bound用錯了 只是沒明確為啥 換成upper_bound也能夠ac....但還不明確為啥lower_bound wa......
目的是找以乙個<=n的下標
int id=lower_bound(mi,mi+17,n)-mi;
if(mi[id]>n)id--;
跟int id=16;
while(mi[id]>n && id>=0)id--;
不一樣麼?後者ac 前者wa。。
以下是ac**
//#pragma comment(linker, "/stack:102400000,102400000")
#include #include #include #include #include #include #include #include #include #include using namespace std;
#define ls(rt) rt*2
#define rs(rt) rt*2+1
#define ll long long
#define ull unsigned long long
#define rep(i,s,e) for(int i=s;i>1;
const double eps = 1e-8;
const double pi = acos(-1.0);
const int inf = 100000000;
const int maxn = 1e5+50;
ll a[maxn],ans[maxn];
const ll mi[20]=;
ll n;
void print()
int main()
if(mi[id]>n)id--;
ll cnt=0,last=0,ls=n;
while(id>=0&& ls>=0)
ls=last-1;
id--;
}if(ans[0]==0 && ans[1]==1)swap(ans[0],ans[1]);
print();
}return 0;
}
hdu 5014 貪心 位處理
題意略。分析 通過發現規律貪心處理即可,從n開始反向遍歷到0,假設與數i匹配的是 xi 那麼i xi的二進位制位一定全1,並且二進位制位數等於i的二進位制位數 include include include include include const int n 1e5 100 using name...
hdu5014 異或 找區間
題意 給出乙個由 這 個數字組成的序列 要求你給出另乙個序列有 組成,讓他們一一對應 異或相加的值最大 輸出最大值,和你給出的序列 思路 異或完要得到最大值,就應該要二進位制是互補的,如 我們的最大值是 所以我們首先要找到和 互補的值是多少,例如找到是 和 互補 那麼 和 互補 和 也互補 類推 然...
HDU4357 數學思維題
題目 string change 把26個字母看成0 25對應的數字,當數慢慢增大時就對26取模,則字串有乙個總和s1,要使其變為末狀態的總和s2 那麼每交換一次s1要加2,故,s1 s2必須為偶數。兩個字母單獨處理,兩個以上時,以三個數字為例,a,b,c 為三個數,則有 a,b,c a,c 1,b...