AtCoder Beginner Contest 192
A Star
#include <cstdio>
using namespace std;
int n;
int main()
{
scanf("%d", &n);
printf("%d\n", 100 - n % 100);
return 0;
}
B uNrEaDaBlE sTrInG
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
#include <cctype>
using namespace std;
#define IOS ios::sync_with_stdio(false); cin.tie(0); cout.tie(0)
string str;
bool check()
{
for(int i = 0; i < (int)str.size(); ++ i)
if(i % 2 && islower(str[i])) return 0;
else if(i % 2 == 0 && isupper(str[i])) return 0;
return 1;
}
int main()
{
IOS;
cin >> str;
if(check()) puts("Yes");
else puts("No");
return 0;
}
C Kaprekar Number
#include <cstdio>
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
typedef long long LL;
#define IOS ios::sync_with_stdio(false); cin.tie(0); cout.tie(0)
LL n, k;
LL f(LL x)
{
vector<int> g1, g2;
while(x) g1.push_back(x % 10), g2.push_back(x % 10), x /= 10;
sort(g1.begin(), g1.end(), greater<int>());
sort(g2.begin(), g2.end());
LL res = 0;
for(int i = 0; i < (int)g1.size(); ++ i)
res = res * 10 + g1[i] - g2[i];
return res;
}
int main()
{
IOS;
cin >> n >> k;
LL a0 = n;
for(int i = 1; i <= k; ++ i) a0 = f(a0);
cout << a0 << endl;
return 0;
}
D Base n
特判 \(X\) 只有一位的情况,无论基底是几,得到的数都是原数,判断原数和 \(M\) 的大小关系即可
对于其他情况,当基底越大,得到的值也就越大,具有单调性,可以二分基底
计算以 \(mid\) 为基底的数与 \(M\) 的大小关系时,直接计算答案会爆 \(long \; long\), 注意在过程中判断
#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;
typedef unsigned long long LL;
#define IOS ios::sync_with_stdio(false); cin.tie(0); cout.tie(0)
LL m;
string s;
int find()
{
int res = 0;
for(auto x : s) res = max(res, x - '0');
return res;
}
bool check(LL mid)
{
LL res = 0;
for(auto x : s)
{
if(res > m / mid) return 0;
res = res * mid + x - '0';
if(res > m) return 0;
}
return 1;
}
int main()
{
IOS;
cin >> s >> m;
int d = find();
if(s.size() == 1)
{
if((LL)d <= m) cout << "1" << endl;
else cout << "0" << endl;
return 0;
}
LL l = d + 1, res = 0, r = m;
while(l <= r)
{
LL mid = (l + r) >> 1;
if(check(mid))
{
res = mid;
l = mid + 1;
}
else r = mid - 1;
}
if(res) cout << res - d << endl;
else cout << "0" << endl;
return 0;
}
E Train
从 \(u\) 到达 \(v\) 的时间为 \(\left\lceil\ \dfrac{d[u]}{K_i}\right\rceil * K_i + T_i\), 建双向边跑 \(dijkstra\) 即可
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <queue>
using namespace std;
typedef long long LL;
const int M = 2e5 + 10;
const int N = 1e5 + 10;
const LL INF = 1e18;
int n, m, S, T;
LL d[N];
struct Edge
{
int to, nxt, T, K;
}line[M];
int fist[N], idx;
bool st[N];
struct zt
{
int from;
LL d;
};
bool operator < (zt a, zt b)
{
return a.d > b.d;
}
void add(int x, int y, int z, int w)
{
line[idx] = {y, fist[x], z, w};
fist[x] = idx ++;
}
void heap_dijkstra()
{
for(int i = 1; i <= n; ++ i) d[i] = INF;
priority_queue<zt> q;
q.push({S, 0}), d[S] = 0;
while(!q.empty())
{
zt u = q.top(); q.pop();
if(st[u.from]) continue;
st[u.from] = 1;
for(int i = fist[u.from]; ~i; i = line[i].nxt)
{
int v = line[i].to;
LL tim = (d[u.from] + line[i].K - 1) / line[i].K * line[i].K + line[i].T;
if(d[v] > tim)
{
d[v] = tim;
q.push({v, d[v]});
}
}
}
}
int main()
{
scanf("%d%d%d%d", &n, &m, &S, &T);
memset(fist, -1, sizeof fist);
for(int i = 1; i <= m; ++ i)
{
int a, b, c, d;
scanf("%d%d%d%d", &a, &b, &c, &d);
add(a, b, c, d);
add(b, a, c, d);
}
heap_dijkstra();
if(d[T] < INF) printf("%lld\n", d[T]);
else puts("-1");
return 0;
}
F Potion
令 \(\sum A_i\) 为从 \(n\) 个元素中选出 \(p\) 个元素的权值和
目标是使在满足\(p | (X - \sum A_i)\) 条件下最小化 \(\dfrac{X - \sum A_i}{p}\)
故对于每个 \(p\) ,求出在 \(\sum A_i\) mod \(p\) == \(X\) mod \(p\) 的条件下 \(\sum A_i\) 的最大值即可
问题转化为求 \(i\) 个数中取出 \(j\) 个且和的余数为 \(k\) 的最大和
令\(f[i][j][k]\) 为前 \(i\) 个数中选择 \(j\) 个且和的余数为 \(k\) 的最大和
\(f[i][j][k] = max(f[i - 1][j][k], f[i - 1][j - 1][(k - a_i) \% p] + a_i)\)
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <iostream>
using namespace std;
#define IOS ios::sync_with_stdio(false); cin.tie(0); cout.tie(0)
typedef long long LL;
const int N = 100 + 20;
const LL INF = 1e18;
LL f[N][N][N], m;
int n, a[N];
int main()
{
IOS;
cin >> n >> m;
for(int i = 1; i <= n; ++ i) cin >> a[i];
LL ans = INF;
for(int p = 1; p <= n; ++ p)
{
memset(f, -0x3f, sizeof f);
f[0][0][0] = 0;
for(int i = 1; i <= n; ++ i)
{
f[i][0][0] = 0;
for(int j = 1; j <= p; ++ j)
for(int k = 0; k < p; ++ k)
f[i][j][k] = max(f[i - 1][j][k], f[i - 1][j - 1][((k - a[i]) % p + p) % p] + a[i]);
}
if(f[n][p][m % p] >= 0) ans = min(ans, (m - f[n][p][m % p]) / p);
}
cout << ans << endl;
return 0;
}
AtCoder Beginner Contest 192的更多相关文章
- AtCoder Beginner Contest 192 F - Potion
题目链接 点我跳转 题目大意 给定 \(N\) 个物品和一个 \(X\) ,第 \(i\) 个物品的重量为 \(ai\),你可以从中选择任意个物品(不能不选) 假定选择了 \(S\) 个物品,物品的总 ...
- AtCoder Beginner Contest 100 2018/06/16
A - Happy Birthday! Time limit : 2sec / Memory limit : 1000MB Score: 100 points Problem Statement E8 ...
- AtCoder Beginner Contest 052
没看到Beginner,然后就做啊做,发现A,B太简单了...然后想想做完算了..没想到C卡了一下,然后还是做出来了.D的话瞎想了一下,然后感觉也没问题.假装all kill.2333 AtCoder ...
- AtCoder Beginner Contest 053 ABCD题
A - ABC/ARC Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement Smeke has ...
- AtCoder Beginner Contest 136
AtCoder Beginner Contest 136 题目链接 A - +-x 直接取\(max\)即可. Code #include <bits/stdc++.h> using na ...
- AtCoder Beginner Contest 137 F
AtCoder Beginner Contest 137 F 数论鬼题(虽然不算特别数论) 希望你在浏览这篇题解前已经知道了费马小定理 利用用费马小定理构造函数\(g(x)=(x-i)^{P-1}\) ...
- AtCoder Beginner Contest 076
A - Rating Goal Time limit : 2sec / Memory limit : 256MB Score : 100 points Problem Statement Takaha ...
- AtCoder Beginner Contest 079 D - Wall【Warshall Floyd algorithm】
AtCoder Beginner Contest 079 D - Wall Warshall Floyd 最短路....先枚举 k #include<iostream> #include& ...
- AtCoder Beginner Contest 064 D - Insertion
AtCoder Beginner Contest 064 D - Insertion Problem Statement You are given a string S of length N co ...
随机推荐
- Linunx系统引导过程及MBR/GRUB故障
Linunx系统引导过程 系统初始化进程 init进程 Systemd Systemd单元类型 允许级别所对应的systemd目标 修复MBR扇区故障 解决思路 操作 修复GRUB引导故障 解决思路 ...
- win10 远程桌面 ubuntu
一.获取本机ip 通过ip查询网址来查询本机外网地址 二.下载远程链接软件 下载向日葵,注册账号 三.远程链接 将连接端与被连接端分别绑定账号,输入相应ip地址,即可连接.
- K8S(03)核心插件-Flannel网络插件
系列文章说明 本系列文章,可以基本算是 老男孩2019年王硕的K8S周末班课程 笔记,根据视频来看本笔记最好,否则有些地方会看不明白 需要视频可以联系我 K8S核心网络插件Flannel 目录 系列文 ...
- Rsyncd 同步服务
目录 数据备份的策略 三种数据备份 三种数据备份的比较(转载) 不同数据备份类型组合说明(转载) Rsyncd 服务传输模式(remote synchronizetion deamon) 本地传输模式 ...
- 9.[完]其他常用的rabbitmq的参数和设置
作者 微信:tangy8080 电子邮箱:914661180@qq.com 更新时间:2019-08-12 20:42:25 星期一 欢迎您订阅和分享我的订阅号,订阅号内会不定期分享一些我自己学习过程 ...
- vue中怎么动态生成form表单
form-create 是一个可以通过 JSON 生成具有动态渲染.数据收集.验证和提交功能的表单生成组件.支持3个UI框架,并且支持生成任何 Vue 组件.内置20种常用表单组件和自定义组件,再复杂 ...
- 如何强制删除 baidu/tempdata/con.dat 的垃圾文件! How to fix locked SD card: 读卡器 损坏,补救措施!
https://www.youtube.com/watch?v=y2c37dcxNto&feature=youtu.be 使用windows command prompt 强制删除 baidu ...
- React render algorithm & Fiber vs Stack
React render algorithm & Fiber vs Stack React 渲染算法 & Fiber vs Stack https://stackoverflow.co ...
- how to write an ebook that can support published by format PDF, Epub, Mobi and so on
how to write an ebook that can support published by format PDF, Epub, Mobi and so on 如何写一本自己的电子书,支持各 ...
- js binary search algorithm
js binary search algorithm js 二分查找算法 二分查找, 前置条件 存储在数组中 有序排列 理想条件: 数组是递增排列,数组中的元素互不相同; 重排 & 去重 顺序 ...