暑期cspj模拟赛8
已结束
ACM/ICPC
开始于: 2025-8-20 17:30
24
小时
主持人:
8
暑期cspj模拟赛8
#T1
过于简单,直接代码
#include<bits/stdc++.h>
using namespace std;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int n;
cin >> n;
vector<long long> a(n);
for (int i = 0; i < n; ++i) {
cin >> a[i];
}
sort(a.begin(), a.end());
long long ans = 0;
for (int i = 0; i < n; i += 3) {
// 每组的最大值是 a[i+2],最小值是 a[i]
ans += a[i + 2] - a[i];
}
cout << ans << endl;
return 0;
}
#T2
#include<bits/stdc++.h>
using namespace std;
int main() {
int T;
cin >> T;
while (T--) {
string s1, s2;
cin >> s1 >> s2;
int s = 0;
string re1;
string re2;
for (int i = 0; i < s1.size(); i++) {
if(s1[i] == 'S') {
s++;
}else {
if (re1.size() && re1.back() == s1[i]) {
re1.pop_back();
}else {
re1.push_back(s1[i]);
}
}
}
for (int i = 0; i < s2.size(); i++) {
if(s2[i] == 'S') {
s--;
}else {
if (re2.size() && re2.back() == s2[i]) {
re2.pop_back();
}else {
re2.push_back(s2[i]);
}
}
}
if (s %2 == 0 && re1 == re2) {
cout << "Yes" << endl;
}else {
cout << "No" << endl;
}
}
return 0;
}
#T3
#include<bits/stdc++.h>
using namespace std;
int a[1000010];
long long dp[1000010][3];
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
// freopen("input.txt", "r", stdin);
int n, k;
cin >> n >> k;
for (int i = 1; i <= n; ++i) {
cin >> a[i];
}
// 初始化(处理第一个元素)
dp[1][0] = a[1]; // 未异或,以1结尾的最大子段和
dp[1][1] = (a[1] ^ k); // 正在异或区间,以1结尾的最大子段和
dp[1][2] = 0; // 已结束异或区间(不可能,因为只有一个元素),初始设为极小值
long long ans = max({dp[1][0], dp[1][1], dp[1][2]});
for (int i = 2; i <= n; ++i) {
long long curr = a[i];
long long curr_xor = curr ^ k;
// 状态转移:计算新的 dp0, dp1, dp2
dp[i][0] = max({dp[i-1][0] + curr, curr});
dp[i][1] = max({curr_xor, dp[i - 1][0] + curr_xor, dp[i - 1][1] + curr_xor});
dp[i][2] = max({dp[i - 1][2] + curr, curr, dp[i - 1][1] + curr});
// 更新全局最大值
ans = max({ans, dp[i][0], dp[i][1], dp[i][2]});
}
cout << max(ans, 0ll) << endl;
return 0;
}
#T4
来自TDER
#include<bits/stdc++.h>
using namespace std;
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
long long n,k;
cin>>n>>k;
vector<long long> a(n);
for(int i=0;i<n;i++)
{
cin>>a[i];
}
unordered_map<long long,long long> mapp;
long long ans=0,last=0;
for(int i=0;i<n;i++)
{
mapp[a[i]]++;
if(mapp[a[i]]>=k)
{
ans+=n-i;
last=i;
break;
}
}
for(int i=0;i<n;i++)
{
mapp[a[i]]--;
if(a[i]==a[last])
{
while(mapp[a[last]]<k && last<n)
{
last++;
mapp[a[last]]++;
}
}
ans+=n-last;
}
cout<<ans;
return 0;
}
来自LJY
#include<bits/stdc++.h>
using namespace std;
long long n,k,a[100010];
unordered_map<long long,vector<long long>> mp;
unordered_map<long long,long long> cnt;
long long b[100010],ans;
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
cin>>n>>k;
for(int i=1;i<=n;i++){
cin>>a[i];
if(!mp[a[i]].size()){
mp[a[i]].push_back(i-1);
}
mp[a[i]].push_back(i);
}
b[0]=-1e18;
for(int i=1;i<=n;i++){
cnt[a[i]]++;
//cout<<"cnt:"<<cnt[a[i]]<<'\n';//c
if(cnt[a[i]]<k){
b[i]=b[i-1];
}else{
b[i]=max(b[i-1],mp[a[i]][cnt[a[i]]-k+1]-1);
}
}
for(int i=1;i<=n;i++){
//cout<<b[i]<<'\n';//c
if(b[i]==-1e18){
continue;
}
ans+=b[i]+1;
}
cout<<ans<<'\n';
return 0;
}
- 状态
- 已结束
- 规则
- ACM/ICPC
- 题目
- 4
- 开始于
- 2025-8-20 17:30
- 结束于
- 2025-8-21 17:30
- 持续时间
- 24 小时
- 主持人
- 参赛人数
- 8