題目鏈結
題意:有n個物品,能進行a次操作一和b次操作二,每個物品有乙個hp和damage,操作一為把某個物品的hp變為原來的兩倍,操作二為把某個物品的hp賦值給它的damage,問這n個物品的damage的總和最大是多少。
思路:證明出來a操作應該都使用給同乙個物品最優,然後按b操作的最優方案排序,列舉使用a操作
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
#define inf 0x7fffffff
typedef
long
long ll;
const
int n=
220000
;int n,a,b;
struct nodef[n]
;ll ans,s;
intcmp
(node x,node y)
intmain()
sort
(f+1
,f+1
+n,cmp)
; ll sum=0;
for(
int i=
1;i<=b;i++
)sum+
=max
(f[i]
.hp,f[i]
.dmg)
;for
(int i=b+
1;i<=n;i++
)sum+
=f[i]
.dmg;
ans=sum;
for(
int i=
1;i<=b;i++
)ans=
max(ans,sum-
max(f[i]
.hp,f[i]
.dmg)
+(f[i]
.hp
max(f[b]
.hp,f[b]
.dmg)
+f[b]
.dmg;
for(
int i=b+
1;i<=n&&b;i++
)ans=
max(ans,sum-f[i]
.dmg+
(f[i]
.hp
題意:通過圓心座標(x1,y1)和半徑r給定乙個大的圓形範圍和乙個點(x2,y2),找乙個圓形範圍使其不包含點(x2,y2)和大圓外任意點。
思路:找內切圓,半徑為 dis[(x1,y1),(x2,y2)]+r注意:若(x1,y1)和(x2,y2)重合,不包含點(x2,y2)的最大內切圓的半徑只能為r/2
#include
using namespace std;
#define inf 0x7fffffff
typedef
long
long ll;
double x1,x2,y1_,y2_,r,r,x,y;
double
dis(
double x1,
double y1_,
double x2,
double y2_)
intmain()
if(d==0)
r=d+r;
x=x2+
(x1-x2)
/d*r;
y=y2_+
(y1_-y2_)
/d*r;
x=(x+x2)/2
;y=(y+y2_)/2
; r/=2
;printf
("%.16lf %.16lf %.16lf"
,x,y,r)
;}
QLU 涼心的比賽(一)補題
b 線段的包含關係 題目大意 給定乙個序列a1,a2,an,乙個編號為1到n的一維判斷,要求找到兩個不同的索引i和j,使ai位於aj內。l1,r1 位於 l2,r2 內,前提是 l1 l2,r1 r2。要求列印索引i和j。如果有多個答案,列印其中任何乙個即可。如果沒有答案,列印 1 1。解題思路 直...
新生賽002(涼心的比賽)補題
這次又寫了簽到題 codeforces 976a 題幹傳送門 題意 其實只需要得出0和1的數目 然後輸出乙個1和所有的0即可 include include include include using namespace std int n string s int main str maxn bo...
涼心的比賽(一)
線段包含關係 這個題有點遺憾,因為語言設定問題一直沒有過,思路 將各個線段如果右端點不相等就按照右端點小的優先排序,如果右端點相等就按照左端點大的排序,這樣就保證了排序出來的結果上乙個的範圍總比下乙個的大,所以在最後只需要比較上乙個與下乙個是否符合條件即可。include include inclu...