Atcoder CADDi 2018 Solution
C - Product and GCD
Solved.
题意:
给出$n个数$的乘积,求$这n个数$的最大的可能是GCD
思路:
分解质因子,那么$每个质因子的贡献就是其质因子个数/ n的乘积$
1 #include <bits/stdc++.h> 2 using namespace std; 3 4 #define ll long long 5 ll n, p; 6 7 int main() 8 { 9 while (scanf("%lld%lld", &n, &p) != EOF) 10 { 11 if (n == 1) 12 { 13 printf("%lld\n", p); 14 continue; 15 } 16 ll res = 1; 17 for (ll i = 2; i * i <= p; ++i) 18 { 19 ll tmp = 0; 20 while (p % i == 0) 21 { 22 ++tmp; 23 p /= i; 24 } 25 while (tmp >= n) 26 { 27 tmp -= n; 28 res *= i; 29 } 30 } 31 printf("%lld\n", res); 32 } 33 return 0; 34 }
View Code
D - Harlequin
Solved.
题意:
有$n种颜色的苹果,每种颜色有a_i个,每次可以选择若干个不同颜色的苹果拿掉,轮流拿,谁不能拿谁输$
问 先手胜还是后手胜
思路:
必败局面是当前场上所有颜色的苹果都是偶数个,这样的话,你拿什么,对方跟着你拿,对方肯定胜利
那么必胜局面就是当前场上存在有若干种奇数个颜色的苹果,取掉这些苹果,转换成必败局面留给对方就好了
简单判一判就没了
1 #include <bits/stdc++.h> 2 using namespace std; 3 4 int n, x; 5 6 int main() 7 { 8 while (scanf("%d", &n) != EOF) 9 { 10 x = 0; 11 for (int i = 1, y; i <= n; ++i) 12 { 13 scanf("%d", &y); 14 x += y & 1; 15 } 16 puts(x ? "first" : "second"); 17 } 18 return 0; 19 }
View Code
E - Negative Doubling
Upsolved.
题意:
给出n个数,对每个数的操作只有 $\cdot -2$ ,求最少多少次操作使得序列变成非下降序列
思路:
我们考虑序列中如果存在正数和负数,那么必然存在一个界限,左边全是负数,右边全是正数
那么我们可以预处理出
$f[i] 表示 使得从i开始是一个非下降序列的最小花费$
$g[i]表示 i以及i以前是一个非下降序列,且全都是负数的最小花费$
维护的过程可以用一个队列
刚开始以为如果当前数比之前的数不满足大小关系,后面的数或者前面的数全都要动
但实际上并不是这样,
比如说
5 3 4 1000000
推到5的时候 只有 3 和 4 要改变
1 #include <bits/stdc++.h> 2 using namespace std; 3 4 #define ll long long 5 #define N 200010 6 #define pii pair <int, int> 7 int n; 8 ll a[N], b[N], f[N], g[N], lazy; 9 10 void Run() 11 { 12 while (scanf("%d", &n) != EOF) 13 { 14 for (int i = 1; i <= n; ++i) scanf("%lld", a + i); 15 queue <pii> q; 16 f[n] = 0; 17 for (int i = n - 1; i >= 1; --i) 18 { 19 f[i] = f[i + 1]; 20 if (a[i] > a[i + 1]) 21 { 22 ll tmp = a[i + 1]; 23 int cnt = 0; 24 while (tmp < a[i]) 25 { 26 tmp *= 4; 27 cnt += 2; 28 } 29 int x = i; 30 while (!q.empty()) 31 { 32 f[i] += 1ll * (q.front().second - x) * cnt; 33 if (q.front().first <= cnt) cnt -= q.front().first; 34 else 35 { 36 pii tmpp = q.front(); 37 tmpp.first -= cnt; 38 cnt = 0; 39 q.pop(); 40 q.push(tmpp); 41 break; 42 } 43 x = q.front().second; 44 q.pop(); 45 } 46 f[i] += 1ll * (n - x) * cnt; 47 } 48 else 49 { 50 ll tmp = a[i]; 51 int cnt = 0; 52 while (tmp * 4 <= a[i + 1]) 53 { 54 tmp *= 4; 55 cnt += 2; 56 } 57 if (cnt) q.push(pii(cnt, i)); 58 } 59 } 60 while (!q.empty()) q.pop(); 61 g[1] = 1; 62 b[1] = -a[1]; 63 for (int i = 2; i <= n; ++i) 64 { 65 g[i] = g[i - 1] + 1; 66 b[i] = -a[i]; 67 if (b[i] < b[i - 1]) 68 { 69 ll tmp = b[i - 1]; 70 int cnt = 0; 71 while (tmp > b[i]) 72 { 73 tmp *= 4; 74 cnt += 2; 75 } 76 int x = i; 77 while (!q.empty()) 78 { 79 g[i] += 1ll * (x - q.front().second) * cnt; 80 if (q.front().first <= cnt) cnt -= q.front().first; 81 else 82 { 83 pii tmpp = q.front(); 84 q.pop(); 85 tmpp.first -= cnt; 86 cnt = 0; 87 q.push(tmpp); 88 break; 89 } 90 x = q.front().second; 91 q.pop(); 92 } 93 g[i] += 1ll * (x - 1) * cnt; 94 } 95 else 96 { 97 ll tmp = b[i]; 98 int cnt = 0; 99 while (tmp * 4 >= b[i - 1]) 100 { 101 tmp *= 4; 102 cnt += 2; 103 } 104 if (cnt) q.push(pii(cnt, i)); 105 } 106 } 107 ll res = min(f[1], g[n]); 108 for (int i = 1; i < n; ++i) res = min(res, g[i] + f[i + 1]); 109 printf("%lld\n", res); 110 } 111 } 112 113 114 int main() 115 { 116 #ifdef LOCAL 117 freopen("Test.in", "r", stdin); 118 #endif 119 120 Run(); 121 return 0; 122 }
View Code
转载于:https://www.cnblogs.com/Dup4/p/10163562.html
Atcoder CADDi 2018 Solution相关推荐
- AtCoder Beginner 217 Solution
AtCoder Beginner 217 Solution\operatorname{AtCoder\ Beginner\ 217\ Solution}AtCoder Beginner 217 So ...
- [atcoder caddi]E - Negative Doubling——栈+贪心
题目大意: 给定nnn个正整数aia_iai,每次可以将一个数乘以-2,求最小的操作次数使得最后的序列单调不降. 思路: 最后的序列一定是前面为负数,后面为正数. 于是我们枚举正数负数的分割点,这样 ...
- 注定与众不同_没有原因的数据注定会使我们失败
注定与众不同 In 2008 the World Economic Forum reported the beginning of a new age, that of big data. Enter ...
- 数据分析师入门_数据分析师入门基础指南
数据分析师入门 Back in the summer of 2018, I was just starting my first internship as a Data Analyst. 早在201 ...
- 所在地区级别_在人所在的地方
所在地区级别 I've spent more than three years trekking around the globe talking about CSS Grid Layout. Inv ...
- 穹顶灯打不出阴暗面_知更鸟的崛起为愤怒的交易者带来了阴暗面
穹顶灯打不出阴暗面 By Robert Schmidt and Ben Bain 罗伯特·施密特(Robert Schmidt)和本·贝恩(Ben Bain) Robinhood Markets ha ...
- Caddi Programming Contest 2021(AtCoder Beginner Contest 193) 题解
Caddi Programming Contest 2021(AtCoder Beginner Contest 193) A - Discount 打折浮点数除即可 B - Play Snuke 枚举 ...
- AtCoder SoundHound Inc. Programming Contest 2018 E + Graph (soundhound2018_summer_qual_e)
原文链接https://www.cnblogs.com/zhouzhendong/p/AtCoder-SoundHound-Inc-Programming-Contest-2018-E.html 题目 ...
- COCI 2018/2019 CONTEST #2 T4 Maja T5Sunčanje Solution
COCI 2018/2019 CONTEST #2 T4 T5 Solution abstract 花式暴力 #2 T5 Sunčanje 题意 按顺序给你1e5个长方形(左下角坐标&& ...
最新文章
- hdu4876 深搜+(随机枚举剪枝)
- 软件工程第三次作业-功能测试
- 1.1.10 从二分查找BinarySearch开启算法学习之路---《java算法第四版》
- Java加密解密快速入门上篇【包括MD5、BASE64、DES、RSA等算法】
- java年轻代频繁gc_年轻代频繁ParNew GC,导致http服务rt飙高
- django urls路由匹配分发
- Pr 入门教程,如何创建序列?
- matlab 正弦波 fft,【求助】正弦信号序列fft频谱分析!!!
- 中小型软件产品解决方案模板
- 大数据 数据库 评测_中国信通院公布第九批大数据产品能力评测结果,65款产品通过...
- 新题速看~2021阿里、腾讯、字节都在问的SQL数据库笔试题及答案都给你整理好啦
- Linux离线安装pyhive使用 python连接hive
- dell服务器开机自动进入bios设置,戴尔服务器不能进入BIOS的解决方案
- mysql数值比中文检索快_【mysql】利用全文索引实现中文的快速查找
- 解决openwrt package目录下多个文件夹重名编译警告(call subdir 函数)
- 绿色碳点溶液|碳量子点激发波长:365nm发射波长:525nm
- 指甲半月痕的奥秘!!
- 10分钟手把手教你用Android手撸一个简易的个人记账App
- VC通过ADO操作Access2007数据库
- 富士康本科计算机,富士康计算机 南开大学【深圳成考】