NUC 2015 秋 隊內訓練賽 第一場

2021-07-05 23:06:33 字數 3971 閱讀 6861

題意:有乙個n行,m列的棋盤,在棋盤上面放置黑("b")和白("w")間隔的棋子,另外棋盤某些地方有缺損,不能放置棋子,用"-「表示。

演算法:
這裡我採用直接模擬的方式,類似於小學生練字用的字帖,我先生成乙個標準的bwbw間隔的棋盤,然後用輸入的棋盤,直接對比,如果是"."則直接輸出,標準棋盤的b

或者是w,否則輸出"-"

如圖:當我把後面乙個圖直接放在第乙個圖上面時,就是標準答案!

題意:給出n個化學元素,和m對反應關係,求把化學元素放入試管能得到的最大值,初始化為1,每發生一次反應,乘以2。

演算法:這題目,其實就是求解並查集的大小,我們把所有的並查集確定好,求出他們的大小,然後乘在一起就好了!

**:

#include #include #include #include #include #include #include #include #include #include #include #include #include #include #define ull unsigned long long

#define pi 3.1415926535

#define inf 0x3f3f3f3f

#define ll long long

#define eps 1e-8

using namespace std;

int fa[55];

int find(int num)

void union(int u, int v)

int main()

int maxn = 0;

mapm; //這裡我設定map陣列來統計一下,以某個點為父節點的元素個數

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

m[find(i)]++; //統計並查集個數

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

if (m[i] > 1)

maxn += (m[i] - 1); //計算總元素

printf("%i64d\n", (ll)pow(2, maxn)); //利用公式計算結果}}

return 0;

}

題意:給出一張hash表,構建方式為對輸入的元素求餘數。接著是從頭開始依次把hash值,對應的下角標插入bucket,如果發生下角標重合,輸出目前元素的序號,如果一直沒有發生覆蓋,輸出-1

樣例說明:
0 21 53 41 53這組對應的餘數就是0 1 3 1 3

所以當插入第4個元素41的時候,下角標為1,出現覆蓋,所以輸出4

**:

#include #include #include #include #include #include #include #include #include #include #include #include #include #include #define ull unsigned long long

#define pi 3.1415926535

#define inf 0x3f3f3f3f

#define ll long long

#define eps 1e-8

using namespace std;

const int maxn = 305;

int num[maxn];

bool vis[maxn];

int main()

int res = -1;

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

}cout << res << endl;

}return 0;

}

題意:在已知的字串中插入指定個數的字元,使得最終的字串的權值和最大。仔細想一想,其實,我只需要在26個小寫字母的權值裡面,找到最大的那個字母,始終在最後面插入,就能保證最大。因為前面的字元,不管怎麼分布,字母單個的權值不會大於我選擇的這個字母。

**:

#include #include #include #include #include #include #include #include #include #include #include #include #include #include #define ull unsigned long long

#define pi 3.1415926535

#define inf 0x3f3f3f3f

#define ll long long

#define eps 1e-8

using namespace std;

int main()

int maxn = w[0];

for(int i = 1; i < 26; ++i)

maxn = max(maxn, w[i]); //找到最大權值

ll sum = 0;

for(int i = 0; i < s.size(); ++i)

sum += ((i + 1) * w[s[i] -'a']); //利用題目中的公式計算出原字串的權值和

sum += maxn * ((s.size() + 1 + s.size() + k) * k / 2); //求解追加字串的權值和

cout << sum << endl;

}return 0;

}

題意:乙個人,有很多獎牌和獎盃,分別有1, 2, 3等獎,現在需要把他們放到類似於盒子的東西裡,為給定的盒子能不能放完。已知獎牌每個盒子最多放10個,獎盃最多放置5個。所以我們只需要先把所有的獎牌和獎盃分別加起來,然後計算一下即可!

**:

#include #include #include #include #include #include #include #include #include #include #include #include #include #include #define ull unsigned long long

#define pi 3.1415926535

#define inf 0x3f3f3f3f

#define ll long long

#define eps 1e-8

using namespace std;

int main()

return 0;

}

隊內訓練賽一

記錄乙個菜逼的成長。ps 因為備戰省賽,並沒有什麼難的演算法和資料結構。a hdu2181 哈密頓繞行世界問題 簡單的dfs,每個城市只有三條邊直接搜尋即可。include using namespace std define all v v begin v end define cl a,b me...

第一次訓練賽 B

fzu 1575 某天,無聊的小斌叫上幾個同學玩遊戲,其中有比較笨的小興,比較傻的小雪,可愛的小霞和自以為是的小楠。他們去找聰明的小明去給他們當裁判。判定誰取得遊戲勝利。而這個遊戲是由小斌想個1到10000000的數字讓大家猜,看誰先猜中。為了防止小斌作弊,小明記錄下了遊戲的整個過程。你的任務是判斷...

第一次訓練賽 E

fzu 2123 s得到乙個數,他想知道這個數每一位上的數字的孔數之和。1,2,3,5,7這幾個數字是沒有孔的,0,4,6,9都有乙個孔,8有兩個孔。input 輸入資料的第一行為乙個數t表示資料組數。接下來t行,每行輸入乙個正整數n 1 n 1000 表示要求數字孔數之和的數。n不會有前導0。ou...