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. Objective-C语法之KVC使用

    转自:http://www.cnblogs.com/stoic/archive/2012/07/20/2601315.html 除了一般的赋值和取值的方法,我们还可以用Key-Value-Coding ...

  2. Nginx(二)-- 配置文件之虚拟主机配置

    1.配置文件与解释 #user nobody; worker_processes 1; # 设置工作子进程,默认是1个工作子进程,可以修改,一般设置为CPU的总核数 #error_log logs/e ...

  3. linux下jdk,tomcat的安装

    一.安装jdk 1.jdk下载地址: http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.ht ...

  4. 《转》我眼中的C# 3.0

    本文转载自Allen Lee's Magic 缘起 每次有新技术发布时,我们总能感受到两种截然不同的情绪:一种是恐惧和抵抗,伴随着这种情绪的还有诸如"C# 2.0用的挺好的,为什么要在C# ...

  5. tomcat的添加及jar包和jQuery的加载

  6. Rsync匿名访问漏洞

    前言 前两天总结了互联网或者说IT公司内网常见的漏洞,然后决定针对还没学习过不了解的漏洞进行学习了解,所以准备一一针对来研习,今天是第一篇,立一个Flag,争取今年搞定,为啥说的这么艰难,因为平时工作 ...

  7. 在Linux中的.iso文件的处理方法

    1,mkdir /a 2,mount MLNX_OFED_LINUX-4.4-2.0.7.0-rhel7.3-x86_64.iso  /a3,cd /a4,这样就可以对文件进行操作了

  8. SeaJS简介一:由来,特点以及优势

    由来: 在软件开发过程中,模块化编程思想已经习以为常了,模块化编程不仅仅给开发团队带来效率方面上的好处,还能够让开发的项目或者产品维护成本大大降低. 那么,在WEB开发过程中JS脚本语言已经不可或缺了 ...

  9. Android Activity 半透明效果(Translucent)

    本文转自:http://norety.javaeye.com/blog/648725 今天试着做activity半透明的效果,做出来之后才发现想复杂了!很简单的几句就可以实现,不多说了,贴代码! 1. ...

  10. javaWeb中的文件上传下载

    在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用 ...