2019山東ACM省賽補題題解

2021-10-09 21:06:44 字數 1971 閱讀 3723

wandering robot

題意:大體意思就是乙個機械人按照指定的路線走來走去,最後求最遠點和初始點(0,0)的距離

思路:1.確定最遠點

第一次迴圈路徑確定之後,其他的迴圈基本都是在平移,最遠點可能是在最後一次迴圈但是也很有可能在第一次迴圈

2.確定最遠點的位置

k的值特別的大,所以肯定不能用for迴圈來確定最後的位置

通過第一次迴圈和以後路徑的平移來確定最後的位置

第一次的末位置是第二次迴圈的初位置,通過第一次的平移規律*(k-1)推出最後一次迴圈的初位置,根據位置移動方案推出最後一次迴圈所有的位置並比較他們跟初始點的距離,計算距離最遠的點

3.比較第一次和最後一次

最後一次迴圈的點的距離值與最後一次迴圈的點的距離值相比較,求max最大值

#include

#include

using

namespace std;

#define ll long long

intmain()

} ll sumx=

(k-1

)*x;

ll sumy=

(k-1

)*y;

ll maxx=0;

for(ll i=

0; icout<<

max(xn,maxx)

<}}

stones in the bucket

題意:n桶石頭,選擇從桶中刪除乙個石頭或者把其中乙個石頭從乙個桶移動到另乙個桶,這兩種操作各是一次操作,求最少操作幾次,使每堆石頭的數量一樣。

思路:求數量多於平均值的桶多出的那部分值的總和,因為這部分值早晚都是要被丟掉或者是移到別的桶。

#include

#define ll long long

using

namespace std;

int num[

100005];

intmain()

ll m=num1/n;

for(

int i=

1;i<=n;i++)}

cout<}return0;

}

#include

#define ll long long

using

namespace std;

long

long

pg(ll a,ll b,ll mod)

return ans;

}//打表函式

void

init()

}if(a&1

) cout<<

"奇數"

}}intmain()

else

} ll q1;

q1=p/a;

if(p%a)

q1++

; ll l=

1

=(mod/l-p/l)

; cout

}

game on a graph

題意:給出乙個連通圖的節點數,邊數

有兩個隊伍,給出乙個順序代表順序輪到哪個隊伍,就要在這個圖中刪去一條邊,如果刪去某一條邊圖不連通了,這個隊伍就失敗,最後輸出勝利的隊伍

思路:關鍵在於搞清楚不連通時的臨界狀態,不連通的前乙個狀態就是形成了乙個單隻的圖(每兩個頂點只有一條邊相連)n個點的圖若要聯通,最少要n-1條邊。

#include

using

namespace std;

//speed_up

intmain()

long

long ans=

(a2-a1+1)

%n;if

(s[ans]

=='2'

)else

}}

2019山東省賽補題

a題 題解 a題注意看清題目每月三十天每週五天很關鍵,因為每月星期幾是固定的。include define ll long long using namespace std const ll nl 1e5 5 ll a nl ll b nl ll c nl int main else if s tu...

2019山東省賽重現補題總結

賽後做了一下隊友做的h和沒做出來的l 感覺其實還挺簡單,就是沒往那邊去想,亦或者說,對這個演算法掌握的不熟練。給你幾個線段,然後你可以在每個線段上找乙個點 這個點必須是在y軸方向上,沒有別的點和它平行,就是一豎行上只能有乙個點 然後問你有這個點的線段 這個線段至少有乙個點,多個也沒問題 有多少 一看...

2019山東省賽L題題解

最後半個小時心態崩掉的時候看到了這個題,只能說兜兜轉轉都是緣分啊,愉快的敲了50行模板交上了 題意 n個數字,給出一些大小關係 給出的關係中沒有等於 對於1 x n,看是否可以構造出乙個序列a使得ax為中位數 n為奇數 思路 1 只要有環,對於所有1 x n都是不可能滿足題意的 2 考慮中位數的特殊...