2025.2.14——1400
1.2025.2.19——15002.11.23 周六3.11.24 周日4.11.25 周一日常5.2024.11.26 周二日常6.2024.11.27 周三7.2024.11.28周四8.2024.11.29 周五9.2024.11.30 周六10.2024.12.1 周日11.2024.12.2 周一12.2024.12.3 周二13.2024.12.4 周三14.2024.12.5 周四15.2024.12.7 周六16.2024.12.8 周日17.2024.12.9 周一18.2024.12.10 周二19.2024.12.11 周三20.2024.12.12 周四21.2024.12.13 周五22.2024.12.14 周六23.2024.12.16 周一24.2024.12.17 周二25.2024.12.18 周三26.2024.12.19 周四27.2024.12.20 周五28.2024.12.21 周六29.2024.12.22 周日30.2024.12.23 周一31.2024.12.24 周四32.2024.12.25 周三33.2024.12.26 周四34.2024.12.27 周五35.2024.12.28 周六36.2024.12.29 周日37.2024.12.30 周一38.2025.1.5——120039.2025.1.12——120040.2025.1.14——120041.2025.1.15——120042.2025.1.16——120043.2025.1.17——120044.2025.1.18——130045.2025.1.19——130046.2025.1.20——130047.2025.1.21——130048.2025.1.22——130049.2025.1.24——140050.2025.1.26——140051.2025.2.8——140052.2025.2.9——140053.2025.2.10——1400
54.2025.2.14——1400
55.2025.2.15——140056.2025.2.17——14002025.2.14——1400
A 1400
B 1400
C 1400
D 1400
E 1400
F 1400
G 1400
H 1400
------------------------------------------------
-
思维+排序/双指针/二分/队列匹配+思维+二分/位运算+思维+数学+思维
A
- 一眼想到的是维护信息计数。
- 维护两个信息同时用长的一半去找短的一半。
- 较好的思维题。
B
- 贪心匹配:优先使用最小的匹配合法最小的。
- 排序+双指针/二分/队列匹配。
C
- 出现一次,子数组也是子序列,所以不能再出现了。
- 发现边界是控制出现与否的充要条件。
D
- 从每一位考虑,最初以为
每一位都需要出现,其实不是,但可以凭借这个思路计算出区间按位与具体数的。 - 另解:今天才知道
表可以维护区间按位与、按位或值。
E
- 逆向思维+优化模拟:指针移动+找循环。
- 思维量挺多。
F
- 数学题。证明无解不太懂,限制次数过了。 洛谷题解。
G
- LCM与GCD问题,数学一下分析因子。
H
- 横向纵向分别考虑。横向可转化为纵向。
- 考虑纵向:交替发现对纵向平衡性无影响。同时对两行平衡性无影响且无后效性。
------------------------代码------------------------
A
#include <bits/stdc++.h>
#define int long long //
#define endl '\n' // attention: interactive/debug
#define el cout << endl
using namespace std;
#define bug(BUG) cout << "bug:# " << (BUG) << endl
#define bug2(BUG1, BUG2) cout << "bug:# " << (BUG1) << " " << (BUG2) << endl
#define bug3(BUG1, BUG2, BUG3) cout << "bug:# " << (BUG1) << ' ' << (BUG2) << ' ' << (BUG3) << endl
#define bugv(VEC) \
{ \
for (auto Vec : VEC) \
cout << Vec << ' '; \
el; \
}
void _();
signed main()
{
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
cout << fixed << setprecision(10);
int T = 1;
// cin >> T;
while (T--)
_();
return 0;
}
int has[6][46];
auto sum(string s, int l, int r)
{
int ans = 0;
for (int i = l; i <= r; i++)
ans += s[i] - '0';
return ans;
}
auto sum(string s)
{
int ans = 0;
for (auto v : s)
ans += v - '0';
return ans;
}
auto tar_sum(string s, int l, int r)
{
return 2 * sum(s, l, r) - sum(s);
}
void _()
{
int n;
cin >> n;
vector<string> s(n);
for (auto &v : s)
{
cin >> v;
has[v.size()][sum(v)]++;
}
int res = 0;
for (auto l : s)
{
int ln = l.size();
for (int i = 2; i <= 10; i += 2)
{
int rn = i - ln;
if (rn <= 0 || rn > ln)
continue;
int tar_r = tar_sum(l, 0, i / 2 - 1);
if (tar_r < 0)
continue;
res += has[rn][tar_r];
}
}
for (auto r : s)
{
int rn = r.size();
for (int i = 2; i <= 10; i += 2)
{
int ln = i - rn;
if (ln <= 0 || ln >= rn)
continue;
int tar_l = tar_sum(r, rn - i / 2, rn - 1);
if (tar_l < 0)
continue;
res += has[ln][tar_l];
}
}
cout << res;
}
// int has[6][46][6][46];
// void _()
// {
// memset(has, 0x3f, sizeof has);
// int n;
// cin >> n;
// // struct Node
// // {
// // /* data */
// // int len, sum, prelen, presum;
// // };
// // map<Node, int> has;
// auto get_suf = [&](string s, int suf)
// {
// int sum = 0, m = s.size();
// for (int i = m - 1; i >= m - suf; i--)
// sum += s[i] - '0';
// return sum;
// };
// auto get_pre = [&](string s, int pre)
// {
// int sum = 0, m = s.size();
// for (int i = 0; i < pre; i++)
// sum += s[i] - '0';
// return sum;
// };
// int res = 0;
// for (int i = 0; i < n; i++)
// {
// string s;
// cin >> s;
// res++;
// int m = s.size();
// for (int sum = 0; sum <= 90; sum += 2)
// for (int len = 2; len <= 10; len += 2)
// {
// int tar_sum = sum - get_pre(s, m);
// int tar_len = len - m;
// // bug3(len, m, tar_len);
// if (tar_sum < 0 || tar_len < 0 || tar_len > 5 || tar_sum > 45)
// continue;
// int half = len >> 1;
// if (m >= tar_len)
// {
// if (get_suf(s, half) << 1 == len)
// {
// for (int i = 1; i <= 5; i++)
// for (int j = 0; j <= 45; j++)
// res += has[tar_len][tar_sum][i][j];
// }
// }
// else
// {
// // bug2(tar_len, tar_sum);
// // bug2(half, tar_sum >> 1);
// res += has[tar_len][tar_sum][half][tar_sum >> 1];
// }
// }
// int sum = get_pre(s, m);
// for (int i = 0; i < m; i++)
// has[m][sum][i + 1][get_pre(s, i + 1)]++, bug(has[m + 1][sum][i][get_pre(s, i + 1)]);
// }
// cout << res;
// el;
// }
B
#include <bits/stdc++.h>
#define int long long //
#define endl '\n' // attention: interactive/debug
#define el cout << endl
using namespace std;
#define bug(BUG) cout << "bug:# " << (BUG) << endl
#define bug2(BUG1, BUG2) cout << "bug:# " << (BUG1) << " " << (BUG2) << endl
#define bug3(BUG1, BUG2, BUG3) cout << "bug:# " << (BUG1) << ' ' << (BUG2) << ' ' << (BUG3) << endl
#define bugv(VEC) \
{ \
for (auto Vec : VEC) \
cout << Vec << ' '; \
el; \
}
void _();
signed main()
{
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
cout << fixed << setprecision(10);
int T = 1;
cin >> T;
while (T--)
_();
return 0;
}
void _()
{
int n;
cin >> n;
vector<pair<int, int>> a;
for (int i = 0; i < n; i++)
{
int x;
cin >> x;
a.push_back({x, -1});
}
for (int i = 0; i < n; i++)
{
int x;
cin >> x;
a.push_back({x, 1});
}
sort(begin(a), end(a));
int res = n;
queue<int> q;
for (auto [x, y] : a)
{
if (y == -1)
q.push(x);
else
{
if (q.size() && x > q.front())
res--, q.pop();
}
}
cout << res << '\n';
}
// void _()
// {
// int n;
// cin >> n;
// vector<int> a(n), b(n);
// for (int &x : a)
// cin >> x;
// for (int &x : b)
// cin >> x;
// sort(begin(a), end(a));
// sort(begin(b), end(b));
// int l = 0, r = 0, res = n;
// for (; r < n; r++)
// if (a[l] < b[r])
// l++, res--;
// cout << res;
// el;
// }
C
#include <bits/stdc++.h>
#define int long long //
#define endl '\n' // attention: interactive/debug
#define el cout << endl
using namespace std;
#define bug(BUG) cout << "bug:# " << (BUG) << endl
#define bug2(BUG1, BUG2) cout << "bug:# " << (BUG1) << " " << (BUG2) << endl
#define bug3(BUG1, BUG2, BUG3) cout << "bug:# " << (BUG1) << ' ' << (BUG2) << ' ' << (BUG3) << endl
#define bugv(VEC) \
{ \
for (auto Vec : VEC) \
cout << Vec << ' '; \
el; \
}
void _();
signed main()
{
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
cout << fixed << setprecision(10);
int T = 1;
cin >> T;
while (T--)
_();
return 0;
}
void _()
{
int n;
cin >> n;
vector<int> a(n + 1), f(n + 1), g(n + 1);
for (int i = 1; i <= n; i++)
cin >> a[i];
map<int, bool> has;
for (int i = 1; i <= n; i++)
if (!has[a[i]])
f[i] = 1, has[a[i]] = 1;
has.clear();
for (int i = n; i; i--)
if (!has[a[i]])
g[i] = 1, has[a[i]] = 1;
int pre = 0, res = 0;
for (int i = 1; i <= n; i++)
{
pre += f[i];
res += pre * g[i];
}
cout << res;
el;
}
D
#include <bits/stdc++.h>
#define int long long //
#define endl '\n' // attention: interactive/debug
#define el cout << endl
using namespace std;
#define bug(BUG) cout << "bug:# " << (BUG) << endl
#define bug2(BUG1, BUG2) cout << "bug:# " << (BUG1) << " " << (BUG2) << endl
#define bug3(BUG1, BUG2, BUG3) cout << "bug:# " << (BUG1) << ' ' << (BUG2) << ' ' << (BUG3) << endl
#define bugv(VEC) \
{ \
for (auto Vec : VEC) \
cout << Vec << ' '; \
el; \
}
void _();
signed main()
{
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
cout << fixed << setprecision(10);
int T = 1;
cin >> T;
while (T--)
_();
return 0;
}
void _()
{
int n;
cin >> n;
vector<int> a(n + 1);
for (int i = 1; i <= n; i++)
cin >> a[i];
vector<vector<int>> pre(30, vector<int>(n + 1));
for (int i = 0; i < 30; i++)
for (int j = 1; j <= n; j++)
pre[i][j] = pre[i][j - 1] + (a[j] >> i & 1);
// ST表 RMQ 倍增
// dp[i][j] 以i为起点 长度为1<<j的区间的最大值
vector<vector<int>> dp(n + 1, vector<int>(32));
// init
for (int j = 0; j < 30; j++) // j 是每一层状态
for (int i = 1; i <= n; i++)
{
if (i + (1 << j) - 1 > n)
continue;
if (!j)
dp[i][j] = a[i];
else
dp[i][j] = dp[i][j - 1] & dp[i + (1 << j - 1)][j - 1];
}
// query
auto ask = [&](int l, int r)
{
int k = __lg(r - l + 1);
return dp[l][k] & dp[r + 1 - (1 << k)][k];
};
auto ok = [&](int l, int r, int k)
{
// int ans = 0;
// for (int i = 0; i < 30; i++)
// {
// if (pre[i][r] - pre[i][l - 1] == (r - l + 1))
// ans += 1ll << i;
// }
// return ans >= k;
return ask(l, r) >= k; // ST表只需这一句
};
// bug(ok(1, 1, 7));
// bug(ok(1, 2, 7));
int q;
cin >> q;
while (q--)
{
int L, k;
cin >> L >> k;
int l = L - 1, r = n + 1;
while (r - l - 1)
{
int R = l + r >> 1;
if (ok(L, R, k))
l = R;
else
r = R;
}
// bug2(l, r);
cout << (l < L ? -1 : l) << ' ';
}
el;
}
E
#include <bits/stdc++.h>
#define int long long //
#define endl '\n' // attention: interactive/debug
#define el cout << endl
using namespace std;
#define bug(BUG) cout << "bug:# " << (BUG) << endl
#define bug2(BUG1, BUG2) cout << "bug:# " << (BUG1) << " " << (BUG2) << endl
#define bug3(BUG1, BUG2, BUG3) cout << "bug:# " << (BUG1) << ' ' << (BUG2) << ' ' << (BUG3) << endl
#define bugv(VEC) \
{ \
for (auto Vec : VEC) \
cout << Vec << ' '; \
el; \
}
void _();
signed main()
{
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
cout << fixed << setprecision(10);
int T = 1;
cin >> T;
while (T--)
_();
return 0;
}
void _()
{
int n, k;
cin >> n >> k;
vector<int> a(n + 1);
for (int i = 1; i <= n; i++)
cin >> a[i];
int f = n;
vector<int> vis(n + 1);
while (k--)
{
if (a[f] > n)
{
cout << "No";
el;
return;
}
vis[f] = 1;
f = (f - a[f] + n) % n;
if (vis[f])
break;
}
// k %= cnt;
// while (k--)
// f = a[f];
// for (int i = f + 1; i <= n; i++)
// cout << a[i] << ' ';
// for (int i = 1; i <= f; i++)
// cout << a[i] << ' ';
cout << "Yes";
el;
}
F
#include <bits/stdc++.h>
#define int long long //
#define endl '\n' // attention: interactive/debug
#define el cout << endl
using namespace std;
#define bug(BUG) cout << "bug:# " << (BUG) << endl
#define bug2(BUG1, BUG2) cout << "bug:# " << (BUG1) << " " << (BUG2) << endl
#define bug3(BUG1, BUG2, BUG3) cout << "bug:# " << (BUG1) << ' ' << (BUG2) << ' ' << (BUG3) << endl
#define bugv(VEC) \
{ \
for (auto Vec : VEC) \
cout << Vec << ' '; \
el; \
}
void _();
signed main()
{
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
cout << fixed << setprecision(10);
int T = 1;
cin >> T;
while (T--)
_();
return 0;
}
void _()
{
int n, m;
cin >> n >> m;
n % m;
int cnt = 100, res = 0;
while (cnt--)
{
if (n % m == 0)
{
cout << res;
el;
return;
}
while (n < m)
{
res += n;
n <<= 1;
}
n %= m;
}
cout << -1;
el;
}
G
#include <bits/stdc++.h>
#define int long long //
#define endl '\n' // attention: interactive/debug
#define el cout << endl
using namespace std;
#define bug(BUG) cout << "bug:# " << (BUG) << endl
#define bug2(BUG1, BUG2) cout << "bug:# " << (BUG1) << " " << (BUG2) << endl
#define bug3(BUG1, BUG2, BUG3) cout << "bug:# " << (BUG1) << ' ' << (BUG2) << ' ' << (BUG3) << endl
#define bugv(VEC) \
{ \
for (auto Vec : VEC) \
cout << Vec << ' '; \
el; \
}
void _();
signed main()
{
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
cout << fixed << setprecision(10);
int T = 1;
// cin >> T;
while (T--)
_();
return 0;
}
void _()
{
int n, m;
cin >> n;
vector<int> t(n);
map<int, int> a, b;
for (int &x : t)
cin >> x;
for (int i = 0; i < n; i++)
{
int x;
cin >> x;
a[t[i]] = x;
}
cin >> m;
t.assign(m, 0);
for (int &x : t)
cin >> x;
for (int i = 0; i < m; i++)
{
int x;
cin >> x;
b[t[i]] = x;
}
constexpr int mod = 998244353;
int res = 1;
for (auto [x, y] : b)
if (a[x] < y)
res = 0;
for (auto [x, y] : a)
res *= y > b[x] ? 2 : 1, res %= mod;
cout << res;
el;
}
H
#include <bits/stdc++.h>
#define int long long //
#define endl '\n' // attention: interactive/debug
#define el cout << endl
using namespace std;
#define bug(BUG) cout << "bug:# " << (BUG) << endl
#define bug2(BUG1, BUG2) cout << "bug:# " << (BUG1) << " " << (BUG2) << endl
#define bug3(BUG1, BUG2, BUG3) cout << "bug:# " << (BUG1) << ' ' << (BUG2) << ' ' << (BUG3) << endl
#define bugv(VEC) \
{ \
for (auto Vec : VEC) \
cout << Vec << ' '; \
el; \
}
void _();
signed main()
{
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
cout << fixed << setprecision(10);
int T = 1;
cin >> T;
while (T--)
_();
return 0;
}
void _()
{
int n, m;
cin >> n >> m;
vector<string> s(n + 1);
for (int i = 1; i <= n; i++)
cin >> s[i], s[i] = ' ' + s[i];
vector<vector<int>> f(n + 1, vector<int>(m + 1));
bool fail = 0;
for (int i = 1; i <= n; i++)
{
int ans = 1;
for (int j = 1; j <= m; j++)
if (s[i][j] == 'U')
f[i][j] = ans, ans = -ans, f[i + 1][j] = ans;
}
for (int j = 1; j <= m; j++)
{
int ans = 1;
for (int i = 1; i <= n; i++)
if (s[i][j] == 'L')
f[i][j] = ans, ans = -ans, f[i][j + 1] = ans;
}
for (int i = 1; i <= n; i++)
{
int sum_row = 0;
for (int j = 1; j <= m; j++)
sum_row += f[i][j];
if (sum_row)
fail = 1;
}
for (int j = 1; j <= m; j++)
{
int sum_col = 0;
for (int i = 1; i <= n; i++)
sum_col += f[i][j];
if (sum_col)
fail = 1;
}
if (fail)
{
cout << -1 << '\n';
return;
}
for (int i = 1; i <= n; i++)
{
for (int j = 1; j <= m; j++)
{
if (f[i][j])
cout << (f[i][j] == 1 ? 'W' : 'B');
else
cout << '.';
}
cout << '\n';
}
}
// void _()
// {
// int n, m;
// cin >> n >> m;
// vector<string> s(n + 1);
// for (int i = 1; i <= n; i++)
// cin >> s[i], s[i] = ' ' + s[i];
// vector<vector<int>> f(n + 1, vector<int>(m + 1));
// bool fail = 0;
// for (int i = 1; i <= n; i++)
// {
// int sum_row = 0;
// for (int j = 1; j <= m; j++)
// {
// if (s[i][j] - '.')
// f[i][j] = i + j & 1 ? 1 : -1;
// sum_row += f[i][j];
// }
// if (sum_row)
// fail = 1;
// }
// for (int j = 1; j <= m; j++)
// {
// int sum_col = 0;
// for (int i = 1; i <= n; i++)
// sum_col += f[i][j];
// if (sum_col)
// fail = 1;
// }
// if (fail)
// {
// cout << -1 << '\n';
// return;
// }
// for (int i = 1; i <= n; i++)
// {
// for (int j = 1; j <= m; j++)
// {
// if (f[i][j])
// cout << (f[i][j] == 1 ? 'W' : 'B');
// else
// cout << '.';
// }
// cout << '\n';
// }
// }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!