【训练记录】2024年莆田市高中信息学奥赛国庆集训CSP-S提高组(第二天场外)

news/2024/10/2 12:05:11

训练情况

rk#4

\(100 + 100 + 100 + 70 = 370\)

赛后反思

没什么很严重的失误,只是国庆早八起不来,打到后面时间不够做第四题了QAQ,下次一定早起TAT

A题




开场怎么是CF Div4 原题,显然因为 \(a,b,c,d\) 互不相同,最后切出来的结果只有三块或四块,三块的情况是两线没有交叉,四块的情况是两线交叉了,我们考虑从时钟的最外面走一圈,若出现交叉的情况输出 \(4\) 否则输出 \(3\) 即可。

#include <bits/stdc++.h>
#define int long longusing namespace std;void solve(){int a,b,c,d; cin>>a>>b>>c>>d;string s;for(int i = 1;i<=12;i++){if(i == a || i == b) s += "0";if(i == c || i == d) s += "1";}if(s[0] == s[2] && s[1] == s[3]) cout<<4<<endl;else cout<<3<<endl;
}signed main(){freopen("time.in","r",stdin);freopen("time.out","w",stdout);int T; cin>>T; while(T--)solve();return 0;
}

B题





背包DP缝合题(?)带双重容量+种类01背包,挺板的

DP状态转移方程:

\[dp[pi][li]=max(dp[pi][li],dp[pi-p[i]][li-l[i]]+b[i]) \]

#include <bits/stdc++.h>
#define int long long
using namespace std;const int N=1e3+5;int n,t,w,k[N];
int p[N],l[N],b[N];
int dp[N][N];void solve(){cin>>n>>t>>w;for(int i=1;i<=n;i++) cin>>k[i];for(int i=1;i<=n;i++) cin>>p[i]>>l[i]>>b[i];for(int i=1;i<=n;i++){while(k[i]--){for(int pi=w;pi>=p[i];pi--){for(int li=t;li>=l[i];li--){dp[pi][li]=max(dp[pi][li],dp[pi-p[i]][li-l[i]]+b[i]);}}}}cout<<dp[w][t]<<endl;
}signed main(){freopen("hui.in","r",stdin);freopen("hui.out","w",stdout);// int T; cin>>T; while(T--)solve();
}

C题






模拟题,直接模拟即可,注意一下pow会爆,要自己写 \(10^n\) ,右边补一就 n*=10,n++ 即可,左边补 3 就直接加 \(3\times 10^{len+i-1}\)

#include <bits/stdc++.h>
#define int long longusing namespace std;const int mod = 1e9 + 7;int x;void solve(){cin>>x;int cs = x;for(int k = 1;k<=cs;k++){int cnt0 = 0,cnt1 = 0,cnt2 = 0,cnt3 = 0;int tmp = x;while(tmp){if(tmp % 10 == 0) cnt0++;else if(tmp % 10 == 1) cnt1++;else if(tmp % 10 == 2) cnt2++;else if(tmp % 10 == 3) cnt3++;tmp/=10;}for(int i = 1;i<=cnt0;i++) x*=10,x++;for(int i = 1;i<=cnt1;i++) x*=2;tmp = x;int len = 0;while(tmp)len++,tmp/=10;for(int i = 1;i<=cnt2;i++){int add = 3;for(int j = 1;j<=len+i-1;j++) add *= 10;x += add;}if(cnt3) x += 123456;x += k;x %= mod;// cout<<x<<endl;}cout<<x<<endl;
}signed main(){freopen("all.in","r",stdin);freopen("all.out","w",stdout);// int T; cin>>T; while(T--)solve();return 0;
}

D题




双指针题,考虑每一种类的每个人都扔到一个数组里,然后双指针维护即可,种类数 \(< n\) 右边界右移,否则左边界右移,种类数达到 \(n\) 更新答案最小值,极差使用 set 进行维护(要重载运算符)

下面的代码只有 \(70\) 分,不知道挂哪了,待调。

#include <bits/stdc++.h>
#define int long longusing namespace std;const int N = 1e6 + 3;int n;
int vis[N];struct node{int c,t;bool operator <(const node &x)const{return t < x.t;}
};
vector<node> a;
set<node> s;bool cmp(node x,node y){return x.t < y.t;
}void solve(){cin>>n;for(int i = 1;i<=n;i++){int ci; cin>>ci;for(int j = 1;j<=ci;j++){int t; cin>>t;a.push_back((node){i,t});}}sort(a.begin(),a.end(),cmp);int l = 0,r = 0;int ans = LONG_LONG_MAX;int kind = 0;while(l <= r && r<a.size()){if(kind<n){r++;s.insert(a[r-1]);vis[a[r-1].c]++;if(vis[a[r-1].c] == 1) kind++;} else {auto it = s.end(); it--;node ma = *it;node mi = *s.begin();ans = min(ans,ma.t - mi.t);s.erase(a[l]);vis[a[l].c]--;if(!vis[a[l].c]) kind--;l++;}}cout<<ans<<endl;
}signed main(){freopen("buhezuo.in","r",stdin);freopen("buhezuo.out","w",stdout);// int T; cin>>T; while(T--)solve();return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/67059.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

抽烟行为识别预警系统

抽烟行为识别预警系统基于AI视觉智能分析技术,抽烟行为识别预警系统通过监测现场人员抽烟行为自动存档进行报警提示同步回传后台提醒值班人员及时处理。抽烟行为识别预警系统对现场人员吸烟行为进行7*24小时不间断识别监测,当发现有人抽烟时主动抓拍存档并同步触发报警。抽烟…

明厨亮灶AI智能分析盒

明厨亮灶AI智能分析盒通过AI视频分析技术,明厨亮灶AI智能分析盒赋能现场普通监控具备了AI智能检测的功能,能够迅速高效的识别厨房内的工作人员的着装状况:口罩穿戴识别、厨师服穿戴识别、吸烟识别、厨师帽穿戴识别、后厨鼠害识别、玩手机识别等。明厨亮灶AI智能分析盒对餐厅…

安全生产劳保穿戴监测系统

安全生产劳保穿戴监测系统通过计算机智能视频分析技术,安全生产劳保穿戴监测系统对现场区域施工作业人员防护用品穿戴是否合规进行自动监测,当安全生产劳保穿戴监测系统监测到现场施工人员没有按施工要求穿戴防护用品时,不需人为干预系统立即自动触发告警并抓拍存档同步提醒…

c++ vector容器、字符串

c++ vector容器 字符串:

记一次内存告警

刚好国庆最后一天上班,遇到一个实例内存使用率100%的告警。 分析JVM内存常用的命令得总结一下:

Leetcode 275. H 指数 II

1.题目基本信息 1.1.题目描述 给你一个整数数组 citations ,其中 citations[i] 表示研究者的第 i 篇论文被引用的次数,citations 已经按照 升序排列 。计算并返回该研究者的 h 指数。 h 指数的定义:h 代表“高引用次数”(high citations),一名科研人员的 h 指数是指他(她…

7、卷积神经网络基础

1、边缘检测示例(Edge Detection Example)卷积运算(convolutional operation)是卷积神经网络最基本的组成部分,使用边缘检测(edge detection)作为入门样例。接下来,你会看到卷积是如何进行运算的。在之前的人脸例子中,我们知道神经网络的前几层是如何检测边缘的,然后…

truffle 和 ganache 打印账号列表和发送eth

打印 ganache环境的账户列表const localhost = "http://127.0.0.1:7545"; const {Web3} = require("web3"); const web3 = new Web3(new Web3.providers.HttpProvider(localhost));web3.eth.getAccounts().then(function (result) {console.log("账户…