中等困難
有個堆,有三種操作
優先佇列模擬操作
#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.其他的情況,先考...