ICPC Central Russia Regional Contest (CRRC 19)
ICPC Central Russia Regional Contest (CRRC 19)
文章目录
- ICPC Central Russia Regional Contest (CRRC 19)
- A. Green tea
- B. Mysterious Resistors
- C. Emoticons
- D. Power play
- E. Printed circuit board
- F. A word game
- G. Hourglass
- H. Men's showdown
- I. Andrew and Python
- J. Something that resembles Waring's problem
- K. Parabolic sorting
A. Green tea
签到题
#include <bits/stdc++.h>using namespace std;const int N = 1e6 + 5;
typedef long long LL;
int a, b;
int main() {cin >> a >> b;int res1, res2;int minn = 0x3f3f3f3f;for (int i = 0; i <= 1000; i++) {for (int j = 0; j <= 1000; j++) {if(i*a+j*b==80*(i+j)&&((i+j)!=0)){if(i+j<minn){res1 = i, res2 = j;minn = i + j;}}}}cout << res1 << ' ' << res2 << endl;return 0;
}
B. Mysterious Resistors
大意:
给出k组串联的电阻,每组电阻都是 r i r_i ri和R并联,现在给出k个 r i r_i ri,以及总电阻,求R
思路:
因为有单调性,所以直接二分去找即可
#include <bits/stdc++.h>using namespace std;typedef long long LL;
int const MAXN = 2e5 + 10;
int n;
double m;
double r[MAXN];
bool check(double mid) {double sum = 0;for (int i = 1; i <= n; i++) {sum += r[i] / (1.0 + r[i] / mid);}return sum > m;
}
int main() {cin >> n >> m;for (int i = 1; i <= n; i++) {cin >> r[i];}double l = 0, r = 1e5;while (r - l > 1e-8) {double mid = (l + r) / 2;if (check(mid))r = mid;elsel = mid;}printf("%.8lf\n", l);return 0;
}
C. Emoticons
大模拟。
#include <bits/stdc++.h>using namespace std;typedef long long LL;
int const MAXN = 2e5 + 10;
int n, m, T;
map<char, int> num;
unordered_map<char, string> mp;
vector<char> f;
int main() {string s;cin >> s;mp['\\'] = ":-\\";f.push_back('\\');mp['P'] = ":-P";f.push_back('P');mp['D'] = ":D";f.push_back('D');mp['C'] = ":C";f.push_back('C');mp['8'] = "8-0";f.push_back('8');mp['E'] = ":-E";f.push_back('E');mp['%'] = "%0";f.push_back('%');mp['X'] = ":-X";f.push_back('X');mp['~'] = ":~(";f.push_back('~');mp['['] = "[:|||:]";f.push_back('[');mp['0'] = ":-0";f.push_back('0');mp['|'] = ":-|";f.push_back('|');for (int i = 0; i < s.size(); i++) {num[s[i]]++;// cout << s[i] << endl;}for (int v = 0; v < f.size(); v++) {char fl = f[v];if (num[fl]) {string t = mp[fl];int d = num[fl];for (int i = 0; i < d; i++) {// cout << fl << " " << t << endl;cout << t << endl;}for (int i = 0; i < t.size(); i++) {num[t[i]] -= d;}}}if (num[';'] && num[')']) {int d = min(num[';'], num[')']);for (int i = 0; i < d; i++) {cout << ";-)" << endl;}num[';'] -= d;num['-'] -= d;num[')'] -= d;}if (num[';'] && num['(']) {int d = min(num[';'], num['(']);for (int i = 0; i < d; i++) {cout << ";-(" << endl;}num[';'] -= d;num['-'] -= d;num['('] -= d;}if (num[')']) {int d = num[')'];for (int i = 0; i < d; i++) {cout << ":)" << endl;}num[':'] -= d;num[')'] -= d;}if (num['(']) {int d = num['('];for (int i = 0; i < d; i++) {cout << ":(" << endl;}num[':'] -= d;num['('] -= d;}cout << "LOL" << endl;return 0;
}
D. Power play
大意:
给出两个数a和b,范围为1e4
现在要求求出一个1e18以内的数,使得 a x = = x b a^x==x^b ax==xb
思路:
1e18是个幌子,可以发现x不会超过1e4,所以直接暴力枚举即可
#include <bits/stdc++.h>#define int long long
using namespace std;inline int read() {int s = 0, w = 1;char ch = getchar();while (ch < '0' || ch > '9') {if (ch == '-') w = -1;ch = getchar();}while (ch >= '0' && ch <= '9') s = s * 10 + ch - '0', ch = getchar();return s * w;
}int const MAXN = 2e5 + 10;
int n, m, T, a, b;long double eps = 1e-8;signed main() {a = read(), b = read();long double ai = a * 1.0, bi = b * 1.0;int flg = 0;for (int i = 1; i <= 1e6; ++i) {if (fabs(bi * log((long double)i) - (long double)i * log((long double)a)) < eps) {cout << i;flg = 1;break;}}if (!flg) cout << 0;return 0;
}
E. Printed circuit board
gugugu
F. A word game
sg函数裸题
#include <bits/stdc++.h>using namespace std;const int N = 1e6 + 5;
typedef long long LL;
string s;
int a[30];
int f[100];
int sg(int x) {if (f[x] != -1) return f[x];unordered_set<int> S;if (x >= 1) S.insert(sg(x - 1));if (x >= 2) S.insert(sg(x - 2));if (x >= 3) S.insert(sg(0));for (int i = 0;; i++) {if (!S.count(i)) return f[x] = i;}
}int main() {cin >> s;memset(f, -1, sizeof f);for (int i = 0; i < s.size(); i++) {a[s[i] - 'A']++;}int res = 0;f[0] = 0;for (int i = 0; i < 26; i++) {res ^= sg(a[i]);}if (res) cout << "Alice" << endl;else cout << "Bob" << endl;return 0;
}
G. Hourglass
gugugu
H. Men’s showdown
集合nim游戏裸题
#include<bits/stdc++.h>using namespace std;int n, k;
int const N = 1e2 + 10, M = 1e4 + 10;
int s[N];
int f[M];// 记忆化搜索求sg函数
int sg(int x) {if (f[x] != 0) return f[x];unordered_set<int> S; // 计算每个后继状态的sg值for (int i = 1; i <= 3; ++i) {int sum = s[i];if (x >= sum) S.insert(sg(x - sum));}// mex运算for (int i = 0; ; i++)if (!S.count(i)) return f[x] = i;
}int main() {// 读入集合ss[1] = 1, s[2] = 5, s[3] = 13;int x;cin >> x;int res = sg(x);if (!res) cout << "1\n";else cout << "2\n";return 0;
}
I. Andrew and Python
思路:
交互题,给出一个n*n的棋盘,然后有一个目标点,现在可以进行3种操作:
一种是询问目标点是否是某一个点
一种是询问目标点是否在某一条线段上
一种是询问目标点是否在某一个三角形上及内部
思路:
利用三角形询问进行二分,每次询问一半的三角形,到后面如果无法组成三角形,那么就利用线段进行二分
最后可能会剩下1-3个点,直接暴力询问即可
#include <bits/stdc++.h>#define int long long
using namespace std;
typedef pair<int, int> PII;inline int read() {int s = 0, w = 1;char ch = getchar();while (ch < '0' || ch > '9') {if (ch == '-') w = -1;ch = getchar();}while (ch >= '0' && ch <= '9') s = s * 10 + ch - '0', ch = getchar();return s * w;
}int const MAXN = 2e5 + 10;
int n, m, T;PII get_mid(PII x, PII y, PII z) {double res_x = (1.0 * x.first + 1.0 * y.first) / 2.0;double res_y = (1.0 * x.second + 1.0 * y.second) / 2.0;if (z.first < res_x)res_x = ceil(res_x);elseres_x = floor(res_x);if (z.second < res_y)res_y = ceil(res_y);elseres_y = floor(res_y);return {(int)res_x, (int)res_y};
}int test(PII a, PII b, PII c) {if ((c.second - b.second) * (b.first - a.first) ==(b.second - a.second) * (c.first - b.first))return 1;elsereturn 0;
}int check(PII a, PII b, PII c) {if (!test(a, b, c)) {cout << "? 3 " << a.first << " " << a.second << " " << b.first << " "<< b.second << " " << c.first << " " << c.second << endl;fflush(stdout);string s;cin >> s;if (s == "Yes")return 1;elsereturn 0;} else {if (a == b) {return 0;} else {cout << "? 2 " << a.first << " " << a.second << " " << b.first<< " " << b.second << endl;fflush(stdout);string s;cin >> s;if (s == "Yes")return 1;elsereturn 0;}}
}int check2(PII a, PII b, PII c) {int ab = (a.first - b.first) * (a.first - b.first) +(a.second - b.second) * (a.second - b.second);int bc = (b.first - c.first) * (b.first - c.first) +(b.second - c.second) * (b.second - c.second);int ac = (a.first - c.first) * (a.first - c.first) +(a.second - c.second) * (a.second - c.second);if (ab < 4 && bc < 4 && ac < 4) return 0;return 1;
}int Query(PII x) {cout << "? 1 " << x.first << " " << x.second << endl;fflush(stdout);string s;cin >> s;if (s == "Yes")return 1;elsereturn 0;
}void print(PII x) {cout << "! " << x.first << " " << x.second << endl;fflush(stdout);
}signed main() {cin >> n;PII a, b, c;c = {1, 1}, a = {1, n}, b = {n, 1};if (!check(a, b, c)) c = {n, n};while (check2(a, b, c)) {PII mid = get_mid(a, b, c);if (check(a, c, mid)) {b = c, c = mid;} else {a = b, b = c, c = mid;}}if (Query(a)) {print(a);} else if (Query(b)) {print(b);} else if (Query(c)) {print(c);}return 0;
}
J. Something that resembles Waring’s problem
大意:
给出一个数x,要求将其表示为不超过5个数的立方和的形式,x范围为1e100000
思路:
过于精妙…
来自:https://www.cnblogs.com/hyheng/p/14264678.html
python3写了一发没过 ,应该是科学计数法导致的精度丢失,长了个教训,高精度就用Python2
n = input()
n = int(n)
r = n % 6
r3 = r * r * r
print('5')
print('%d %d %d %d %d' %(r, ((n - r3) / 6 + 1), ((n - r3) / 6 - 1), (-(n - r3) / 6), (-(n - r3) / 6)))
K. Parabolic sorting
大意:
给出n个不相等的数,要求将其排列为前降后升的序列,每次操作可以将相邻的两个点交换,问最小多少次交换可以完成
思路:
对于每个点,考虑将其放到前面下降的区间还是后面上升的区间
如果放到前面区间,那么需要操作的就是前面比他小的数的个数
如果放到后面区间,那么需要操作的就是后面比他小的个数
所以每个点算一下前面后面的个数,取min,最后相加即可
可以用树状数组,线段树来维护
#include <bits/stdc++.h>using namespace std;
typedef long long LL;
int const N = 5e5 + 10;
LL c[N], n, a[N], l[N], r[N];
vector<LL> v;
unordered_map<LL, int> H;int lowbit(int x) { return x & -x; }void add(int x, int y) {for (int i = x; i <= n; i += lowbit(i)) c[i] += y;
}LL query(int x) {LL res = 0;for (int i = x; i; i -= lowbit(i)) res += c[i];return res;
}int main() {scanf("%lld", &n);memset(c, 0, sizeof c);v.clear();H.clear();for (int i = 1; i <= n; ++i) {scanf("%lld", &a[i]);v.push_back(a[i]);}sort(v.begin(), v.end());int cnt = 1;for (int i = 0; i < v.size(); ++i) H[v[i]] = cnt++; // 离散化LL res = 0;for (int i = n; i >= 1; --i) { // 计算每个H[a[i]]出现的次数r[i] = query(H[a[i]] - 1); // 加上H[a[i]-1]出现的总次数add(H[a[i]], 1); // 次数加一}for (int i = n; i >= 1; --i) {add(H[a[i]], -1);}for (int i = 1; i <= n; ++i) { // 计算每个H[a[i]]出现的次数l[i] = query(H[a[i]] - 1); // 加上H[a[i]-1]出现的总次数add(H[a[i]], 1); // 次数加一}for (int i = 1; i <= n; ++i) {res += min(r[i], l[i]);}cout << res << endl;return 0;
}
ICPC Central Russia Regional Contest (CRRC 19)相关推荐
- ICPC Central Europe Regional Contest 2019 K. K==S(AC自动机+矩阵快速幂)
Progressive hard octave rock tunes (so-called "phorts") are written using a specifific mus ...
- The 2019 ICPC Asia Shanghai Regional Contest
The 2019 ICPC Asia Shanghai Regional Contest 题号 题目 知识点 A Mr. Panda and Dominoes B Prefix Code C Maze ...
- 2018 ICPC Asia Jakarta Regional Contest
2018 ICPC Asia Jakarta Regional Contest 题号 题目 知识点 难度 A Edit Distance B Rotating Gear C Smart Thief D ...
- 2021 ICPC Southeastern Europe Regional Contest Werewolves(树上背包)
2021 ICPC Southeastern Europe Regional Contest Werewolves(树上背包) 链接 题意:给出一个n个节点的树(n≤3000n\le3000n≤300 ...
- 【题目记录】——The 2021 ICPC Asia Jinan Regional Contest
文章目录 C Optimal Strategy 组合数 H Game Coin K Search For Mafuyu 欧拉序列 题目集地址 The 2021 ICPC Asia Jinan Regi ...
- 2021 ICPC Southeastern Europe Regional Contest(更新至六题)
2021 ICPC Southeastern Europe Regional Contest A题签到 A. King of String Comparison 题意:给两个字符串,找出有多少对(l, ...
- 2019-2020 ICPC Asia Xuzhou Regional Contest【徐州现场赛】
题目: 209-2020 ICPC Asia Xuzhou Regional Onsite Contest E. Multiply 题意: 找到最大的 i 使得 z*x^i 是 y! 的因子 分析: ...
- ICPC 2019-2020 North-Western Russia Regional Contest 补题部分
已做A.M,E和H思路已经有了没调AC 已补BEJH 最终已完成ABEJHM B - Bad Treap 大佬题解 感觉这题就很玄学... #define IO ios::sync_with_stdi ...
- 2017 ACM ICPC Asia Shenyang Regional Contest 题解(10 / 13)【每日亿题2 / 16】
整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 目录 A.(2017 ICPC shenyang I)Little Boxes B.(2017 ICP ...
最新文章
- delphi 10 seattle 中 解决IOS 9 限制使用HTTP 服务问题
- [VNC] 分辨率, 退出全屏,
- android下载源代码
- Fabric架构演变之路
- MSF(五):客户端渗透
- 【Pytorch神经网络实战案例】27 MaskR-CNN内置模型实现语义分割
- 安装Python第三方库的常用方法和注意事项
- 软件工程(可行性研究讲解)
- 动手学深度学习(PyTorch实现)(四)--梯度消失与梯度爆炸
- python 系统时间24小时制_Python 日期和时间
- java是否存在引用传递_Java永远不会传递引用,对吧?
- 过拟合产生的原因有哪些
- Tool:Adobe Photoshop
- python 发送邮件正文字体设置_python 发送邮件
- js实现删除页面元素
- error: Microsoft Visual C++ 14.0 or greater is required. Get it with Microsoft C++ Build Tools终极方案
- 中国知网论文破解下载 (附:常用的网址)
- 基于element插件的表单验证及重置
- 注册中心原理和选型:Zookeeper、Eureka、Nacos、Consul和Etcd
- 网警如何查虚拟服务器,网警查高防云服务器
热门文章
- MATLAB科学计算机lnx代码,[2018年最新整理]Matlab科学计算.ppt
- pyspark lit 常量
- 鹰眼轨迹管理平台移植
- 24段魔尺,骆驼,小狗,金鱼,蝴蝶结
- 荣耀magic4.0系统是鸿蒙系统吗,快,不依赖于高刷!荣耀30 Pro+升级Magic UI 4.0后体验...
- ZOJ 1217 Eight(单向BFS+map)
- 2020年全省彩礼排名_2020国人彩礼地图:哪个省的彩礼最贵?
- Hibernate 编写测试类,进行增删改查 自动生成表
- python热图_python – 使用matplotlib中的3D数据生成热图
- pwn - 格式化字符串攻击