SMU Summer 2023 Contest Round 9(2019 山东省大学生程序设计竞赛)
2019 山东省大学生程序设计竞赛
A. Calandar
纯模拟吧(感觉我做麻烦了(?),
就是如果问的是未来的日期,就用相隔天数取模后加上这天的星期,
如果问的是曾经的,就用这天的星期减去相隔天数的取模后的数,因为是减法,记得加模数
#include <bits/stdc++.h>
#define int long long
#define endl '\n'
using namespace std;
signed main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
unordered_map<string,int> cal;
unordered_map<int,string> ca;
cal["Monday"] = 1;
cal["Tuesday"] = 2;
cal["Wednesday"] = 3;
cal["Thursday"] = 4;
cal["Friday"] = 5;
ca[1] = "Monday";
ca[2] = "Tuesday";
ca[3] = "Wednesday";
ca[4] = "Thursday";
ca[0] = "Friday";
int T;
cin >> T;
while (T--) {
int y1,y2,m1,m2,d1,d2;
string s;
cin >> y1 >> m1 >> d1 >> s >> y2 >> m2 >> d2;
m1--,m2--;
int sum = 0;
if(y1 > y2){
int s1 = m1 * 30 + d1 + 360 , s2 = m2 * 30 + d2;
sum = (cal[s] - (s1 - s2) % 5 + 5) % 5 ;
}else if(y1 < y2){
int s1 = m1 * 30 + d1 , s2 = m2 * 30 + d2 + 360;
sum = (cal[s] + (s2 - s1) % 5) % 5 ;
}else {
int s1 = m1 * 30 + d1 , s2 = m2 * 30 + d2;
if(s1 > s2){
sum = (cal[s] - (s1 - s2) % 5 + 5) % 5 ;
}else{
sum = (cal[s] + (s2 - s1) % 5) % 5 ;
}
}
cout << ca[sum] << endl;
}
return 0;
}
C. Wandering Robot
先跑一轮算出最后所在的位置,然后算\(k-1\)次即最后一次移动的起点,最后再跑一轮
#include <bits/stdc++.h>
#define int long long
#define endl '\n'
using namespace std;
typedef pair<int,int> PII;
signed main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int t = 1;
cin >> t;
while (t--) {
int n, k;
cin >> n >> k;
string s;
cin >> s;
int MaxX,Maxy, EndX,EndY, ans = 0,x = 0,y = 0;
for(int i = 0;i < n;i ++){
if(s[i] == 'R') x++;
else if(s[i] == 'L') x--;
else if(s[i] == 'U') y++;
else y--;
int val = abs(x) + abs(y);
ans = max(ans, val);
}
x *= (k - 1), y *= (k - 1);
if(k > 1){
for(int i = 0;i < n;i ++){
if(s[i] == 'R') x++;
else if(s[i] == 'L') x--;
else if(s[i] == 'U') y++;
else y--;
int val = abs(x) + abs(y);
ans = max(ans, val);
}
}
cout << ans << endl;
}
return 0;
}
D. Game on a Graph
连通图最少需要 \((n-1)\)条边,因此最多可以操作 \((m-(n-1))\) 次,输的人就是 \((m-(n -1)) \bmod k\)。考虑到读入,复杂度 \(\mathcal{O}(k+m)\)。
#include <bits/stdc++.h>
#define int long long
using namespace std;
signed main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
int T;
cin >> T;
while(T--){
int n,m,k;
string s;
cin >> k >> s;
cin >> n >> m;
for(int i = 0,l,r;i < m;i ++)
cin >> l >> r;
if(s[(m - (n - 1)) % k] == '1') cout << 2 << '\n';
else cout << '1' << '\n';
}
return 0;
}
F. Stones in the Bucket
考虑都往中间靠,如果总数不是\(s\)的倍数,就用操作\(1\)丢掉几个,然后都往中间靠,取多补少
#include <bits/stdc++.h>
#define int long long
using namespace std;
typedef pair<int,int> PII;
signed main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
int T;
cin >> T;
while(T--){
int n,sum = 0;
cin >> n;
vector<int> a(n);
for(auto &i : a){
cin >> i;
sum += i;
}
int tag = sum / n, ans = sum % n;
for(auto i : a)
ans += max(tag - i, 0ll);
cout << ans << '\n';
}
return 0;
}
H. Tokens on the Segments
如果我们让更多的线段被标记,那同一个点上应该选择右端点最小的段,可以用堆来模拟这个过程
每次我们取了一点后,把后面的段又放进堆里,如此循环(貌似这题数据很水,暴力的也过了
#include <bits/stdc++.h>
#define int long long
using namespace std;
typedef pair<int,int> PII;
struct Node{
int l,r;
Node(){}
Node(int l,int r) : l(l),r(r){}
bool operator < (const Node& s)const{
if(s.l == l) return r > s.r;
return l > s.l;
}
};
signed main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
int T;
cin >> T;
while(T--){
int n;
cin >> n;
priority_queue<Node> Q;
for(int i = 0;i < n;i ++){
int l,r;
cin >> l >> r;
Q.push(Node(l,r));
}
int now = 0, ans = 0;
while(Q.size()){
auto [l,r] = Q.top();
Q.pop();
if(l <= now && l + 1 <= r){
Q.push(Node(l + 1, r));
continue;
}
if(l > now){
ans ++;
now = l;
}
}
cout << ans << '\n';
}
return 0;
}
L. Median
思路就是去跑\(dfs\)或\(bfs\)计算出每个数大于多少和小于多少,如果大于的数超过了\(\lfloor\frac{n}{2}\rfloor\)或者小于的数超过了\(\lfloor\frac{n}{2}\rfloor\)都说明这个数不可能为中位数,另外如果在跑\(dfs\)或\(bfs\)的过程中出现了环,就是\(a>b,b>c,c>a\)这种,则无解
#include <bits/stdc++.h>
#define int long long
using namespace std;
typedef pair<int,int> PII;
void solve(){
int n,m;
cin >> n >> m;
vector<int> pre(n + 1),nxt(n + 1),g[n + 1];
for(int i = 0;i < m;i ++){
int x,y;
cin >> x >> y;
g[x].emplace_back(y);
}
vector<int> vis(n + 1);
auto bfs = [&](int x){
queue<int> Q;
Q.push(x), vis[x] = x;
while(Q.size()){
auto u = Q.front();
Q.pop();
for(auto i : g[u]){
if(i == x) return false;
if(vis[i] == x) continue;
Q.push(i);
vis[i] = x;
pre[i]++,nxt[x]++;
}
}
return true;
};
for(int i = 1;i <= n;i ++){
if(!bfs(i)){
cout << string(n,'0') << '\n';
return ;
}
}
for(int i = 1;i <= n;i ++){
if(pre[i] * 2 <= n && nxt[i] * 2 <= n)
cout << '1';
else
cout << '0';
}
cout << '\n';
return ;
}
signed main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
int T;
cin >> T;
while(T--){
solve();
}
return 0;
}
M. Sekiro
\(n=1\)时就会一直循环了,因此\(n=1\)时退出即可
#include <bits/stdc++.h>
#define int long long
using namespace std;
signed main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
int T;
cin >> T;
while(T--){
int n,m;
cin >> n >> m;
for(int i = 1;i <= m;i ++){
if(n > 1) n = (n + 1) >> 1;
else break;
}
cout << n << '\n';
}
return 0;
}
SMU Summer 2023 Contest Round 9(2019 山东省大学生程序设计竞赛)的更多相关文章
- [BFS,A*,k短路径] 2019中国大学生程序设计竞赛(CCPC) - 网络选拔赛 path (Problem - 6705)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=6705 path Time Limit: 2000/2000 MS (Java/Others) Mem ...
- [贪心,dp] 2019中国大学生程序设计竞赛(CCPC) - 网络选拔赛 Fishing Master (Problem - 6709)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=6709 Fishing Master Time Limit: 2000/1000 MS (Java/Othe ...
- 2019中国大学生程序设计竞赛(CCPC) - 网络选拔赛(8/11)
$$2019中国大学生程序设计竞赛(CCPC)\ -\ 网络选拔赛$$ \(A.\hat{} \& \hat{}\) 签到,只把AB都有的位给异或掉 //#pragma comment(lin ...
- 【赛后总结+部分题解】2019中国大学生程序设计竞赛(CCPC) - 网络选拔赛
赛后总结: T:今天状态一般,甚至有点疲惫.然后12点比赛开始,和队友开始看题,从最后往前面看,发现数学题公式看不懂.然后发现队友已经双开做1001和1006了,我看着1007有人A,开始做1007. ...
- 2019河北省大学生程序设计竞赛(重现赛) L题-smart robot(深度优先搜索)
题目链接:https://ac.nowcoder.com/acm/contest/903/L 题意:给你 n * n的方阵,你可以从任意一个数字开始走,可以走上下左右四个方向,走过的数字会被拼合,拼合 ...
- 2019河北省大学生程序设计竞赛(重现赛)B 题 -Icebound and Sequence ( 等比数列求和的快速幂取模)
题目链接:https://ac.nowcoder.com/acm/contest/903/B 题意: 给你 q,n,p,求 q1+q2+...+qn 的和 模 p. 思路:一开始不会做,后面查了下发现 ...
- 2019河北省大学生程序设计竞赛(重现赛)J-舔狗 (拓扑排序)
题目链接:https://ac.nowcoder.com/acm/contest/903/J 题意:给你 n 个舔狗和他喜欢的人,让你俩俩配对(只能和喜欢它的和它喜欢的),求剩下的单身狗数量. 思路: ...
- Contest - 中南大学第六届大学生程序设计竞赛(Semilive)
题1:1160十进制-十六进制 注意他给的数据范围 2^31,int是 2^31-1 #include<iostream> using namespace std; int main() ...
- 2019中国大学生程序设计竞赛(CCPC) - 网络选拔赛
传送门 A.^&^ 题意: 找到最小的正数\(C\),满足\((A\ xor\ C)\&(B\ xor \ C)\)最小. 思路: 输出\(A\&B\)即可,特判答案为0的情况 ...
- 【2019中国大学生程序设计竞赛-女生专场】C - Function
原题 韦神提供的思路orz 首先一个显然的性质,所有的c可以提出来,方程变成ax^2+bx的形式 因为x的值是离散的,而m的值又不大 所以一开始让x都为1(注意!x是正整数),然后每次挑一个x让他加一 ...
随机推荐
- Blender练习——SciFi枪械.md
Blender练习--SciFi枪械 一.基本操作 常用快捷键 E 挤出 B 倒角,中途可通过滚轮或S来调整细分 Alt+点选 循环选择 Ctrl Alt+点选 并排选择 F 补面,比如一个碗口,将碗 ...
- Jupyter QtConsole 配置,2023 年了你还在使用 QtConsole 吗?
目录 Jupyter QtConsole 配置,2023 年了你还在使用 QtConsole 吗? Jupyter QtConsole 的安装 设置字体 启动时自动加载需要的库包 更新:2023 年 ...
- JS弱类型语言的优势——之模板字符串
ES6中,开始支持模板字符串. 尽管Java和C#这样的高级语言有非常多吸引人的地方,但是想js这样的弱类型语言,也有独到之处. equType:有四种类型,分别是:chl.chwp.cwp.cot, ...
- python selenium UI自动化操作iframe及返回默认页面
页面操作的场景:进到到页面A,选择页面A里面的记录,点击签约, 弹出一个弹窗B,弹窗B的内容是协议及同意按钮或其他非同意的提示信息,主要的操作,打开页面A,点击签约,点击同意,操作完成 分析页面的组成 ...
- pycharm中运行jupyter notebook
进入anaconda prompt,进入对应的虚拟环境 输入jupyter notebook,找到路径和token 这两个随便复制一个,注意是包括token也要复制到 然后打开pycharm,并建立一 ...
- 解决Linux下无法编译带有中文的JAVA程序问题
只要在编译的时候加上-encoding gbk即可 例如: javac -encoding gbk Myclass.java
- 扫描版PDF目录制作指南
目前网上找到的扫描版的电子书往往没有目录,这使得阅读变得非常困难.本文总结我的经验,介绍快速制作扫描版 PDF 目录的方法,以便更轻松地阅读扫描版电子书. 本文首先介绍手动制作目录的方法,之后介绍如何 ...
- Linux 特权 SUID/SGID 的详解
导航 0 前言 1 权限匹配流程 2 五种身份变化 3 有效用户/组 4 特权对 Shell 脚本无效 5 Sudo 与 SUID/SGID 的优先级 6 SUID.SGID.Sticky 各自的功能 ...
- ONNX Runtime入门示例:在C#中使用ResNet50v2进行图像识别
ONNX Runtime简介 ONNX Runtime 是一个跨平台的推理和训练机器学习加速器.ONNX 运行时推理可以实现更快的客户体验和更低的成本,支持来自深度学习框架(如 PyTorch 和 T ...
- 深度长文解析SpringWebFlux响应式框架15个核心组件源码
Spring WebFlux 介绍 Spring WebFlux 是 Spring Framework 5.0 版本引入的一个响应式 Web 框架,它与 Spring MVC 并存,提供了一种全新的编 ...