SMU Autumn 2023 Round 5

A. Everyone Loves to Sleep

把时间都转成分钟,然后存起来,二分找到离他睡觉点最近的一个时间段,减去他的睡觉点,如果最近的在第二天,则把中间的这段时间加起来

#include <bits/stdc++.h>
#define int long long
#define debug(a) cout<<#a<<"="<<a<<'\n'; using namespace std; void solve() { int n, H, M;
cin >> n >> H >> M;
int HM = H * 60 + M; set<int> s;
s.insert(INT_MAX);
for (int i = 0; i < n; i ++) {
int n, m;
cin >> n >> m;
s.insert(n * 60 + m);
} auto t = s.lower_bound(HM);
int ans ;
if (*t == INT_MAX) {
t = s.begin();
ans = 24 * 60 - HM + *t;
} else
ans = *t - HM;
cout << ans / 60 << ' ' << ans % 60 << '\n';
} signed main() {
ios::sync_with_stdio(false);
cin.tie(nullptr); int T;
cin >> T;
while (T--) {
solve();
} return 0;
}

B. Minimum Varied Number

倒着搜一遍即可,正着搜会超时,也可以直接打表

#include <bits/stdc++.h>
#define debug(a) cout<<#a<<"="<<a<<'\n'; using namespace std;
using i64 = long long; typedef pair<i64, i64> PII; int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr); int T;
cin >> T;
while (T--) {
int n;
cin >> n;
bitset<10> v;
vector<int> ans;
bool ok = false;
auto dfs = [&](auto self, int sum) {
if(ok) return;
if (sum == n) {
ok = true;
reverse(ans.begin(), ans.end());
for (auto i : ans)
cout << i ;
cout << '\n';
return ;
}
for (int i = 9; i >= 1; i --)
if (!v[i]) {
v[i] = 1;
ans.push_back(i);
self(self, sum + i);
v[i] = 0;
ans.pop_back();
}
}; dfs(dfs, 0); } return 0;
}

D. Add Modulo 10

对于以\(1,3,7,9\)结尾的经过几次运算最后都会变成\(2,4,8,6\)的循环,而对于\(5,0\)结尾的,最后都会变成\(0\)结尾,所以我们可以先把不是以\(2\)结尾的都经过几次运算直到以\(2\)结尾,然后去模上\(20(2+4+8+6)\),就能把这些数都转换到\(20\)以内,然后就是比较一下就好了

#include <bits/stdc++.h>
#define debug(a) cout<<#a<<"="<<a<<'\n'; using namespace std;
using i64 = long long; typedef pair<i64, i64> PII; int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr); int T;
cin >> T;
while(T--){
int n;
cin >> n;
vector<i64> a(n);
for(auto &i : a) cin >> i; bool f = true;
for(auto &i : a){
while(i % 10 != 2 && i % 10 != 0)
i += i % 10;
if(i % 10 == 2)
i %= 20;
} for(int i = 0;i + 1 < n;i ++)
if(a[i] != a[i + 1])
f = false; cout << (f ? "Yes" : "No") << '\n';
} return 0;
}

G. Make Them Equal(dp)

假设将\(a_i\)变成\(b_i\)需要\(f_i\)个操作数,你现在能操作\(k\)步,每个\(f_i\)操作可以使你获得\(c_i\)个硬币,问现在怎样使你得到的硬币数最大?

是不是很熟悉?

假如我将问题转换成:你现在有\(V\)体积的背包,你可以装\(n\)个物品,每个物品体积为\(v_i\),价值为\(c_i\),问你现在能装的最大价值是多少?

没错,就是很典型的背包题,只要我们预处理出\(f_i\),那么这个题也就迎刃而解了!

如果你没有判断$k \geq \sum\limits_{i=1}^{n}f_i $这一步的话,那么你就不能开#define int long long.

#include <bits/stdc++.h>
#define int long long
#define debug(a) cout<<#a<<"="<<a<<'\n'; using namespace std; vector<int> f(2048, INT_MAX); void solve() {
int n, k;
cin >> n >> k;
vector<int> b(n), c(n);
int sum = 0, ans = 0;
for (auto &i : b) {
cin >> i;
sum += f[i];
}
for (auto &i : c) {
cin >> i;
ans += i;
} if(k >= sum){
cout << ans << '\n';
return ;
} vector<int> dp(k + 1);
for (int i = 0; i < n; i ++)
for (int j = k; j >= f[b[i]]; j--)
dp[j] = max(dp[j - f[b[i]]] + c[i], dp[j]); cout << dp[k] << '\n';
} signed main() {
ios::sync_with_stdio(false);
cin.tie(nullptr); f[1] = 0;
for (int i = 1; i <= 1000; i ++)
for (int j = 1; j <= i; j ++)
f[i + i / j] = min(f[i + i / j], f[i] + 1); int T;
cin >> T;
while (T--) {
solve();
} return 0;
}

I. Div. 7

如果能整除直接就输出,否则就去枚举它的个位

#include <bits/stdc++.h>
#define int long long
#define debug(a) cout<<#a<<"="<<a<<'\n'; using namespace std; void solve() {
int n;
cin >> n;
if(n % 7 == 0){
cout << n << '\n';
}else{
for(int i = 0;i <= 9;i ++){
if((n / 10 * 10 + i) % 7 == 0){
cout << (n / 10 * 10 + i) << '\n';
return ;
}
}
}
} signed main() {
ios::sync_with_stdio(false);
cin.tie(nullptr); int T;
cin >> T;
while (T--) {
solve();
} return 0;
}

SMU Autumn 2023 Round 5的更多相关文章

  1. Codeforces Round #845 (Div. 2) and ByteRace 2023 A-D

    Codeforces Round #845 (Div. 2) and ByteRace 2023 A-D A. Everybody Likes Good Arrays! 题意:对给定数组进行操作:删除 ...

  2. CodeForce——Deltix Round, Autumn 2021 (open for everyone, rated, Div. 1 + Div. 2)前三道题目题解

    目录 A: B: C: 题目链接 A Divide and Multiply standard input/output 1 s, 256 MB 正在上传-重新上传取消 x13036 B Willia ...

  3. 2023 01 19 HW

    2023 01 19 HW Okay, then let's start.  Okay. Maybe Karina, we start with the C2 design freeze. Yeah, ...

  4. SQL Server 随机数,随机区间,随机抽取数据rand(),floor(),ceiling(),round(),newid()函数等

    在查询分析器中执行:select rand(),可以看到结果会是类似于这样的随机小数:0.36361513486289558,像这样的小数在实际应用中用得不多,一般要取随机数都会取随机整数.那就看下面 ...

  5. SQL中Round(),Floor(),Ceiling()函数的浅析

    项目中的一个功能模块上用到了标量值函数,函数中又有ceiling()函数的用法,自己找了一些资料,对SQL中这几个函数做一个简单的记录,方便自己学习.有不足之处欢迎拍砖补充 1.round()函数遵循 ...

  6. oracle的round函数和trunc函数

    --Oracle trunc()函数的用法/**************日期********************/1.select trunc(sysdate) from dual --2013- ...

  7. Codeforces Round #366 (Div. 2) ABC

    Codeforces Round #366 (Div. 2) A I hate that I love that I hate it水题 #I hate that I love that I hate ...

  8. Codeforces Round #354 (Div. 2) ABCD

    Codeforces Round #354 (Div. 2) Problems     # Name     A Nicholas and Permutation standard input/out ...

  9. 【BZOJ1662】[Usaco2006 Nov]Round Numbers 圆环数 数位DP

    [BZOJ1662][Usaco2006 Nov]Round Numbers 圆环数 Description 正如你所知,奶牛们没有手指以至于不能玩"石头剪刀布"来任意地决定例如谁 ...

  10. Codeforces Round #368 (Div. 2)

    直达–>Codeforces Round #368 (Div. 2) A Brain’s Photos 给你一个NxM的矩阵,一个字母代表一种颜色,如果有”C”,”M”,”Y”三种中任意一种就输 ...

随机推荐

  1. Ubuntu 18.04安装xdrp以使用远程桌面

    背景 开发环境有一台服务器默认没有屏幕(被我拿走用来拓展屏幕了),有时候需要使用到界面但嫌弃拆显示器太麻烦,因此使用远程桌面来解决这个需求. 做法 安装xrdp sudo apt install -y ...

  2. docker配置域名

    先运行docker镜像 # 进入 docker 容器 mynginx 是容器名 docker exec -i -t mynginx /bin/bash #安装vim apt-get install v ...

  3. WPF实现TextBlock呼吸灯效果

    实现代码 <TextBlock Text="录像中" FontSize="48" Foreground="#ED4646" Horiz ...

  4. Vue 组件间通信有哪几种方式?

    父子通信 (1)父组件向子组件传值props <button-counter :title="send"></button-counter> Vue.com ...

  5. java后端解决请求跨域

    跨域 跨域:指的是浏览器不能执行其他网站的脚本.它是由浏览器的同源策略造成的,是浏览器对javascript施加的安全限制. 例如:a页面想获取b页面资源,如果a.b页面的协议.域名.端口.子域名不同 ...

  6. 内网穿透的高性能的反向代理应用FRP-自定义404错误页【实践可行版】

    frp简介 frp 是一个专注于内网穿透的高性能的反向代理应用,支持 TCP.UDP.HTTP.HTTPS 等多种协议.可以将内网服务以安全.便捷的方式通过具有公网 IP 节点的中转暴露到公网. 为什 ...

  7. vscode element-plus/lib/theme-chalk/index.css报错路径找不到

    vscode  element-plus/lib/theme-chalk/index.css报错路径找不到 import { createApp } from 'vue' import './styl ...

  8. 论如何直接用EF Core实现创建更新时间、用户审计,自动化乐观并发、软删除和树形查询(上)

    前言 数据库并发,数据审计和软删除一直是数据持久化方面的经典问题.早些时候,这些工作需要手写复杂的SQL或者通过存储过程和触发器实现.手写复杂SQL对软件可维护性构成了相当大的挑战,随着SQL字数的变 ...

  9. C# 对象复制三种方法效率对比——反射、序列化、表达式树

    1.需求 在代码中经常会遇到需要把对象复制一遍,或者把属性名相同的值复制一遍. 比如: public class Student { public int Id { get; set; } publi ...

  10. Vue 基于vue-codemirror实现的代码编辑器

    基于vue-codemirror实现的代码编辑器 开发环境 jshint 2.11.1 jsonlint 1.6.3 script-loader 0.7.2 vue 2.6.11 vue-codemi ...