線段包含關係
這個題有點遺憾,因為語言設定問題一直沒有過,?
思路:將各個線段如果右端點不相等就按照右端點小的優先排序,如果右端點相等就按照左端點大的排序,這樣就保證了排序出來的結果上乙個的範圍總比下乙個的大,所以在最後只需要比較上乙個與下乙個是否符合條件即可。
#include
#include
#include
using
namespace std;
int n;
struct f
s[300005];
bool
cmp(f a,f b)
intmain()
sort
(s,s+n,cmp)
;for
(int i=
0;iprintf
("-1 -1\n");
return0;
}
地下城還有蘿拉
找規律,分三種情況:1.所走的步數少於行數,即僅在第一列移動
2.對於所走的步數大於行數,先減去在最左邊一列走的步數,然後除以列數減一的差得ans,分兩種情況:a.ans為偶數,也就是從左往右走
b.ans為奇數,也就是從右往左走
#include
using
namespace std;
intmain()
else
return0;
}
f - 法法要穿過大門 codeforces - 935b
判斷一下現在與前一步是否在同乙個區域即可,設定兩個變數進行儲存現在與上一步的區域,但是要特別注意的是剛開始位置在對角線,它不屬於任何乙個區域,所以最後輸出結果要減一
#include
#include
using
namespace std;
int n;
char s;
int x;
int y;
int flag;
int flag2;
intmain()
else
if(s==
'r')
} cout<1
}
法法在分配工作
簡單的判斷有多少質因子的問題
#include
#include
using
namespace std;
intmain()
cout<1
}
最小的二進位制數
由於題目中說出現兩個1就可以抵消為乙個,所以不難推出如果出現1那麼最後抵消完之後就只剩乙個1,然後再在後邊補上一共多少個0就ok啦,特別判斷沒有1的情況。
#include
#include
using
namespace std;
char s[
105]
;int
main()
if(sum2==0)
cout<<
"0"
return0;
}
fifa and fafa
題意就是給出乙個圓的半徑及圓點以及另外乙個點a,求出不超過原來的圓以及不包含這個點的乙個新的圓。
分三種情況:1.如果a在圓外或圓上,那麼直接輸出原來的圓的資訊。
2.如果a恰好與圓點重合就輸出半徑為原來的圓的一半,圓點不變的圓新圓。
3.一般情況先求出a與圓點的距離d,那麼新圓的半徑就是(d+r)/2,新圓的圓心可以通過圓點與a和兩個圓的交點c組成的相似三角形求出c的座標,最後再利用中點座標公式求出。
#include
#include
#include
using
namespace std;
double r,x1,y1,x2,y2;
double m,x,y;
intmain()
return0;
}
涼心的比賽(一)
b.比賽當時真的想了很長時間,看到大佬的解法,感覺真的好厲害啊 簡單來說,你要比較兩個線段包不包含,你先根據線段的最後排序,從小到大,那麼如果出現乙個線段的開始比之前最大的開始要小,那麼這個線段就包含之前哪個線段 include include using namespace std typedef...
涼心的比賽
題意 給出一串只由 1 和 0 組成的字串 並只能進行 一 交換相鄰兩數的位置。二 相鄰的 11 可以換成 1 可以無限次的進行這兩個步驟 所以這題又可以分為三種情況 僅由 1 組成 經過無限次的變換,最後一定只剩下 1 僅由 0 組成 只有0一種情況,最終結果為0 既有 1 又有 0 最後經過有限...
涼心的比賽 一 補題
題目鏈結 題意 有n個物品,能進行a次操作一和b次操作二,每個物品有乙個hp和damage,操作一為把某個物品的hp變為原來的兩倍,操作二為把某個物品的hp賦值給它的damage,問這n個物品的damage的總和最大是多少。思路 證明出來a操作應該都使用給同乙個物品最優,然後按b操作的最優方案排序,...