NM-S00251(CSP-S 2024 ver.)
BpbjsGreen · · 休闲·娱乐
决斗(duel)
#include <iostream>
using namespace std;
int main(){
cout<<"不会"<<endl;
return 0;
}
超速检测(detect)
#include <bits/stdc++.h>
using namespace std;
struct FastInput {
static const int BUFSIZE = 1 << 20;
int idx, len;
char buf[BUFSIZE];
FastInput() : idx(0), len(0) {}
inline char nextChar() {
if (idx >= len) {
len = fread(buf, 1, BUFSIZE, stdin);
idx = 0;
if (len == 0) return 0;
}
return buf[idx++];
}
template <typename T>
bool read(T &out) {
char c = 0;
T sign = 1, val = 0;
c = nextChar();
if (!c) return false;
while (c != '-' && (c < '0' || c > '9')) {
c = nextChar();
if (!c) return false;
}
if (c == '-') {
sign = -1;
c = nextChar();
}
for (; c >= '0' && c <= '9'; c = nextChar())
val = val * 10 + (c - '0');
out = val * sign;
return true;
}
};
struct Interval {
int l, r;
};
const int MAXN = 100005;
int n, m, L, V;
int d[MAXN], v[MAXN], a[MAXN];
int p[MAXN];
vector<Interval> intervals;
inline long long velocitySq(int v, int a, int s) {
return 1LL * v * v + 2LL * a * s;
}
inline bool compareIntervals(const Interval &a, const Interval &b) {
if (a.r == b.r)
return a.l < b.l;
return a.r < b.r;
}
int main() {
freopen("detect.in", "r", stdin);
freopen("detect.out", "w", stdout);
FastInput in;
int T;
in.read(T);
while (T--) {
in.read(n);
in.read(m);
in.read(L);
in.read(V);
for (int i = 0; i < n; ++i) {
in.read(d[i]);
in.read(v[i]);
in.read(a[i]);
}
for (int i = 0; i < m; ++i) {
in.read(p[i]);
}
intervals.clear();
int firstAnswer = 0;
for (int i = 0; i < n; ++i) {
if (d[i] > p[m - 1]) continue;
int left = 0, right = m - 1;
while (left < right) {
int mid = (left + right) >> 1;
if (d[i] <= p[mid])
right = mid;
else
left = mid + 1;
}
int firstDetector = left;
if (a[i] >= 0) {
long long finalVelSq = velocitySq(v[i], a[i], p[m - 1] - d[i]);
if (finalVelSq <= 0 || finalVelSq <= 1LL * V * V) {
continue;
}
firstAnswer++;
left = firstDetector;
right = m - 1;
while (left < right) {
int mid = (left + right) >> 1;
long long velSq = velocitySq(v[i], a[i], p[mid] - d[i]);
if (velSq <= 0 || velSq <= 1LL * V * V)
left = mid + 1;
else
right = mid;
}
intervals.push_back({left, m - 1});
} else {
long long firstVelSq = velocitySq(v[i], a[i], p[firstDetector] - d[i]);
if (firstVelSq <= 0 || firstVelSq <= 1LL * V * V) {
continue;
}
firstAnswer++;
left = firstDetector;
right = m - 1;
while (left < right) {
int mid = (left + right + 1) >> 1;
long long velSq = velocitySq(v[i], a[i], p[mid] - d[i]);
if (velSq <= 0 || velSq <= 1LL * V * V)
right = mid - 1;
else
left = mid;
}
intervals.push_back({firstDetector, left});
}
}
sort(intervals.begin(), intervals.end(), compareIntervals);
int currentEnd = -1;
int requiredDetectors = 0;
for (const auto &interval : intervals) {
if (interval.l > currentEnd) {
currentEnd = interval.r;
requiredDetectors++;
}
}
printf("%d %d\n", firstAnswer, m - requiredDetectors);
}
return 0;
}
染色(color)
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MAXN = 1000000 + 5;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
ifstream fin("color.in");
ofstream fout("color.out");
int testCases;
fin >> testCases;
while (testCases--) {
int n;
fin >> n;
vector<ll> arr(n + 1), lastPosition(n + 1), dp(n + 1), prefixSum(n + 1);
for (int i = 1; i <= n; ++i) {
fin >> arr[i];
}
for (int i = 2; i <= n; ++i) {
if (arr[i] == arr[i - 1]) {
prefixSum[i] = prefixSum[i - 1] + arr[i];
} else {
prefixSum[i] = prefixSum[i - 1];
}
}
for (int i = 1; i <= n; ++i) {
dp[i] = dp[i - 1];
if (lastPosition[arr[i]] != 0) {
int prevPos = lastPosition[arr[i]];
ll additionalValue = arr[i] + prefixSum[i] - prefixSum[prevPos + 1];
dp[i] = max(dp[i], dp[prevPos + 1] + additionalValue);
}
lastPosition[arr[i]] = i;
}
fout << dp[n] << '\n';
}
return 0;
}
//如果你看到这里了 ,那我就可以告诉你一个“惊喜 ”
//我不知道会不会有人看这个代码,工整吧
//半个小时 才写出来的
//这个没有detect多
//我妈给我报的课我基本没上,纯跟AI学
//AI讲的可明白多了,还是1对1
//总之,看到的话不要惊讶
//昨天AI告诉我,可读的变量名可以让人读的更清楚
//我本来没打算这么写来着,但是有趣的是Deepseek严厉的批评了我
//所以特意去英语速成啦
//至于这个应该没人看见,因为是机器判题
擂台游戏(arena)
#include <bits/stdc++.h>
using namespace std;
const int MAXN = 1000000 + 5;
int A[MAXN],c[MAXN];
int main(){
ifstream fin("arena.in");
ofstream fout("arena.out");
long long n,m;
fin>>n>>m;
for(int i=0;i<n;i++){fin>>A[i];}
for(int i=0;i<m;i++){fin>>c[i];}
fout<<0<<'\n';
return 0;
}//错了这个,就不整理了
点击左上角绿色头像一口气看到大结局。
嘟嘟嘟嘟嘟,嘟嘟嘟。