Atcoder CADDi 2018 Solution
C - Product and GCD
Solved.
题意:
给出$n个数$的乘积,求$这n个数$的最大的可能是GCD
思路:
分解质因子,那么$每个质因子的贡献就是其质因子个数/ n的乘积$
#include <bits/stdc++.h>
using namespace std; #define ll long long
ll n, p; int main()
{
while (scanf("%lld%lld", &n, &p) != EOF)
{
if (n == )
{
printf("%lld\n", p);
continue;
}
ll res = ;
for (ll i = ; i * i <= p; ++i)
{
ll tmp = ;
while (p % i == )
{
++tmp;
p /= i;
}
while (tmp >= n)
{
tmp -= n;
res *= i;
}
}
printf("%lld\n", res);
}
return ;
}
D - Harlequin
Solved.
题意:
有$n种颜色的苹果,每种颜色有a_i个,每次可以选择若干个不同颜色的苹果拿掉,轮流拿,谁不能拿谁输$
问 先手胜还是后手胜
思路:
必败局面是当前场上所有颜色的苹果都是偶数个,这样的话,你拿什么,对方跟着你拿,对方肯定胜利
那么必胜局面就是当前场上存在有若干种奇数个颜色的苹果,取掉这些苹果,转换成必败局面留给对方就好了
简单判一判就没了
#include <bits/stdc++.h>
using namespace std; int n, x; int main()
{
while (scanf("%d", &n) != EOF)
{
x = ;
for (int i = , y; i <= n; ++i)
{
scanf("%d", &y);
x += y & ;
}
puts(x ? "first" : "second");
}
return ;
}
E - Negative Doubling
Upsolved.
题意:
给出n个数,对每个数的操作只有 $\cdot -2$ ,求最少多少次操作使得序列变成非下降序列
思路:
我们考虑序列中如果存在正数和负数,那么必然存在一个界限,左边全是负数,右边全是正数
那么我们可以预处理出
$f[i] 表示 使得从i开始是一个非下降序列的最小花费$
$g[i]表示 i以及i以前是一个非下降序列,且全都是负数的最小花费$
维护的过程可以用一个队列
刚开始以为如果当前数比之前的数不满足大小关系,后面的数或者前面的数全都要动
但实际上并不是这样,
比如说
5 3 4 1000000
推到5的时候 只有 3 和 4 要改变
#include <bits/stdc++.h>
using namespace std; #define ll long long
#define N 200010
#define pii pair <int, int>
int n;
ll a[N], b[N], f[N], g[N], lazy; void Run()
{
while (scanf("%d", &n) != EOF)
{
for (int i = ; i <= n; ++i) scanf("%lld", a + i);
queue <pii> q;
f[n] = ;
for (int i = n - ; i >= ; --i)
{
f[i] = f[i + ];
if (a[i] > a[i + ])
{
ll tmp = a[i + ];
int cnt = ;
while (tmp < a[i])
{
tmp *= ;
cnt += ;
}
int x = i;
while (!q.empty())
{
f[i] += 1ll * (q.front().second - x) * cnt;
if (q.front().first <= cnt) cnt -= q.front().first;
else
{
pii tmpp = q.front();
tmpp.first -= cnt;
cnt = ;
q.pop();
q.push(tmpp);
break;
}
x = q.front().second;
q.pop();
}
f[i] += 1ll * (n - x) * cnt;
}
else
{
ll tmp = a[i];
int cnt = ;
while (tmp * <= a[i + ])
{
tmp *= ;
cnt += ;
}
if (cnt) q.push(pii(cnt, i));
}
}
while (!q.empty()) q.pop();
g[] = ;
b[] = -a[];
for (int i = ; i <= n; ++i)
{
g[i] = g[i - ] + ;
b[i] = -a[i];
if (b[i] < b[i - ])
{
ll tmp = b[i - ];
int cnt = ;
while (tmp > b[i])
{
tmp *= ;
cnt += ;
}
int x = i;
while (!q.empty())
{
g[i] += 1ll * (x - q.front().second) * cnt;
if (q.front().first <= cnt) cnt -= q.front().first;
else
{
pii tmpp = q.front();
q.pop();
tmpp.first -= cnt;
cnt = ;
q.push(tmpp);
break;
}
x = q.front().second;
q.pop();
}
g[i] += 1ll * (x - ) * cnt;
}
else
{
ll tmp = b[i];
int cnt = ;
while (tmp * >= b[i - ])
{
tmp *= ;
cnt += ;
}
if (cnt) q.push(pii(cnt, i));
}
}
ll res = min(f[], g[n]);
for (int i = ; i < n; ++i) res = min(res, g[i] + f[i + ]);
printf("%lld\n", res);
}
} int main()
{
#ifdef LOCAL
freopen("Test.in", "r", stdin);
#endif Run();
return ;
}
Atcoder CADDi 2018 Solution的更多相关文章
- 【AtCoder】CADDi 2018
C - Product and GCD 题解 直接分解质因数,然后gcd每次多一个质因数均摊到每个\(N\)上的个数 代码 #include <bits/stdc++.h> #define ...
- ACM ICPC, Amman Collegiate Programming Contest (2018) Solution
Solution A:Careful Thief 题意:给出n个区间,每个区间的每个位置的权值都是v,然后找长度为k的区间,使得这个区间的所有位置的权值加起来最大,输出最大权值, 所有区间不重叠 思路 ...
- Good Bye 2018 Solution
A. New Year and the Christmas Ornament 签到. #include <bits/stdc++.h> using namespace std; int a ...
- Avito Cool Challenge 2018 Solution
A. Definite Game 签. #include <bits/stdc++.h> using namespace std; int main() { int a; while (s ...
- ACM ICPC, JUST Collegiate Programming Contest (2018) Solution
A:Zero Array 题意:两种操作, 1 p v 将第p个位置的值改成v 2 查询最少的操作数使得所有数都变为0 操作为可以从原序列中选一个非0的数使得所有非0的数减去它,并且所有数不能 ...
- ACM ICPC, Damascus University Collegiate Programming Contest(2018) Solution
A:Martadella Stikes Again 水. #include <bits/stdc++.h> using namespace std; #define ll long lon ...
- ZOJ Monthly, March 2018 Solution
A - Easy Number Game 水. #include <bits/stdc++.h> using namespace std; #define ll long long #de ...
- ZOJ Monthly, January 2018 Solution
A - Candy Game 水. #include <bits/stdc++.h> using namespace std; #define N 1010 int t, n; int a ...
- ZOJ Monthly, June 2018 Solution
A - Peer Review Water. #include <bits/stdc++.h> using namespace std; int t, n; int main() { sc ...
随机推荐
- 2011年冬斯坦福大学公开课 iOS应用开发教程学习笔记(第三课)
第二课名称是:Objective-C 回顾上节课的内容: 创建了单个MVC模式的项目 显示项目的各个文件,显示或隐藏导航,Assistant Editor, Console, Object Libra ...
- 写了一个简单的CGI Server
之前看过一些开源程序的源码,也略微知道些Apache的CGI处理程序架构,于是用了一周时间,用C写了一个简单的CGI Server,代码算上头文件,一共1200行左右,难度中等偏上,小伙伴可以仔细看看 ...
- ResourcesCompat和ContextCompat
getResources().getDrawable() 过时的解决方法 当你这个Drawable不受主题影响时 ResourcesCompat.getDrawable(getResources(), ...
- piblog 0.1
搭建开发环境首先,确认系统安装的Python版本是2.7.x. $ python --version Python 然后,安装开发Web App需要的第三方库:$ sudo pip install j ...
- JavaIO再回顾
File类 JavaIO访问文件名和文件检测相关操作 分隔符最好是使用File类提供的File.separator,使程序更加的健壮. File类提供的方法基本上是见名知意,例如getName()就是 ...
- [SCOI2008] 着色方案[高维dp]
321. [SCOI2008] 着色方案 ★★★ 输入文件:color.in 输出文件:color.out 简单对比时间限制:1 s 内存限制:64 MB 题目背景: 有n个木块排成一 ...
- [UML]UML 教程 - 第二部分
UML作为软件开发典型的开发过程 业务过程模型创建 业务过程模型被用来定义发生在企业或组织内部的高级业务活动和业务过程,并且是建立用例模型的基础.一般来说业务过程模型比一个软件系统所能实现的更多(比如 ...
- ios8 gps定位不好用
这样让iOS8正常使用定位功能呢? <1>你需要在info.plist表里面添加两条变量 在Info.plist中加入两个缺省没有的字段 NSLocationAlwaysUsageDesc ...
- svn-maven-tomcat自动发布脚本
#!/bin/sh #svn-maven-tomcat自动发布脚本 #变量设置 svnpath=svn://10.60.10.120/研发部/xx-maven svnusername=xxx svnp ...
- Android官方架构组件介绍之LiveData
LiveData LiveData是一个用于持有数据并支持数据可被监听(观察).和传统的观察者模式中的被观察者不一样,LiveData是一个生命周期感知组件,因此观察者可以指定某一个LifeCycle ...