2013騰訊程式設計馬拉松初賽(3月24日)

2021-09-06 11:35:40 字數 4209 閱讀 4311

1 題目一 小q系列故事——最佳裁判

這道題就是找最大值和最小值的題目,學過c的應該都沒問題的。

2 題目二 小明系列問題——小明序列

這道題目是最長上公升子串行的一種變形吧,就是子串行中相鄰數的下標之差必須大於d(開始看錯題目,以為是相鄰數之差大於d,結果wa了好多次,最後看了別人的discuss才恍然大悟啊!)。用二分查詢在子串行中要替換的位置,注意在處理第i個數時,才更新第i-d個數在子串行中的位置就行了,而不是原來更新第i個數在子串行中的位置。

1 #include 2

3#define inifite 100000000

4int

n, d ;

5int data[100005];6

int stack[100005];7

int dp[100005];8

inttop;910

int find(int x, int

len)

1122

return

left;23}

24int main(void)25

44 ans = 0;45

for (i = 0; i < n; i ++)

46if (dp[i] >ans)

47 ans =dp[i];

48 printf("

%d\n

", ans + 1

);49}50

return0;

51 }

3 題目三 湫湫系列故事——過年回家

這道題目初看沒什麼頭緒,後來認真分析發現其實就是一道求單源最短路徑的問題,只是要求兩次,一次是坐臥鋪的,一次是做硬座的,求最小不適應度。

1 #include 2 #include 

3 #include 4

5#define infinite 4000000

6int

q, n, t, d1, d2, a, b;

7int position[201][201];8

int k[205][205][2];9

int path[10005

];10

char strdata[10005

];11

int ans[205

];12

1314

intget_path()

1531

else

32 node[count ++] =strdata[i];

33 i ++;34}

35 node[count] = 0

;36 path[pathlen ++] =atoi(node);

37return

pathlen;38}

39void dijkstra(int

s)40

48 flag[s] = 1

;49 ans[i] = 0;50

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

5159

if (infinite ==min)

60break

;61 flag[k] = 1;62

for (j = 1; j <= n; j ++)

63if (!flag[j] && ans[k] + position[k][j] 64 ans[j] = ans[k] +position[k][j];65}

66}67int main(void)68

83 scanf("

%d%d

", &d1, &d2);

84 scanf("

%d%d

", &a, &b);

8586

//坐臥鋪

87for (ii = 1; ii <= n; ii ++)

88for (j = 1; j <= n; j ++)

89if (1 == k[ii][j][1

])90 position[ii][j] =d2;

91else

92 position[ii][j] =infinite;

93dijkstra(a);

94 temp =ans[b];

95 memset(position, infinite, sizeof

(position));

96//

坐臥鋪97

for (ii = 1; ii <= n; ii ++)

98for (j = 1; j <= n; j ++)

99if (1 == k[ii][j][0] || 1 == k[ii][j][1

])100 position[ii][j] =d1;

101else

102 position[ii][j] =infinite;

103dijkstra(a);

104if (temp >ans[b])

105 temp =ans[b];

106if (infinite ==temp)

107 printf("

-1\n");

108else

109 printf("

%d\n

", temp);

110}

111return0;

112 }

4 題目四  威威貓系列故事——過生日

這道題只要滿足n + p >= m,n表示切前的多邊形的邊數,p表示切的刀數,m表示要切成的多邊形的邊數。但由於n,m,p要滿足下列條件:

3 <= n <= 10^100

0 < m <= 10^100

0 <= p <= 10^100

所以這道題實際是乙個大整數加減法的問題。

1 #include 2 #include 34

char n[102], m[102], p[102];5

int ni[103], mi[103], pi[103];6

7int main(void)8

28 lenp =strlen(p);

29for (i = lenp - 1; i >= 0; i --)

30 pi[(lenp - 1) - i] = p[i] - '0'

;31if (lenn >maxlen)

32 maxlen =lenn;

33if (lenp >maxlen)

34 maxlen =lenp;

35for (i = 0; i < maxlen; i ++)

3641

if(ni[i])

42 maxlen ++;

43if (lenm >maxlen)

44 printf("

no\n");

45else

if (lenm 4652

else

5363

else

if (ni[i] 6468

if (i < 0

)69 printf("

yes\n");

70}71}

72return0;

73 }

5 題目五 鄭廠長系列故事——逃離迷宮

這道題目直接用模擬,從左到右依次消掉箱子,如果不能消完,就失敗了,否則就成功。

1 #include 2

3long data[1000001];4

int main(void)5

23if (j <= n - 1 || data[n] != 0

)24 printf("

i will never go out t_t\n");

25else

26 printf("

yeah~ i escaped ^_^\n");

27}28return0;

29 }

2013騰訊程式設計馬拉松初賽(3月20日)

1 第一題 小q系列故事 屌絲的逆襲 表示這道題基本沒什麼演算法,學過計算機語言的應該都能搞定吧。2 第二題 小明系列故事 買年貨 這道題直接用01揹包問題就可以解決了,只是除了錢的限制,還有積分的限制和免費的情況,就是這點在除錯程式的時候出了點小問題,總是wa。狀態可以定義為dp x y z x表...

2013騰訊馬拉松程式設計初賽3月21日1001

1001 小q 系列故事 電梯裡的愛情 time limit 0.1seconds memory limit 65536k 電梯其實是個很曖昧的地方,只有在電梯裡,小q才有勇氣如此近距離接近女神,雖然覺得有點不自在,但次數多了,女神也習慣了小 的存在,甚至熟悉到彷彿不說上句話自己也都覺得不合適了。可...

2013騰訊程式設計馬拉松初賽 鄭廠長系列故事 體檢

鄭廠長系列故事 體檢 time limit 1.0 seconds memory limit 32768k 鄭廠長不是正廠長 也不是副廠長 他根本就不是廠長 只是公司的乙個碼農 這次總共有n位員工接受體檢,並且每個員工都需要做k 個專案的檢查才算完成整個體檢的流程。現在來了 m個醫生為員工做身體檢查...