新生訓練2

2021-10-01 23:14:54 字數 3264 閱讀 8802

***//時間匆忙,先把自己**弄上明天考完再做詳細題解和補剩下的題***

昨天組長在報告上說我題解認真,感到十分愧疚,來補題解,所以抓緊來補題解

**a.b.c

d - eat candies

讀懂題很容易理解, 先取最大的, 然後如果最大的值大於另外兩個的和, 則最大天數等於另外兩個的和, 否則取另外兩個和與最大天數差值, 除於2後加上最大值即可

#include

#include

using

namespace std;

int a, b, c;

int n;

intmain()

if(a < c)

if(a > b + c)

printf

("%d"

, b + c)

;else

printf

("%d"

, a +

(b + c - a)/2

);if(n)

printf

("\n");

}}

e-由你來決定怎麼頒獎

先把重複數量挨個計數即可, 然後讓第乙個數的數量為金牌數量, 然後開始累加大於金牌數量後為銀牌數量, 同理得到銅牌數量, 此時判斷是否總數大於一半, 符合題意後繼續加到恰好小於一半, 因為前面都是遍歷, 所以最後判斷後輸出。

當時我是邊計數邊累加, 弄得有點亂了沒做出來

#include

#include

#include

#include

using

namespace std;

int a[

1000050];

int b[

1000000];

int n;

int t;

intmain()

int sum1 = b[0]

, sum2 =

0, sum3 =0;

int p =1;

while

(sum2 <= sum1) sum2 +

= b[p ++];

while

(sum3 <= sum1) sum3 +

= b[p ++];

if(sum1 < sum2 && sum1 < sum3 && sum1 + sum2 + sum3 <= k)

else

printf

("0 0 0");

if(t)

printf

("\n");

}}

f - xorxor

理解亦或含義就能做出來了, 但是我當時沒事看博弈論的時候就是看見亦或不知道啥意思就沒看。。。

#include

#include

#include

#include

using

namespace std;

int a[

100050];

int n;

int t;

intmain()

printf

("%d\n"

, sum);}

return0;

}

g - 0011

讀完題後可以知道, 每次插入0都在1的前面, 所以從頭到尾0的數量大於等於1

#include

#include

#include

#include

using

namespace std;

bool fff;

intmain()

if(a[i]

=='0'

) sum1 ++

;else sum2 ++;if

(sum1 < sum2)}if

(fff)

printf

("no\n");

else

sum1 =0;

sum2 =0;

fff =

false;}

return0;

}

h - perfect string

先判斷有木有連續字母相同, 沒有的話直接新增字母輸出即可

#include

#include

#include

#include

using

namespace std;

bool fff;

intmain()

if(a[i]

=='?'

)else

if(i !=

0&& i == p -1)

else

if(i ==

0&& i != p -1)

else

if(i ==

0&& i == p -

1) a[i]

='a';}

}if(fff)

printf

("-1");

else

printf

("%s"

, a);if

(t)printf

("\n");

fff =

false;}

return0;

}

i - 十進位制中的二進位制

暴力打表

#include

#include

#include

#include

using

namespace std;

int a=

;int n;

int sum;

intmain()

printf

("%d\n"

, sum)

; sum =0;

}return0;

}

j - 新年快樂

梯形計算

#include

#include

#include

#include

using

namespace std;

int t;

intmain()

return0;

}

JXUST ECJTU新生訓練賽

a.此題由於字串的長度是10 5,所以利用o n 2 暴力來做的話,顯然是超時的,所以不採用這種方法,我們可以計算每個字元 出現的次數,而題目中 告訴pairs x,y and y,x should be considered different,所以組成的個數總和就是 每個字元出現的次數的乘積之和...

2021新生訓練題解02

a 思路 dp 由於每乙個點只能從該點的左側或上側到達,因此到達該點的最小花費一定在到達該點上側和左側之前產生,可得轉移方程 dp i j min dp i 1 j dp i j 1 注意特判i 1 0和 j 1 0 的情況 標程 b 思路 數學幾何 沿著柱面向上走,可將柱面展開,變成乙個矩形,兩點...

EOJ 2018 1 29新生訓練Week2

總體來說不算好做 但是確實也不難。給定正整數n,k,求f n,k ni 1ik f n k i 1 ni k,結果對19260817取模。1 n 1e7,0 k 1e9 時限0.698s 上來用拉格朗日插值法直接wa。正解其實比想象的簡單。先尤拉篩出素數,對素數用快速冪求出i k存起來。然後對合數的...