HDU 3363 分冰糖葫蘆

2021-07-05 06:15:14 字數 746 閱讀 6743

#include #include #include #include #include #include #include using namespace std;

const int maxn = 100000 + 10;

int t;

/*hdu 3363

關鍵:①把串想象成乙個環, 只要用一條過圓心的直線把環平分成兩條鏈即可, 而由於它實際上是串, 因此已經被分過一次了, 因此可能還需要至少再分1次或2次

②只要平分了一種, 剩下那種肯定也是已經平分的

綜上可知, 先找乙個位置平分一種, 再找到這個位置關於圓心對稱的另乙個位置即可

*/vectorcut1(char *str,int tmp)

return vec;

}vectorcut2(char *str,int tmp)

sort(vec.begin(),vec.end());

return vec;

}int main()else if( vec1.size()==vec2.size() && vec1[0]>vec2[0] )else if( vec1.size()==vec2.size() && vec1[0]==vec2[0] )

} cout << vec1.size() << endl;

if( vec1.size()==1 )else

cout << endl;

} return 0;

}

HDU 3363 冰糖葫蘆

題目解析 首先如果兩種水果可以平分,肯定在2刀內 推理 冰糖葫蘆上有兩種水果 h和t,當且僅當h和t都為偶數時才能將冰糖葫蘆分成兩份,每份兩種水果h t個數相等 我們把冰糖葫蘆首尾連線,看成乙個圓,圓上有h t兩種,當h t都為偶數時,我們只看其中一種水果 假設看h,圓上有偶數個h,將圓劈成兩半 每...

hdu1201,hdu6252差分約束系統

題意 有n個限制條件,區間a到b至少是有c個點,求滿足條件的最少端點數 分析 需要滿足所有條件,那麼首先想到的是差分約束系統。先定義陣列g,gi為0到i有gi個端點,那麼條件a到b區間至少有c個端點可以轉化成,gb g a 1 c 顯然n個限制條件是不夠的,還需要滿足1 g i 1 g i 0,轉化...

差分約束 hdu 3666

xij ai l bj 0 xij ai u bj 0 兩邊取對數來去除ai,bj前面的係數 有 logbj logai logxij logu logai log bj logl logxij 化成標準差分約束,建圖,spfa,注意乙個竅門,當入隊總數大於2 n m 時就可以輸出no 因為 乙個點...