17#include <unordered_map>
23 namespace acwing3378 {
24 int main(istream &cin, ostream &cout) {
28 unordered_map<student *, unsigned> index;
29 vector<student *> students(n);
30 for(
int i = 0; i < n; i++) {
32 cin >> students[i]->name >> students[i]->score;
33 if(index.find(students[i]) == index.end())
34 index[students[i]] = i;
36 sort(students.begin(), students.end(), [rule, &index](
student *a,
student *b) {
37 if(a->score == b->score) {
38 return index[a] < index[b];
41 return a->score > b->score;
43 return a->score < b->score;
46 for(
const auto &s: students) {
47 cout << s->name <<
' ' << s->score << endl;
53 namespace acwing3376 {
54 int main(istream &cin, ostream &cout) {
57 vector<student> students(n);
58 for(
int i = 0; i < n; i++) {
59 cin >> students[i].id >> students[i].score;
60 students[i].id_numeric = stoi(students[i].
id);
62 sort(students.begin(), students.end(), [](
const student &a,
const student &b) {
63 if(a.score == b.score) {
64 return a.id_numeric < b.id_numeric;
68 for(
const auto &s: students) {
69 cout << s.id <<
' ' << s.score << endl;
75 namespace acwing3374 {
76 int main(istream &cin, ostream &cout) {
84 vector<unsigned short> input = vector<unsigned short>();
85 vector<unsigned short> ans = vector<unsigned short>();
86 queue<unsigned short> quotient = queue<unsigned short>();
87 for(
auto i = x.begin(); i != x.end(); i++) {
89 input.push_back(*i -
'0');
90 }
else if(isupper(*i)) {
91 input.push_back(*i -
'A' + 10);
95 unsigned int current = 0;
96 quotient = queue<unsigned short>();
97 for(
auto i = input.begin(); i != input.end(); i++) {
100 quotient.push(current / n);
103 while(!quotient.empty() && quotient.front() == 0) {
106 ans.push_back(current);
107 input = vector<unsigned short>(quotient.size());
108 for(
unsigned int i = 0; i < input.size(); i++) {
109 input[i] = quotient.front();
112 }
while(!input.empty());
113 for(
auto i = ans.rbegin(); i != ans.rend(); i++) {
117 cout << (char) (*i - 10 +
'a');
124 namespace acwing3757 {
126 if(head == NULL || head->
next == NULL)
131 int mid = (len + 1) / 2;
133 for(
int i = 0; i < mid - 1; i++) {
160 namespace acwing3607 {
161 int main(istream &cin, ostream &cout) {
163 int day_of_month[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
164 int day_of_month_leap[13] = {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
165 int start_day_of_month[14] = {1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, INT_MAX};
166 while(cin >> year >> day) {
167 bool leap = (year % 4 == 0 && year % 100 != 0) || year % 400 == 0;
169 for(
int i = 1; i <= 12; i++) {
170 start_day_of_month[i] = start_day_of_month[i - 1] + day_of_month_leap[i - 1];
173 for(
int i = 1; i <= 12; i++) {
174 start_day_of_month[i] = start_day_of_month[i - 1] + day_of_month[i - 1];
177 cout << setw(4) << setfill(
'0') << year <<
'-';
178 for(
int i = 1; i <= 13; i++) {
179 if(start_day_of_month[i] > day) {
180 cout << setw(2) << setfill(
'0') << i - 1 <<
'-';
181 day -= start_day_of_month[i - 1];
183 cout << setw(2) << setfill(
'0') << day << endl;
187 memset(start_day_of_month, 0,
sizeof(start_day_of_month));
188 start_day_of_month[0] = 1;
189 start_day_of_month[13] = INT_MAX;
195 namespace acwing3573 {
196 int main(istream &cin, ostream &cout) {
197 int t, year, month, day, a;
198 int day_of_month[13] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
199 int day_of_month_leap[13] = {0, 31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
200 int(*day_of_month_p)[13] =
nullptr;
204 cin >> year >> month >> day >> a;
205 day_of_month_p = ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) ? &day_of_month_leap : &day_of_month;
207 while(day > (*day_of_month_p)[month]) {
208 day -= (*day_of_month_p)[month];
213 day_of_month_p = ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) ? &day_of_month_leap : &day_of_month;
216 cout << setw(4) << setfill(
'0') << year <<
'-' << setw(2) << setfill(
'0') << month <<
'-' << setw(2) << setfill(
'0') << day << endl;
222 namespace acwing3302_408 {
223 int main(istream &cin, ostream &cout) {
226 unordered_map<char, int> priority = {
231 stack<char> op = stack<char>();
232 stack<int> num = stack<int>();
233 while(!cin.eof() || !cin.fail() || !cin.bad()) {
234 if(cin.peek() == EOF)
236 if(isdigit(cin.peek())) {
243 }
else if(y ==
')') {
244 while(!op.empty() && op.top() !=
'(') {
253 }
else if(c ==
'-') {
255 }
else if(c ==
'*') {
257 }
else if(c ==
'/') {
262 }
else if(priority.find(y) != priority.end()) {
263 while(!op.empty() && op.top() !=
'(' && priority[op.top()] >= priority[y]) {
272 }
else if(c ==
'-') {
274 }
else if(c ==
'*') {
276 }
else if(c ==
'/') {
293 }
else if(c ==
'-') {
295 }
else if(c ==
'*') {
297 }
else if(c ==
'/') {
306 namespace acwing3766 {
312 if(
root ==
nullptr) {
320 return leftVal + rightVal;
324 namespace acwing148 {
325 int main(istream &cin, ostream &cout) {
326 priority_queue<int, vector<int>, greater<>> pq = priority_queue<int, vector<int>, greater<>>();
335 while(pq.size() > 1) {
348 namespace acwing836_408 {
356 root[x] = grand_parent;
362 int root_x =
find(x);
363 int root_y =
find(y);
364 if(root_x != root_y) {
367 root[root_y] = root_x;
370 root[root_x] = root_y;
375 int main(istream &cin, ostream &cout) {
378 root = vector<int>(n + 1, -1);
386 cout << (
find(a) ==
find(b) ?
"Yes" :
"No") << endl;
394 TreeNode *
rebuild(vector<int> &inorder,
int in_begin,
int in_end, vector<int> &preorder,
int pre_begin,
int pre_end) {
395 if(in_begin == in_end) {
396 return new TreeNode(inorder[in_begin]);
400 int left_in_cursor = in_begin;
401 int left_pre_cursor = pre_begin + 1;
403 if(inorder[in_begin] == preorder[pre_begin]) {
406 unordered_set<int>
left = unordered_set<int>();
407 while(inorder[left_in_cursor] != preorder[pre_begin]) {
408 left.insert(inorder[left_in_cursor]);
411 while(
left.find(preorder[left_pre_cursor]) !=
left.end()) {
414 root->
left =
rebuild(inorder, in_begin, left_in_cursor - 1, preorder, pre_begin + 1, left_pre_cursor - 1);
417 if(inorder[in_end] == preorder[pre_begin]) {
420 root->
right =
rebuild(inorder, left_in_cursor + 1, in_end, preorder, left_pre_cursor, pre_end);
427 if(preorder.empty() || inorder.empty()) {
430 return rebuild(inorder, 0, inorder.size() - 1, preorder, 0, preorder.size() - 1);
437 namespace acwing3786 {
441 int main(istream &cin, ostream &cout) {
470 else if(x < root->val)
528 namespace acwing149 {
536 int main(istream &cin, ostream &cout) {
539 priority_queue<huff_tree *, vector<huff_tree *>,
Compare> pq;
540 for(
int i = 0; i < n; i++) {
544 while((n - 1) % (k - 1)) {
548 while(pq.size() > 1) {
550 for(
int i = 0; i < k && !pq.empty(); i++) {
560 queue<pair<huff_tree *, u_int64_t>> q;
561 q.push(make_pair(
root, 0));
562 u_int64_t min_level = 0;
565 auto [ht, level] = q.front();
568 for(
int i = 0; i < k; i++) {
569 if(ht->children[i] !=
nullptr) {
571 q.push(make_pair(ht->children[i], level + 1));
575 sum += ht->
val * level;
576 min_level = max(min_level, level);
580 << min_level << endl;
588 namespace acwing831_408 {
590 vector<int> next(p.size(), 0);
591 for(
int i = 1, j = 0; i < p.size(); i++) {
592 while(j && p[i] != p[j])
601 int main(istream &cin, ostream &cout) {
604 cin >> n >> p >> m >> s;
606 for(
int i = 0, j = 0; i < m; i++) {
607 while(j && s[i] != p[j])
612 cout << i - n + 1 <<
' ';
623 namespace acwing3385 {
624 int main(istream &cin, ostream &cout) {
628 unordered_set<string> used;
629 queue<pair<string, int>> q = queue<pair<string, int>>();
630 q.push(make_pair(s, 0));
633 auto [current_s, current_step] = q.front();
634 if(current_s.find(
"2012") != string::npos) {
635 cout << current_step;
639 for(
int i = 0, j = 1; j < n; i++, j++) {
640 string next_s = current_s;
641 swap(next_s[i], next_s[j]);
642 if(used.find(next_s) == used.end()) {
644 q.push(make_pair(next_s, current_step + 1));
656 namespace acwing3429 {
657 void dfs(vector<char> &stk,
int p, ostream &cout,
string s) {
658 if(p == s.length()) {
665 for(
int i = 0; i < s.length(); i++) {
666 bool contain =
false;
667 for(
int j = 0; j < p; j++) {
675 dfs(stk, p + 1, cout, s);
680 int main(istream &cin, ostream &cout) {
683 vector<char> stk = vector<char>(s.length(), 0);
684 dfs(stk, 0, cout, s);
692 namespace acwing858_408 {
694 template<
class T1,
class T2>
695 size_t pair_hash::operator()(
const pair<T1, T2> &p)
const {
696 auto h1 = hash<T1>{}(p.first);
697 auto h2 = hash<T2>{}(p.second);
702 template<
class T1,
class T2>
703 bool pair_equal::operator()(
const pair<T1, T2> &p1,
const pair<T1, T2> &p2)
const {
704 return p1.first == p2.first && p1.second == p2.second;
708 bool tuple_compare::operator()(
const tuple<int, int, int> &t1,
const tuple<int, int, int> &t2) {
709 return get<2>(t1) > get<2>(t2);
712 int main(istream &cin, ostream &cout) {
715 unordered_set<int> mst;
717 priority_queue<tuple<int, int, int>, vector<tuple<int, int, int>>,
tuple_compare> pq;
722 if(g.find(u) == g.end()) {
725 g[u].insert(make_pair(v, w));
726 if(g.find(v) == g.end()) {
729 g[v].insert(make_pair(u, w));
731 mst.insert(g.begin()->first);
732 for(
const auto &p: g[g.begin()->first]) {
733 pq.push(make_tuple(g.begin()->first, p.first, p.second));
736 auto [u, v, w] = pq.top();
738 bool u_in = mst.find(u) != mst.end();
739 bool v_in = mst.find(v) != mst.end();
742 int to_insert = u_in ? v : u;
743 mst.insert(to_insert);
745 for(
const auto &p: g[to_insert]) {
746 if(mst.find(p.first) != mst.end() && mst.find(to_insert) != mst.end())
748 pq.push(make_tuple(to_insert, p.first, p.second));
751 if(mst.size() == n) {
754 cout <<
"impossible";
763 namespace acwing849_408 {
764 int main(istream &cin, ostream &cout) {
767 unordered_map<int, unordered_map<int, int>> g = unordered_map<int, unordered_map<int, int>>();
768 unordered_set<int> visited = unordered_set<int>();
772 if(g[x].count(y) == 0 || g[x][y] > z) {
778 auto cmp = [](pair<int, int>
left, pair<int, int>
right) {
781 priority_queue<pair<int, int>, vector<pair<int, int>>,
decltype(
cmp)> pq(
cmp);
784 auto [u, d] = pq.top();
786 if(u != 1 && (visited.find(u) != visited.end()))
793 for(
auto [v, w]: g[u]) {
794 if(visited.find(v) != visited.end())
796 pq.emplace(v, d + w);
807 namespace acwing854_408 {
808 int main(istream &cin, ostream &cout) {
811 vector<vector<int>> g = vector<vector<int>>(n + 1, vector<int>(n + 1, INT_MAX));
812 for(
int i = 1; i <= n; i++) {
818 g[x][y] = min(g[x][y], z);
820 for(
int k = 1; k <= n; k++) {
821 for(
int i = 1; i <= n; i++) {
822 for(
int j = 1; j <= n; j++) {
823 if(g[i][k] != INT_MAX && g[k][j] != INT_MAX) {
824 g[i][j] = min(g[i][j], g[i][k] + g[k][j]);
832 if(g[x][y] == INT_MAX) {
833 cout <<
"impossible" << endl;
835 cout << g[x][y] << endl;
845 namespace acwing848_408 {
846 int main(istream &cin, ostream &cout) {
850 vector<unordered_set<int>> g = vector<unordered_set<int>>(n + 1, unordered_set<int>());
851 vector<short> in = vector<short>(n + 1, 0);
855 if(g[x].
find(y) != g[x].end())
862 for(
int i = 1; i <= n; i++) {
877 for(
int i = 1; i <= n; i++) {
891 namespace acwing3402 {
892 int main(istream &cin, ostream &cout) {
895 vector<vector<int>> a(n + 1, vector<int>(m + 1, 0));
896 unordered_set<int> filled_rows = unordered_set<int>();
897 unordered_set<int> filled_cols = unordered_set<int>();
898 vector<int> row_cnt = vector<int>(n + 1, 0);
899 vector<int> col_cnt = vector<int>(m + 1, 0);
900 for(
int i = 1; i <= n; i++) {
901 for(
int j = 1; j <= m; j++) {
909 for(
int i = 1; i <= n; i++) {
910 for(
int j = 1; j <= m; j++) {
911 if(row_cnt[i] == n) {
912 filled_rows.insert(i);
914 if(col_cnt[j] == m) {
915 filled_cols.insert(j);
919 vector<vector<int>> a_cpy(a.begin(), a.end());
920 queue<pair<bool, int>> q = queue<pair<bool, int>>();
921 for(
int i = 1; i < n; i++) {
923 filled_rows.insert(i);
924 q.push(make_pair(
true, i));
927 for(
int i = 1; i < m; i++) {
929 filled_cols.insert(i);
930 q.push(make_pair(
false, i));
934 auto [is_row, index] = q.front();
939 for(
int j = 1; j <= m; j++) {
940 if(a[index][j] > 0) {
950 int d = (a[index][r] - a[index][l]) / (r - l);
951 for(
int j = 1; j <= m; j++) {
952 if(a[index][j] == 0) {
953 a[index][j] = a[index][l] + (j - l) * d;
955 if(col_cnt[j] > 1 && filled_cols.find(j) == filled_cols.end()) {
956 filled_cols.insert(j);
964 for(
int i = 1; i <= n; i++) {
965 if(a[i][index] > 0) {
975 int d = (a[r][index] - a[l][index]) / (r - l);
976 for(
int i = 1; i <= n; i++) {
977 if(a[i][index] == 0) {
978 a[i][index] = a[l][index] + (i - l) * d;
980 if(row_cnt[i] > 1 && filled_rows.find(i) == filled_rows.end()) {
981 filled_rows.insert(i);
988 for(
int i = 1; i <= n; i++) {
989 for(
int j = 1; j <= m; j++) {
990 if(a_cpy[i][j] != a[i][j]) {
991 cout << i <<
' ' << j <<
' ' << a[i][j] << endl;
1002 namespace acwing3472 {
1003 void dfs(vector<vector<bool>> board,
int current_row, vector<string> &ans, vector<int> &ans_stk) {
1004 if(current_row == 8) {
1006 for(
int i = 0; i < 8; i++) {
1007 oss << ans_stk[i] + 1;
1009 ans.push_back(oss.str());
1012 for(
int k = 0; k < 8; k++) {
1013 if(board[current_row][k]) {
1014 vector<vector<bool>> next_board = vector<vector<bool>>(board.begin(), board.end());
1015 for(
int i = 0; i < 8; i++) {
1016 for(
int j = 0; j < 8; j++) {
1017 if(i == current_row || j == k || i + j == current_row + k || i - j == current_row - k) {
1018 next_board[i][j] =
false;
1022 ans_stk.push_back(k);
1023 dfs(next_board, current_row + 1, ans, ans_stk);
1028 int main(istream &cin, ostream &cout) {
1031 vector<vector<bool>> board = vector<vector<bool>>(8, vector<bool>(8,
true));
1032 vector<string> ans = vector<string>();
1033 vector<int> ans_stk = vector<int>();
1034 dfs(board, 0, ans, ans_stk);
1037 cout << ans[b - 1] << endl;
1046 namespace acwing3439 {
1047 int main(istream &cin, ostream &cout) {
1055 if(ready && islower(c)) {
1056 cout << (char) toupper(c);
1069 namespace acwing3379 {
1070 int main(istream &cin, ostream &cout) {
1083 namespace acwing3390 {
1084 int main(istream &cin, ostream &cout) {
1087 vector<int> a_vec(a.length(), 0);
1088 vector<int> b_vec(b.length(), 0);
1089 for(
int i = 0; i < a.length(); i++) {
1090 a_vec[i] = a[i] -
'0';
1092 for(
int i = 0; i < b.length(); i++) {
1093 b_vec[i] = b[i] -
'0';
1096 for(
int i = 0; i < a.length(); i++) {
1097 for(
int j = 0; j < b.length(); j++) {
1098 sum += a_vec[i] * b_vec[j];
1109 namespace acwing3397 {
1110 int main(istream &cin, ostream &cout) {
1113 vector<map<int, int>> a = vector<map<int, int>>(m, map<int, int>());
1114 for(
int i = 0; i < n; i++) {
1115 for(
int j = 0; j < m; j++) {
1119 if(a[j].
find(x) == a[j].end()) {
1126 for(
int i = m - 1; i >= 0; i--) {
1129 for(
auto &p: a[i]) {
1130 if(p.second > max_val) {
1135 cout << max_key << endl;
1144 namespace acwing3426 {
1146 for(
int i = 1; i < candy.size(); i++) {
1147 if(candy[i] != candy[i - 1]) {
1154 int main(istream &cin, ostream &cout) {
1159 vector<int> candy = vector<int>(n);
1160 for(
int i = 0; i < n; i++) {
1164 while(!
ended(candy)) {
1165 vector<int> next_candy = vector<int>(n);
1166 for(
int i = 0; i < n; i++) {
1167 int next = (i + 1) % n;
1168 next_candy[next] = candy[next] / 2 + candy[i] / 2;
1169 if(next_candy[next] % 2) {
1176 cout << count <<
' ' << candy[0] << endl;
1185 namespace acwing3406 {
1186 int main(istream &cin, ostream &cout) {
1187 vector<task>
vec = vector<task>();
1188 string name, date, time, duration_s, line;
1190 while(getline(cin, line)) {
1191 istringstream iss(line);
1192 iss >> name >> date >> time >> duration >> duration_s;
1193 vec.push_back({name, date +
" " + time, duration, line});
1196 if(a.duration != b.duration) {
1197 return a.duration < b.duration;
1199 return a.date_time < b.date_time;
1202 for(
const auto &record:
vec) {
1203 cout << record.raw_line << endl;
1212 namespace acwing3447 {
1213 int main(istream &cin, ostream &cout) {
1218 for(
int i = 0; i < s.length(); i++) {
1219 for(
int j = 1; j <= s.length() - i; j++) {
1220 string sub = s.substr(i, j);
1221 if(m.find(sub) == m.end()) {
1228 for(
const auto &p: m) {
1230 cout << p.first <<
' ' << p.second << endl;
1240 namespace acwing3820 {
1242 unordered_set<int> s = unordered_set<int>(nums.begin(), nums.end());
1244 while(s.find(i) != s.end()) {
1254 namespace acwing840_408 {
1255 int main(istream &cin, ostream &cout) {
1256 const int N = 99991;
1257 array<list<int>,
N> ht = array<list<int>,
N>();
1264 int k = (x %
N +
N) %
N;
1267 for(
auto &i: ht[k]) {
1273 cout << (found ?
"Yes" :
"No") << endl;
1285 namespace acwing3542 {
1286 int main(istream &cin, ostream &cout) {
1289 unordered_set<int> us = unordered_set<int>();
1297 cout << (us.find(a) != us.end() ?
"YES" :
"NO") << endl;
1306 namespace acwing3581 {
1307 int main(istream &cin, ostream &cout) {
1308 map<string, int> dict = map<string, int>();
1310 while(!cin.eof() && !cin.fail() && cin.peek() != EOF) {
1313 oss << char(tolower(c));
1315 if(oss.str().empty())
1318 oss = ostringstream();
1321 if(!oss.str().empty()) {
1324 for(
const auto &[word, cnt]: dict) {
1325 cout << word <<
':' << cnt << endl;
1334 namespace acwing785_408 {
1335 void qs(vector<int> &
vec,
int l,
int r) {
1338 int pivot =
vec[(l + r) / 2];
1342 while(
vec[++lp] < pivot)
1344 while(
vec[--rp] > pivot)
1354 int main(istream &cin, ostream &cout) {
1358 for(
int i = 0; i < n; i++) {
1362 for(
int i = 0; i < n; i++) {
1363 cout <<
vec[i] <<
' ';
1372 namespace acwing3504 {
1373 int main(istream &cin, ostream &cout) {
1402 namespace acwing1603 {
1403 int main(istream &cin, ostream &cout) {
1407 for(
int i = 0; i < n; i++) {
1410 sort(
vec.begin(),
vec.end());
1414 for(
int i = 0; i < n / 2; i++) {
1417 for(
int i = n / 2; i < n; i++) {
1420 cout <<
"0 " << abs(s1 - s2);
1424 for(
int i = 0; i < n / 2; i++) {
1427 for(
int i = n / 2 + 1; i < n; i++) {
1430 int res1 = abs((s1 +
vec[n / 2]) - s2);
1431 int res2 = abs(s1 - (s2 +
vec[n / 2]));
1432 int res = max(res1, res2);
1433 cout <<
"1 " << res;
1442 namespace acwing3527 {
1443 int main(istream &cin, ostream &cout) {
1444 int matrix[3][2][2] = {
1456 vector<vector<int>>
vec[5] = {vector(n, vector<int>(n, 0)), vector(n, vector<int>(n, 0)), vector(n, vector<int>(n, 0)), vector(n, vector<int>(n, 0)), vector(n, vector<int>(n, 0))};
1457 for(
int i = 0; i < n; i++) {
1458 for(
int j = 0; j < n; j++) {
1459 cin >>
vec[0][i][j];
1461 int i2 = matrix[0][0][0] * i + matrix[0][0][1] * j;
1462 int j2 = matrix[0][1][0] * i + matrix[0][1][1] * j + n - 1;
1463 vec[1][i2][j2] =
vec[0][i][j];
1465 int i3 = matrix[1][0][0] * i + matrix[1][0][1] * j + n - 1;
1466 int j3 = matrix[1][1][0] * i + matrix[1][1][1] * j + n - 1;
1467 vec[2][i3][j3] =
vec[0][i][j];
1469 int i4 = matrix[2][0][0] * i + matrix[2][0][1] * j + n - 1;
1470 int j4 = matrix[2][1][0] * i + matrix[2][1][1] * j;
1471 vec[3][i4][j4] =
vec[0][i][j];
1474 for(
int i = 0; i < n; i++) {
1475 for(
int j = 0; j < n; j++) {
1476 cin >>
vec[4][i][j];
1480 for(
int k = 0; k < 4; k++) {
1482 for(
int i = 1; i < n; i++) {
1483 for(
int j = 0; j < n; j++) {
1484 if(
vec[k][i][j] !=
vec[4][i][j]) {
1508 namespace acwing3534 {
1509 int main(istream &cin, ostream &cout) {
1512 vector<Matrix *> mats = vector<Matrix *>(p + 1,
nullptr);
1514 for(
int i = 0; i < n; i++) {
1515 for(
int j = 0; j < n; j++) {
1516 cin >> (*mats[1])[i][j];
1520 for(
int i = 0; i < n; i++) {
1521 for(
int j = 0; j < n; j++) {
1522 cout << mat[i][j] <<
' ';
1530 if(mat[p] !=
nullptr) {
1534 for(
int i = 0; p >> i != 0; i++) {
1535 int masked = p & (1 << i);
1538 res = res *
getMat(mat, p & (1 << i));
1541 res = res * m2 * m2;
1545 mat[p] =
new Matrix(res);
1553 namespace acwing3535 {
1554 int main(istream &cin, ostream &cout) {
1557 vector<vector<int>> mat = vector<vector<int>>(6, vector<int>(6, 0));
1558 for(
int i = 1; i <= 5; i++) {
1559 for(
int j = 1; j <= 5; j++) {
1563 vector<vector<int>> ret = mat;
1564 cin >> dir >> len >> x >> y;
1565 int transform[2][2][2] = {
1572 for(
int i = x; i < x + len; i++) {
1573 for(
int j = y; j < y + len; j++) {
1576 int i2 = transform[dir][0][0] * i0 + transform[dir][0][1] * j0;
1577 int j2 = transform[dir][1][0] * i0 + transform[dir][1][1] * j0;
1585 ret[i2][j2] = mat[i][j];
1588 for(
int i = 1; i <= 5; i++) {
1589 for(
int j = 1; j <= 5; j++) {
1590 cout << ret[i][j] <<
' ';
1601 namespace acwing3874 {
1605 int64_t prev_index[4];
1607 int main(istream &cin, ostream &cout) {
1610 vector<int64_t> s1(l), s2(m), s3(n);
1611 for(
int i = 0; i < l; i++) {
1614 for(
int i = 0; i < m; i++) {
1617 for(
int i = 0; i < n; i++) {
1620 vector<point> s(l + m + n);
1621 int64_t p1 = 0, p2 = 0, p3 = 0, ps = 0, prev1 = -1, prev2 = -1, prev3 = -1;
1622 while(p1 < l || p2 < m || p3 < n || ps < l + m + n) {
1623 int64_t v1 = p1 < l ? s1[p1] : LONG_LONG_MAX;
1624 int64_t v2 = p2 < m ? s2[p2] : LONG_LONG_MAX;
1625 int64_t v3 = p3 < n ? s3[p3] : LONG_LONG_MAX;
1626 int64_t min_v = min(v1, min(v2, v3));
1628 s[ps++] = {v1, 1, {-1, prev1, prev2, prev3}};
1631 }
else if(min_v == v2) {
1632 s[ps++] = {v2, 2, {-1, prev1, prev2, prev3}};
1636 s[ps++] = {v3, 3, {-1, prev1, prev2, prev3}};
1641 int64_t last1 = l + m + n, last2 = l + m + n, last3 = l + m + n;
1642 int64_t ans = LONG_LONG_MAX;
1643 for(int64_t i = l + m + n - 1; i >= 0; i--) {
1644 if(s[i].group == 1) {
1645 if(last2 != l + m + n && s[i].prev_index[3] != -1) {
1646 ans = min(ans, 2 * (s[last2].value - s[s[i].prev_index[3]].value));
1648 if(last3 != l + m + n && s[i].prev_index[2] != -1) {
1649 ans = min(ans, 2 * (s[last3].value - s[s[i].prev_index[2]].value));
1652 }
else if(s[i].group == 2) {
1653 if(last1 != l + m + n && s[i].prev_index[3] != -1) {
1654 ans = min(ans, 2 * (s[last1].value - s[s[i].prev_index[3]].value));
1656 if(last3 != l + m + n && s[i].prev_index[1] != -1) {
1657 ans = min(ans, 2 * (s[last3].value - s[s[i].prev_index[1]].value));
1661 if(last1 != l + m + n && s[i].prev_index[2] != -1) {
1662 ans = min(ans, 2 * (s[last1].value - s[s[i].prev_index[2]].value));
1664 if(last2 != l + m + n && s[i].prev_index[1] != -1) {
1665 ans = min(ans, 2 * (s[last2].value - s[s[i].prev_index[1]].value));
1678 namespace acwing52 {
1682 for(
auto num: nums) {
1701 namespace acwing3392 {
1702 int main(istream &cin, ostream &cout) {
1703 const int limit = 10000;
1706 cin >> a[0] >> a[1] >> p >> q >> k;
1707 for(
int i = 2; i <= k; i++) {
1708 a[i % 3] = ((p * a[(i - 1 + 3) % 3]) % limit + (q * a[(i - 2 + 3) % 3]) % limit) % limit;
1710 cout << a[k % 3] % limit;
1718 namespace acwing3433 {
1719 int main(istream &cin, ostream &cout) {
1722 vector<unordered_set<string>>
vec(n + 1, unordered_set<string>());
1725 vec[2].insert(
"11");
1726 for(
int i = 3; i <= n; i++) {
1727 for(
int j = 1; j < n; j++) {
1729 auto set2 =
vec[i - j];
1730 for(
const auto &s1: set1) {
1731 for(
const auto &s2: set2) {
1732 vec[i].insert(s1 + s2);
1737 cout <<
vec[n].size();
1745 namespace acwing3441 {
1746 void draw(
const vector<vector<char>> &g,
int n,
int level, vector<vector<char>> &canvas,
int x,
int y,
int space) {
1749 for(
int i = 0; i < n; i++) {
1750 for(
int j = 0; j < n; j++) {
1751 if(!isspace(g[i][j])) {
1752 draw(g, n, level - 1, canvas, x + i * space, y + j * space, space);
1759 for(
int i = 0; i < n; i++) {
1760 for(
int j = 0; j < n; j++) {
1761 canvas[x + i][y + j] = g[i][j];
1766 int main(istream &cin, ostream &cout) {
1773 vector<vector<char>> graph = vector<vector<char>>(n, vector<char>(n,
' '));
1774 for(
int i = 0; i < n; i++) {
1775 for(
int j = 0; j < n; j++) {
1776 char ch = cin.get();
1785 int canvas_size = 1;
1786 for(
int i = 0; i < q; i++) {
1789 vector<vector<char>> canvas = vector<vector<char>>(canvas_size, vector<char>(canvas_size,
' '));
1790 draw(graph, n, q, canvas, 0, 0, canvas_size);
1791 for(
int i = 0; i < canvas_size; i++) {
1792 for(
int j = 0; j < canvas_size; j++) {
1793 cout << canvas[i][j];
1806 int main(istream &cin, ostream &cout) {
1809 vector<int> v = vector<int>(
N);
1810 vector<int> w = vector<int>(
N);
1811 vector<status> dp = vector<status>(V + 1,
status{
1813 .free = vector<bool>(
N,
true)});
1814 for(
int i = 0; i <
N; i++) {
1815 cin >> v[i] >> w[i];
1817 for(
int i = 0; i <= V; i++) {
1818 for(
int j = 0; j <
N; j++) {
1820 int next_w = dp[i].w + w[j];
1821 int next_v = i + v[j];
1822 if(next_v <= V && next_w > dp[next_v].w) {
1823 dp[next_v].w = next_w;
1824 dp[next_v].free = vector<bool>(dp[i].free);
1825 dp[next_v].free[j] =
false;
1838 namespace acwing3445 {
1839 int main(istream &cin, ostream &cout) {
1842 vector<int> p = vector<int>(n);
1843 vector<int> v = vector<int>(n);
1844 for(
int i = 0; i < n; i++) {
1845 cin >> p[i] >> v[i];
1847 vector<status> dp = vector<status>(c + 1,
status{
1849 .free = vector<bool>(n,
true)});
1851 for(
int i = 0; i <= c; i++) {
1852 for(
int j = 0; j < n; j++) {
1853 max_v = max(max_v, dp[i].v);
1855 int next_v = dp[i].v + v[j];
1856 int next_c = i + p[j];
1857 if(next_c <= c && next_v > dp[next_c].v) {
1858 dp[next_c].v = next_v;
1859 dp[next_c].free = vector<bool>(dp[i].free);
1860 dp[next_c].free[j] =
false;
1865 cout << max(max_v, dp[c].v);
1873 namespace acwing3442 {
1874 int main(istream &cin, ostream &cout) {
1878 for(
int i = 0; i < n; i++) {
1881 vector<vector<int>> dp(n + 1, vector<int>(41, 0));
1883 for(
int i = 1; i <= n; i++) {
1884 for(
int j = 0; j <= 40; j++) {
1885 dp[i][j] = dp[i - 1][j];
1887 dp[i][j] += dp[i - 1][j - a[i - 1]];
1899 namespace acwing3382 {
1900 int main(istream &cin, ostream &cout) {
1903 vector<unsigned> dp(n + 1);
1905 for(
int i = 1; i <= n; i *= 2) {
1906 for(
int j = i; j <= n; j++) {
1907 dp[j] = (dp[j] + dp[j - i]) % 1000000000;
1918 namespace acwing3389 {
1919 int main(istream &cin, ostream &cout) {
1921 unordered_map<unsigned, BigInt> cache = unordered_map<unsigned, BigInt>();
1924 for(
unsigned i = 1; i <= n; i++) {
1925 if(cache.find(i) != cache.end()) {
1932 cout << res << endl;
1941 namespace acwing3448 {
1942 int main(istream &cin, ostream &cout) {
1945 for(; a != 0 || b != 0; cin >> a >> b) {
1946 vector<unsigned short> va = vector<unsigned short>();
1947 vector<unsigned short> vb = vector<unsigned short>();
1949 va.push_back(a % 10);
1953 vb.push_back(b % 10);
1956 vector<unsigned short> res;
1957 unsigned short cnt = 0;
1958 unsigned short carry = 0;
1959 for(
size_t i = 0; i < max(va.size(), vb.size()); i++) {
1960 unsigned short sum = (i < va.size() ? va[i] : 0) + (i < vb.size() ? vb[i] : 0) + carry;
1964 ostringstream ss = ostringstream();
1966 cout << ((cnt != 0) ? ss.str() :
"No") <<
" carry operation" << ((cnt <= 1) ?
"" :
"s") <<
'.' << endl;
1975 namespace acwing3453 {
1976 int main(istream &cin, ostream &cout) {
1992 namespace acwing3380 {
1993 bool add(
unsigned long long n) {
1996 for(
unsigned long long i = 2; i * i <= n; i++)
2002 int main(istream &cin, ostream &cout) {
2003 unsigned long long n;
2005 unsigned long long k = 0;
2006 for(
unsigned long long i = 2; i * i <= n; i++) {
2023 namespace acwing3377 {
2024 int main(istream &cin, ostream &cout) {
2030 unsigned long cnt = 2;
2031 for(
unsigned long i = 2; i <= sqrt(a); i++) {
2042 cout << cnt << endl;
2051 namespace acwing3507 {
2052 int main(istream &cin, ostream &cout) {
2055 unsigned long cnt2 = 0;
2056 unsigned long cnt5 = 0;
2057 for(
unsigned long i = 2; i <= n; i *= 2) {
2060 for(
unsigned long i = 5; i <= n; i *= 5) {
2063 cout << min(cnt2, cnt5);
2071 namespace acwing3484 {
2072 int main(istream &cin, ostream &cout) {
2073 int primes[] = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47,
2074 53, 59, 61, 67, 71, 73, 79, 83, 89, 97,
2075 101, 103, 107, 109, 113, 127, 131, 137, 139, 149,
2076 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199,
2077 211, 223, 227, 229, 233, 239, 241,
2078 251, 257, 263, 269, 271, 277, 281, 283, 293,
2079 307, 311, 313, 317, 331, 337, 347, 349,
2080 353, 359, 367, 373, 379, 383, 389, 397,
2081 401, 409, 419, 421, 431, 433, 439, 443, 449,
2082 457, 461, 463, 467, 479, 487, 491, 499,
2083 503, 509, 521, 523, 541, 547,
2084 557, 563, 569, 571, 577, 587, 593, 599,
2085 601, 607, 613, 617, 619, 631, 641, 643, 647,
2086 653, 659, 661, 673, 677, 683, 691,
2087 701, 709, 719, 727, 733, 739, 743,
2088 751, 757, 761, 769, 773, 787, 797,
2089 809, 811, 821, 823, 827, 829, 839,
2090 853, 857, 859, 863, 877, 881, 883, 887,
2091 907, 911, 919, 929, 937, 941, 947,
2092 953, 967, 971, 977, 983, 991, 997};
2095 map<int, int> prime_combination_a = map<int, int>();
2096 for(
auto prime: primes) {
2097 while(a % prime == 0) {
2098 prime_combination_a[prime]++;
2102 map<int, int> prime_combination_n = map<int, int>();
2103 for(
int i = 1; i <= n; i++) {
2104 for(
const auto &[k, v]: prime_combination_a) {
2107 prime_combination_n[k]++;
2113 for(
const auto &[k, v]: prime_combination_a) {
2114 ans = min(ans, prime_combination_n[k] / v);
2116 if(ans == INT_MAX) {
int main(int argc, char **argv)
bool cmp(const pair< int, int > &a, const pair< int, int > &b)
struct acwing::acwing3378::student student
int main(istream &cin, ostream &cout)
void reverse(struct ListNode *head)
void rearrangedList(struct ListNode *head)
int pathSum(TreeNode *root, int level)
TreeNode * rebuild(vector< int > &inorder, int in_begin, int in_end, vector< int > &preorder, int pre_begin, int pre_end)
TreeNode * buildTree(vector< int > &preorder, vector< int > &inorder)
void remove(TreeNode *&root, int x)
int get_suc(TreeNode *root, int x)
int get_pre(TreeNode *root, int x)
void insert(TreeNode *&root, int x)
vector< int > get_next(string p)
void dfs(vector< vector< bool > > board, int current_row, vector< string > &ans, vector< int > &ans_stk)
bool ended(vector< int > &candy)
int findMissMin(vector< int > &nums)
void qs(vector< int > &vec, int l, int r)
Matrix getMat(vector< Matrix * > &mat, int p)
int moreThanHalfNum_Solution(vector< int > &nums)
void draw(const vector< vector< char > > &g, int n, int level, vector< vector< char > > &canvas, int x, int y, int space)
bool add(unsigned long long n)
vector< huff_tree * > children
static Matrix identity(int n)