洛谷P5016龍虎鬥

2022-06-30 11:51:07 字數 3273 閱讀 6208

哎呀,最近有點懈怠了 沒辦法,初三是真的忙 我盡量 哭泣

—————————————————————————

懂的都懂,這道題是基本的列舉模擬練習

現在讓我們來看看題

—————————————————————————

題目簡述

軒軒和凱凱正在玩一款叫《龍虎鬥》的遊戲,遊戲的棋盤是一條線段,線段上有 n個兵營(自左至右編號 1∼n),相鄰編號的兵營之間相隔 1厘公尺,即棋盤為長度為 n−1 厘公尺的線段。i號兵營裡有ci 位工兵。 下面圖 1 為 n=6 的示例:

軒軒在左側,代表「龍」;凱凱在右側,代表「虎」。 他們以 m 號兵營作為分界, 靠左的工兵屬於龍勢力,靠右的工兵屬於虎勢力,而第 m 號兵營中的工兵很糾結,他們不屬於任何一方。

乙個兵營的氣勢為:該兵營中的工兵數× 該兵營到 m 號兵營的距離;參與遊戲 一方的勢力定義為:屬於這一方所有兵營的氣勢之和。

下面圖 2 為 n = 6,m=4 的示例,其中紅色為龍方,黃色為虎方:

遊戲過程中,某一刻天降神兵,共有 s1 位工兵突然出現在了 p 1號兵營。作為軒軒和凱凱的朋友,你知道如果龍虎雙方氣勢差距太懸殊,軒軒和凱凱就不願意繼續玩下去了。為了讓遊戲繼續,你需要選擇乙個兵營 p2,並將你手裡的 s2 位工兵全部派往 兵營 p2,使得雙方氣勢差距盡可能小。

注意

你手中的工兵落在哪個兵營,就和該兵營中其他工兵有相同的勢力歸屬(如果落在 m 號兵營,則不屬於任何勢力)。

輸入格式

輸入檔案的第一行包含乙個正整數n,代表兵營的數量。

接下來的一行包含 n 個正整數,相鄰兩數之間以乙個空格分隔,第 i個正整數代 表編號為 i 的兵營中起始時的工兵數量 ci 。

接下來的一行包含四個正整數,相鄰兩數間以乙個空格分隔,分別代表 m,p1,s1,s2

輸出格式

輸出檔案有一行,包含乙個正整數,即 p2,表示你選擇的兵營編號。如果存在多個編號同時滿足最優,取最小的編號。

樣例

例1輸入6

2 3 2 3 2 3

4 6 5 2輸出2

例2輸入6

1 1 1 1 1 16

5 4 1 1輸出1

—————————————————————————

【資料規模與約定】

1說明/提示

m:為分界的兵營號

p1:系統降兵兵營號

s1:系統降兵數

s2:可操控兵數

【輸入輸出樣例 1 說明】

見問題描述中的圖 2。

雙方以 m=4號兵營分界,有 s1=5位工兵突然出現在 p1=6號兵營。

龍方的氣勢為:

2×(4−1)+3×(4−2)+2×(4−3)=14

虎方的氣勢為:

2×(5−4)+(3+5)×(6−4)=18

當你將手中的 s2=2 位工兵派往 p2 =1 號兵營時,龍方的氣勢變為:

14+2×(4−2)=18

此時雙方氣勢相等。

【輸入輸出樣例 2 說明】

雙方以 m=5 號兵營分界,有 s1 = 1位工兵突然出現在 p1 = 4 號兵營。

龍方的氣勢為:

1×(5−1)+1×(5−2)+1×(5−3)+(1+1)×(5−4)=11

虎方的氣勢為:

16×(6−5)=16

當你將手中的 s2=1 位工兵派往 p2 = 1號兵營時

龍方的氣勢變為:

11+1×(5−1)=15

此時可以使雙方氣勢的差距最小。

—————————————————————————

解析

首先,輸入是很簡單的

int n;

typedef long long ll;

ll c[100005];

ll m,p1,s1,s2;

cin>>n;

for(int i=1;i<=n;i++)

cin>>m>>p1>>s1>>s2;

因為有系統降兵,所以我們先加上系統所降的兵,在分別計算龍氣,虎氣。

c[p1]+=s1;

現在,終於到了計算的時候 \(** ^ **)/

乙個兵營的氣勢為:該兵營中的工兵數× 該兵營到 m 號兵營的距離

ll ql=0,qh=0;

for(int i=1;i<=n;i++)else if(i>m)

}我們來看看龍,虎兩氣現有差值

ll mins=fabs(ql-qh);

這裡的「fabs」函式用於求絕對值(記得加標頭檔案「# include < cmath >」)

—————————————————————————

主要步驟

將我們要調配的小兵一 一調配至各兵營,調配後再比較前後差值絕對值的大小,將差值絕對值小的所調配的兵營號記錄下來

ll p2=m;

for(int i=1;i<=n;i++)else if(i>m)

if(fabs(newl-newh)

mins=fabs(newl-newh);

p2=i;

}最後,輸出一下差值最小所調配兵營號即可

cout<

—————————————————————————

最後,將全部**奉上

#include

#include

using namespace std;

int n;

typedef long long ll;

ll c[100005];

ll m,p1,s1,s2;

int main()

cin>>m>>p1>>s1>>s2;

c[p1]+=s1;

ll ql=0,qh=0;

for(int i=1;i<=n;i++)else if(i>m)

}ll mins=fabs(ql-qh);

ll p2=m;

for(int i=1;i<=n;i++)else if(i>m)

if(fabs(newl-newh)

mins=fabs(newl-newh);

p2=i;}}

cout<

return 0;

}—————————————————————————

加油↖(^ ω ^)↗

題解 P5016 龍虎鬥

首先祝各位大佬noip有個好成績吧 當時比賽有個大資料,蒟蒻我暴力居然過了,好激動 這題一定要注意開long long 那個大資料就是我開long long才過的 還有剛開始應設定答案為m 見解析 include includeusing namespace std long long f1,f2,...

P5016 龍虎鬥 高精度 快速讀取

軒軒和凱凱正在玩一款叫 龍虎鬥 的遊戲,遊戲的棋盤是一條線段,線段上有 nn 個兵營 自左至右編號 1 sim n1 n 相鄰編號的兵營之間相隔 11 厘公尺,即棋盤為長度為 n 1n 1 厘公尺的線段。ii 號兵營裡有 c ici 位工兵。下面圖 1 為 n 6n 6 的示例 軒軒在左側,代表 龍...

NOIP2018普及T2暨洛谷P5016 龍虎鬥

這是一道模擬題。看到題目,我們首先要把它細緻的讀明白,模擬題特別考察細節,往往會有想不到的坑點 好吧,這題貌似沒有 然後我們還要看一看資料範圍,可以注意到會出現10 9級別的數字。稍有資訊學常識的人都知道,int型儲存的最大數字是2147483647 再加就爆富負了 實在背不過這個數字也沒關係,只要...