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的更多相关文章

  1. 【AtCoder】CADDi 2018

    C - Product and GCD 题解 直接分解质因数,然后gcd每次多一个质因数均摊到每个\(N\)上的个数 代码 #include <bits/stdc++.h> #define ...

  2. ACM ICPC, Amman Collegiate Programming Contest (2018) Solution

    Solution A:Careful Thief 题意:给出n个区间,每个区间的每个位置的权值都是v,然后找长度为k的区间,使得这个区间的所有位置的权值加起来最大,输出最大权值, 所有区间不重叠 思路 ...

  3. Good Bye 2018 Solution

    A. New Year and the Christmas Ornament 签到. #include <bits/stdc++.h> using namespace std; int a ...

  4. Avito Cool Challenge 2018 Solution

    A. Definite Game 签. #include <bits/stdc++.h> using namespace std; int main() { int a; while (s ...

  5. ACM ICPC, JUST Collegiate Programming Contest (2018) Solution

    A:Zero Array 题意:两种操作, 1 p v  将第p个位置的值改成v  2  查询最少的操作数使得所有数都变为0  操作为可以从原序列中选一个非0的数使得所有非0的数减去它,并且所有数不能 ...

  6. ACM ICPC, Damascus University Collegiate Programming Contest(2018) Solution

    A:Martadella Stikes Again 水. #include <bits/stdc++.h> using namespace std; #define ll long lon ...

  7. ZOJ Monthly, March 2018 Solution

    A - Easy Number Game 水. #include <bits/stdc++.h> using namespace std; #define ll long long #de ...

  8. ZOJ Monthly, January 2018 Solution

    A - Candy Game 水. #include <bits/stdc++.h> using namespace std; #define N 1010 int t, n; int a ...

  9. ZOJ Monthly, June 2018 Solution

    A - Peer Review Water. #include <bits/stdc++.h> using namespace std; int t, n; int main() { sc ...

随机推荐

  1. Python 字符串处理(转)

    转自:黄聪:Python 字符串操作(替换.删除.截取.复制.连接.比较.查找.包含.大小写转换.分割等) http://www.cnblogs.com/huangcong/archive/2011/ ...

  2. m2014-architecture-imgserver->利用Squid反向代理搭建CDN缓存服务器加快Web访问速度

    案例:Web服务器:域名www.abc.com IP:192.168.21.129 电信单线路接入访问用户:电信宽带用户.移动宽带用户出现问题:电信用户打开www.abc.com正常,移动用户打开ww ...

  3. iPad UIPopoverController弹出窗口的位置和坐标

    本文转载至:http://blog.csdn.net/chang6520/article/details/7921181 TodoViewController *contentViewControll ...

  4. Android 使用CheckBox实现多选效果

    CheckBox:复选框1.有两种状态: 选中状态(true),未选中状态(false)2.属性: android:id="@+id/checkbox" android:layou ...

  5. 谷歌Volley网络框架讲解——HttpStack及其实现类

    前两篇已经对网络请求流程已经梳理了个大概,这次我们着重看一下HttpStack和它的其实现类.我们之前在Network篇讲过它仅有一个实现类,而今天我们讲的HttpStack有两个实现类. 其中Htt ...

  6. diamond types are not supported at this language level

    在intellij导入git项目之后出现 diamond types are not supported at this language level错误 或者String等报错 File->P ...

  7. LeetCode——Search a 2D Matrix II

    Description: Write an efficient algorithm that searches for a value in an m x n matrix. This matrix ...

  8. 【BZOJ2946】[Poi2000]公共串 后缀数组+二分

    [BZOJ2946][Poi2000]公共串 Description        给出几个由小写字母构成的单词,求它们最长的公共子串的长度. 任务: l        读入单词 l        计 ...

  9. 常用的sass编译库

    @charset "UTF-8"; /*引进图片合并给一个变量(后面会用到这个变量)*/ $sprites:sprite-map("pwd/*.png",$sp ...

  10. 170519、FastDFS分布式文件系统的安装与使用(单节点)

    基于 于 D Do ubbo 的分布 式系统架构 视频 教程 高 级篇S FastDFS 分布 式 文件系统的安装与使用 (单 节点)跟踪 服务器 : 192.168.4.12 21 1 (edu- ...