暑假訓練第一周第四天

2021-10-07 22:31:07 字數 2151 閱讀 1788

題意:

a(codeforces - 1257e):三組數,按順序最多分成三組,求數字移動的最小次數。

b(codeforces - 1257c):找乙個陣列的子陣列,要求除頭尾兩數相同外,中間包含的數互不相同。

c(codeforces - 1257a):讓兩個位置的數,在指定步數內距離盡可能的大。

d(codeforces - 1257d):有 n 個怪獸和 m 個英雄,每個怪獸有乙個能力值 a,每個英雄有乙個能力值 p 和 耐力值 s。每天都要派乙個英雄去牢房裡清理怪獸,當英雄的能力值大於怪獸時才能清理掉怪獸,每清理乙個怪獸,該英雄耐力值減 1 ,當耐力值減完或者不能打敗這個怪獸時這一天便結束。問最少要花多少天才能打完所有的怪獸。

e(codeforces - 1257f ):有n個數,要求找到乙個數x,使得每個數都與x異或後,所有數的二進位制表示中的1的數量一樣

補題:a codeforces - 1257 e the contest(dp)

思路:,對問題i,j來說,若i#include

using

namespace std;

typedef

long

long ll;

const ll maxn=

2e5+5;

ll a[maxn]

,dp[maxn][4

];intmain()

for(

int i=

1;i<=n2;i++

)for

(int i=

1;i<=n3;i++

) n=n1+n2+n3;

memset

(dp,63,

sizeof dp)

; dp[0]

[1]=

0;for(

int i=

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

} cout<<

min(dp[n][1

],min(dp[n][2

],dp[n][3

]))<}b codeforces - 1257 c dominated subarray

思路:對每個「不是第一次出現」的數與它「上一次出現」的位置進行距離計算並比較取最小值。

**:

#include

#define ll long long

using

namespace std;

int t,n,a[

200010

],b[

200010

],ans;

intmain()

b[a[i]

]=i;}if

(ans==

999999999

) cout<<-1

cout<}}

d codeforces - 1257 d yet another monster killing problem(貪心)

思路:記錄每個耐力值下,英雄的最大能力值。優先選擇能力值大且耐力值大的英雄。mx[i]: 耐力值為 i 時的最大能力值。每次找最大的能力值(乙個英雄可以清的怪數)

**:

#include

#include

#include

using

namespace std;

const

int maxn =

2e5+5;

int a[maxn]

,p[maxn]

;int

main()

for(

int i=n-

1;i>

0;i--

) p[i]

=max

(p[i]

,p[i+1]

);int ans=

0,cnt=0;

while

(cntelse

} cout << ans << endl;

}return0;

}

感想:b題在題意理解上浪費了好多時間,都題目的限制條件理解的比較模糊。c題還是想用暴力解,未果,再對題目要求進一步簡化理解。f昨天原題,算是昨天印象比較深刻的題之一,思路來的比較快。d題的話貪心要求弄暈了,不知道貪心策略怎麼選比較好…

暑假訓練第一周第六天

題意 a codeforces 1249 c1 c2 找乙個最小的大於n的數,要求是3的冪次和且每個次數最多出現一次。b codeforces 1249a 一組數,如果有兩數之差為一,把他們放在兩個不同的組裡。c codeforces 1249 d1 d2 給多組線段,每乙個點的覆蓋次數不超過k,每...

訓練總結 18 7 19 暑假訓練第四天

今天上午新開的專題做了三道題,是之前做過的題。之前把思路理清了做起來還是比較順利。下午的比賽,雖然之前有心理準備,但做起來還是怪難受的。簽個到都難,最後那道題目,一開始想著預處理一下,然後直接查詢。但是怎麼找也找不到預處理的方法,大小區間之間也沒有明確的關係。後來聽別人的思路才知道可以用樹狀陣列 離...

演算法訓練第一周

leetcode 283 移動零 基礎寫法 class solution 設定指標i j 遍歷nums i 當nums i 0 即當值不為0時 nums j nums i j int j 0 for int i 0 i i 可以使i j指標同時向右移 只有當nums i 0 j才移動 造成j指標是慢...