CDZSC 2022寒假個人訓練賽21級 6 題解

2022-09-20 12:30:14 字數 3451 閱讀 1502

中等困難

有個堆,有三種操作

優先佇列模擬操作

#include#include#include#include#include#include#include#include#include#include#include#include#include#includeusing namespace std;

typedef long long ll;

typedef unsigned long long ull;

typedef pairpii;

typedef pairpll;

const ll n = 2e5 + 5;

const ll mod = 2017;

const ll inf = 0x3f3f3f3f;

const ll inf64 = 0x3f3f3f3f3f3f3f3f;

const double gold = (1 + sqrt(5)) / 2.0;

const double pi = acos(-1);

const double eps = 1e-8;

ll gcd(ll a, ll b)

ll pow(ll x, ll y, ll mod) return ans; }

ll pow(ll x, ll y) return ans; }

ll inv(ll x)

priority_queue,greater>pq;

char com[100005][10];

int s[100005];

string p;

int main()

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

else if (com[i][0] == 'r')

else

} else

if (pq.empty() || pq.top() != s[i])

} p += com[i];

p+=' ';

if (com[i][0] != 'r')p += to_string(s[i]);

p += '\n'; }

cout<< m <<'\n'<< p;

return 0;

}

題意:

兩個人正在圍繞著乙個僅有小寫字母組成的字串 s玩乙個遊戲

在乙個玩家的回合, 他必須選擇字串中的兩個相鄰並且相同字母刪除。

例如, 如果當前字串是 「xaax」 那麼就只有一種可能,刪除 「aa」, 所以字串將變為 「xx」。兩個人都想贏。

現在需要你求出最後誰會贏如果兩人都選擇最優策略。

容易知道刪除字元的順序不影響總刪除次數,所以實際上對於乙個特定的字串,刪除次數是固定不變的,因此我們只要求出總次數然後判斷奇偶性就好,判斷使用棧判斷,其他方法也行,棧比較方便。

char s[100005];

char st[100005];

int main()

else

else

} }printf("%s\n",ans%2?"yes":"no");

return 0;

}

將給定數拆分成多個數的組合,使種類盡量少。

資料很小全部拆成1就好

int main()

printf("\n");

return 0;

}

九宮格問題,也叫數獨問題。把乙個9行9列的網格,再細分為9個3*3的子網格,要求每行、每列、每個子網格內都只能使用一次1~9中的乙個數字,即每行、每列、每個子網格內都不允許出現相同的數字。0是待填位置,其他均為已填入的數字。要求填完九宮格並輸出(如果有多種結果,則只需輸出其中一種)。如果給定的九宮格無法按要求填出來,則輸出原來所輸入的未填的九宮格。

經典dfs問題,直接搜尋容易超時,要一定程度的優化,使用bh[i][x]判斷第i行的x有無出現過;使用bl[i][x]判斷第i列的x有無出現過;使用bk[i][x]判斷第i塊的x有無出現過。

#include#includeusing namespace std;

int n = 0;

int f[11][11];

int bh[11][11], bl[11][11], bk[11][11];

int flag;

struct point ;

point l[82];

int judge(int x, int y)

void dfs(int num)

flag = 1;

return;

} int x = l[num].x, y = l[num].y;

int k = judge(l[num].x, l[num].y);

for (int i = 1; i <= 9; i++) }}

int main() ;

else

}dfs(0);

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

for (int j = 0; j < 11; j++)

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

} return 0;

}

均分紙牌

經典貪心問題,求出平均數也就是最終狀態,然後遞推一遍算次數就好。

int s[102];

int main()

sum /= n;

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

printf("%d\n", ans);

return 0;

}

從給定的操作中選擇一些,問你能否達到終點。

統計下各種操作個數,然後比較下大小就好。

char s[n];

int main()

if (py <= u && py >= -d && px <= r && px >= -l)

printf("yes\n");

else printf("no\n");

}

return 0;

}

給出 n 個問題的難度以及可以解決問題的能力 k,每次只能從問題列表的左邊或右邊解決問題,如果問題難度高於 k,其後或其前的問題就無法解決,求最多可以解決多少問題。

分別從右向左、從左向右列舉,注意如果 k 大於所有問題的難度,即解決的問題數為2倍的給出問題數,直接輸出問題數即可。

nt s[105];

int main()

ans++;

} for (int i = n-1; i>=0; i--)

ans++;

} if (ans > n)ans /= 2;

printf("%d\n", ans);

return 0;

}

CDZSC 2022寒假個人訓練賽21級 3 題解

簽到題其實是cef,中等題是abdh,g 很簡單只不過某種意義上很難。公告也寫了,不會就跳,不要在一題上死磕。給你乙個長度為 n 的由 1 和 1 組成的陣列和間隔距離k,選乙個位置 b 每隔 k 個刪除乙個,問你在不同的初始位置 b 的選擇中,最後這個陣列的總和的絕對值最大。模擬,資料範圍很小,兩...

寒假訓練1 17訓練賽J

題目大意 有n個孩子 編號號1 n 3 n 2 10 5 手拉手圍成乙個圈。按順時針方向 給出編號為i的孩子的後面兩個孩子的編號ai1,ai2 但你不清楚i後面乙個孩子的編號是ai1還是ai2 求這個圈的孩子編號的順序 以任意孩子開頭輸出一種即可 解題思路 將給出的ai1與ai2相連可以得到這個環,...

2016 1 26寒假訓練賽1

2016.1.26寒假訓練賽1 a a mathematical curiosity 按照題意,暴力列舉過去,統計結果即可 b tempter of the bone 搜尋入門題目,按最簡單的方式寫即可 c r n 1.特殊處理a和b中有乙個為0的情況,如果成立的話,結果增加4 2.其他的情況,先考...