Codeforces Round #765 (Div. 2)
A.题意:给定n个数然后转换成m位的二进制数,然后找出一个最小的数使这个数和每个数的二进制位上不同位的位数最小
思路:遍历m位,1多则ans该位为1,否则为0

#include <bits/stdc++.h> using namespace std; typedef long long ll; const int N = 1e2 + 5; int one[N]; int zero[N]; int main() { int T; cin >> T; while (T--) { memset(one, 0, sizeof one); memset(zero, 0, sizeof zero); int n, l; cin >> n >> l; int ans = 0; for (int i = 0; i < n; i++) { int t; cin >> t; for (int j = 0; j <= 30; j++) { if ((t >> j) & 1) { one[j]++; } else { zero[j]++; } } } for (int i = 0; i < l; i++) { if (one[i] > zero[i]) { ans += (1 << i); } } cout << ans << endl; } return 0; }
B.题意:在一串数字中,找两个等长的连续子串(不能起始下标一致),如果无法找到则输出-1,能则输出最大长度.
思路:设两个相同的数字先后出现的下标分别为a,b那么他们之间的长度为n-b+a;

#include <bits/stdc++.h> using namespace std; typedef long long ll; const int N = 150000+10; int a[N]; int vis[N]; int main() { int T; cin >> T; while (T--) { int f = 0; int n; cin >> n; int ans = -1; memset(vis, -1, sizeof(vis)); memset(a, 0, sizeof(a)); for (int i = 0; i < n; i++) { cin >> a[i]; if (vis[a[i]]!=-1) { int b = vis[a[i]]; ans = max(ans, n + b - i); } vis[a[i]] = i; } cout << ans << endl; } return 0; }
C.题意:长为l的直线距离,一开始有n个路牌,路牌上的值乘以下一段的长度就是下一段的时间,现在最多可以移走k个路牌,问从0走到l的最小时间
思路:dp[i][j]表示到第i个路牌移走了j个路牌,枚举小于i的所有站点j,拿走j到i之间所有的车牌(j到i之间的路牌个数为j-i-1),可以实现状态的全覆盖,需要判断可拿走车牌的数量k
要大于i-j-1
状态转移方程:f[i][k]=min(f[i][k],f[j][k-(i-j-1)]+v[j]*(d[i]-d[j]))

#include <bits/stdc++.h> using namespace std; typedef long long ll; const int N = 510; int n, l, m; int d[N]; int v[N]; int dp[N][N]; int main() { memset(dp, 0x3f, sizeof dp); cin >> n >> l >> m; for (int i = 1; i <= n; i++) cin >> d[i]; for (int i = 1; i <= n; i++) cin >> v[i]; n++; d[n] = l; for (int i = 0; i <= m; i++) { dp[1][i] = 0;//第一个路牌不能动 } for (int i = 2; i <= n; i++) { for (int j = 1; j < i; j++) { for (int k = i - j - 1; k <= m; k++) { dp[i][k]=min(dp[i][k],dp[j][k-(i-j-1)]+v[j]*(d[i]-d[j])); } } } cout<<dp[n][m]<<endl; return 0; }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期
· 全程使用 AI 从 0 到 1 写了个小工具
· 从文本到图像:SSE 如何助力 AI 内容实时呈现?(Typescript篇)