藍橋杯 2023年第九屆真題 防禦力

2021-10-24 04:19:01 字數 3394 閱讀 8911

還有兩題放在最後寫,不是說它難,而是它有問題。基本可以確定防禦力是錯了,答案沒有按照字典序排序。然後去知乎翻了一波往年的評價,發現那次比賽有三次勘誤,可能包括這個(因為也沒有人提到)。採油這題無意中發現有人說了做法,但是其實是有缺陷的,雖然可以過藍橋杯的資料,但是構造了一組樣例把它hack了。所以可能是資料比較弱。也可能是我太菜了,沒理解到題目意思。暫時沒有想到比較好的方法過這題,先放個防禦力的題解。

題目描述

小明最近在玩一款遊戲。對遊戲中的防禦力很感興趣。

我們認為直接影響防禦的引數為「防禦效能」,記作d,而面板上有兩個防禦值a和b,與d成對數關係,a=2

d,b=

3d

a=2^d,b=3^d

a=2d,b

=3d(注意任何時候上式都成立)。

在遊戲過程中,可能有一些道具把防禦值a增加乙個值,有另一些道具把防禦值b增加乙個值。

現在小明身上有n1個道具增加a的值和n2個道具增加b的值,增加量已知。

現在已知第i次使用的道具是增加a還是增加b的值,但具體使用那個道具是不確定的,請找到乙個字典序最小的使用道具的方式,使得最終的防禦效能最大。

初始時防禦效能為0,即d=0,所以a=b=1。

輸入

輸入的第一行包含兩個數n1,n2,空格分隔。

第二行n1個數,表示增加a值的那些道具的增加量。

第三行n2個數,表示增加b值的那些道具的增加量。

第四行乙個長度為n1+n2的字串,由0和1組成,表示道具的使用順序。0表示使用增加a值的道具,1表示使用增加b值的道具。輸入資料保證恰好有n1個0,n2個1。

輸出

對於每組資料,輸出n1+n2+1行,前n1+n2行按順序輸出道具的使用情況,若使用增加a值的道具,輸出ax,x為道具在該類道具中的編號(從1開始)。若使用增加b值的道具則輸出bx。最後一行輸出乙個大寫字母e。

樣例輸入

1 24

2 8101

樣例輸出

b2a1b1e

思路

這種題目很顯然是貪心題。然後樣例給了乙個提示,b類道具從大到小使用。那麼我們再看看a類道具的順序,證了半天,發現很不好算,所以就不放了。(其實是沒有化出來,不想寫了) 最簡單的方法就是帶幾個數字進去,發現a類道具從小到大使用結果更大。貪心題吧,你要證出來確實要花很多功夫。但是要是舉幾個例子來判斷這樣對不對還是很好做的。

然後你就得到了理論正確,但是過不了的**。然後去網上找了一番之後發現有人是用不排序寫的,我也挺納悶的,題目明明說了要按字典序排序,所以我覺得可能是比賽的時侯勘誤了,不然一般人也不會這樣寫。

放個可以ac的**。

#

include

using

namespace std;

typedef

long

long ll;

const

int inf =

0x3f3f3f3f

;const

double pi =

acos(-

1);namespace}#

define

fioios::

sync_with_stdio

(false

);cin.

tie(0)

;cout.

tie(0)

;#define

_for

(n,m,i)

for(

register

int i =

(n); i <

(m);

++i)

#define

_rep

(n,m,i)

for(

register

int i =

(n); i <=

(m);

++i)

#define

_srep

(n,m,i)

for(

register

int i =

(n); i >=

(m); i--)#

define

_sfor

(n,m,i)

for(

register

int i =

(n); i >

(m); i--)#

define

lson

rt <<

1, l, mid

#define

rson

rt <<1|

1, mid +

1, r

#define

lowbit

(x) x &

(-x)

#define

piipair<

int,

int>

#define

fifirst

#define

sesecond

const

int n =

2e6+5;

struct

node

}e[2

][n]

;int a[2]

;string s;

vector<

int> ve;

intmain()

_rep(1

, m, i)

sort

(e[0]+

1, e[0]

+ n +1)

;sort

(e[1]+

1, e[1]

+ m +1)

; a[0]

= a[1]

=1; cin >> s;

assert

(s.size()

== n + m)

; ve.

push_back

(e[s[0]

-'0'

][a[s[0]

-'0']++

].id)

;for

(int i =

1; i < n + m; i++

)else ve.

push_back

(e[k]

[a[k]++]

.id);}

//sort(ve.begin(), ve.end());

for(

auto it : ve)

printf

("%c%d\n"

,"ab"

[s[s.

size()

-1]-

'0']

, it)

;printf

("e\n");

}

藍橋杯 2023年第九屆真題 全球變暖

你有一張某海域nxn畫素的 表示海洋 表示陸地,如下所示 其中 上下左右 四個方向上連在一起的一片陸地組成一座島嶼。例如上圖就有2座島嶼。由於全球變暖導致了海面上公升,科學家 未來幾十年,島嶼邊緣乙個畫素的範圍會被海水淹沒。具體來說如果一塊陸地畫素與海洋相鄰 上下左右四個相鄰畫素中有海洋 它就會被淹...

藍橋杯 2023年第九屆真題 搭積木

藍橋杯 2018年第九屆真題 搭積木 小明對搭積木非常感興趣。他的積木都是同樣大小的正立方體。在搭積木時,小明選取 m 塊積木作為地基,將他們在桌子上一字排開,中間不留空隙,並稱其為第0層。隨後,小明可以在上面擺放第1層,第2層,最多擺放至第n層。擺放積木必須遵循三條規則 其中,小明不喜歡的位置都被...

藍橋杯 2023年第九屆真題 全球變暖 廣搜

你有一張某海域nxn畫素的 表示海洋 表示陸地,如下所示 其中 上下左右 四個方向上連在一起的一片陸地組成一座島嶼。例如上圖就有2座島嶼。由於全球變暖導致了海面上公升,科學家 未來幾十年,島嶼邊緣乙個畫素的範圍會被海水淹沒。具體來說如果一塊陸地畫素與海洋相鄰 上下左右四個相鄰畫素中有海洋 它就會被淹...