CodeM資格賽D 送外賣 題解

2021-08-02 22:02:35 字數 1096 閱讀 1666

題意

n 個小區排成一列,編號為從 0 到 n-1 。一開始,美團外賣員在第0號小區,目標為位於第 n-1 個小區的配送站。

給定兩個整數數列 a[0]~a[n-1] 和 b[0]~b[n-1] ,在每個小區 i 裡你有兩種選擇:

1) 選擇a:向前 a[i] 個小區。

2) 選擇b:向前 b[i] 個小區。

把每步的選擇寫成乙個關於字元 『a』 和 『b』 的字串。求到達小區n-1的方案中,字典序最小的字串。如果做出某個選擇時,你跳出了這n個小區的範圍,則這個選擇不合法。

• 當沒有合法的選擇序列時,輸出 「no solution!」。

• 當字典序最小的字串無限長時,輸出 「infinity!」。

• 否則,輸出這個選擇字串。

字典序定義如下:串s和串t,如果串 s 字典序比串 t 小,則

• 存在整數 i ≥ -1,使得∀j,0 ≤ j ≤ i,滿足s[j] = t[j] 且 s[i+1] < t[i+1]。

• 其中,空字元 < 『a』 < 『b』。

思路先按反向邊建圖,dfs判斷每個點與終點的連通性,然後對於從起點可以走到終點的情況,從起點貪心,如果此時按a走可以到與終點連通的點就按a走,否則就按b走,記錄每一步的走法,如果步數超過n的話就一定是迴圈了,那就是「infinity!」,否則就輸出字串即可

**

#include 

#include

using

namespace

std;

vector

edge[100001];

int a[100001],b[100001];

bool vis[100001];

char ans[100001];

bool f;

int n;

void dfs(int x)

void dfs2(int x,int step)

if(x+a[x]>=0&&x+a[x]'a';

dfs2(x+a[x],step+1);

}else

return;

}int main()

return

0;}

CodeM資格賽E 數碼 題解

題意 給定兩個整數 l 和 r 對於所有滿足1 l x r 10 9 的 x 把 x 的所有約數全部寫下來。對於每個寫下來的數,只保留最高位的那個數碼。求1 9每個數碼出現的次數。思路首先我們只需要能求出從1到x的答案,然後減就好了,對於不超過x 的數,就要在這個的最高位的計數上加x x 並記錄下x...

2018 CodeM 資格賽 下單

這道題目應該算簽到題了吧 我大概掃了一下,感覺這道題目應該是最簡單的 注 如果您現在還沒有ac,並且比賽還沒有結束,我建議再想想,認真再重新讀下題目描述,或許你就會發現原來是自己想複雜了 不管你是不是這樣的情形,反正我當時是這樣的,哈哈 程式設計 1000分 下單 時間限制 c c 1秒,其他語言 ...

CodeM資格賽第二題

小美和小團最近沉迷可樂。可供ta們選擇的可樂共有k種,比如可口可樂 零度可樂等等,每種可樂會帶給小美和小團不同的快樂程度。ta們一共要買n瓶可樂,每種可樂可以買無限多瓶,小美會隨機挑選其中的m瓶喝,剩下的n m瓶小團喝。請問應該如何購買可樂,使得小美和小團得到的快樂程度的和的期望值最大?現在請求出購...