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 ...
随机推荐
- 安装memcacheq
1.下载memcacheq包 下载地址:http://code.google.com/p/memcacheq/downloads/list 解压包:# tar -zxvf memcache ...
- C++中的字节对齐分析
struct A { int a; char b; short c; }; struct B { char a; int b; short c; }; #pragma pack(2) struct C ...
- js中hover事件时候的BUG以及解决方法
hover事件是我们在开发前段时候遇到的稀松平常的问题,但是有没有发现会出现有一个BUg,比如,你移动到一个元素上,让它执行一个方法,然后你快速的移入移出的时候,他会进行亮瞎你眼睛的频闪效果,而且跟得 ...
- 为什么使用eval()将json字符串转换为对象要多加一个小括号
使用eval()将json字符串转换为对象要多加一个小括号: 关于eval()函数的具体用法这里就不多介绍了,具体可以参阅javascript的eval()方法一章节,下面就介绍一下为什么使用eval ...
- java基础---->多线程之ThreadLocal(七)
这里学习一下java多线程中的关于ThreadLocal的用法.人时已尽,人世还长,我在中间,应该休息. ThreadLocal的简单实例 一.ThreadLocal的简单使用 package com ...
- 【jQuery系列之插件】jquery插件之jquery-validation
equalTo方法: equalTo: function( value, element, param ) { // Bind to the blur event of the target in o ...
- Javaweb程序打包或exe执行文件
java程序的打包与发布 这里主要是讲解一下怎样将 Java程序打包成独立运行的exe程序包,以下这种方法应该是最佳的解决方案了.NetDuke的EXE程序包了是使用这种方案制作的.在操作步骤上还是比 ...
- Laravel 5.7 No 'Access-Control-Allow-Origin' header is present on the request resource
前后端项目跨域访问时会遇到此问题,解决方法如下: 创建一个中间件 php artisan make:middleware EnableCrossRequestMiddleware 该中间件的文件路径为 ...
- Redis集群管理(二)
1.进入集群客户端 任意选一个redis节点,进入redis 所在目录 cd /redis 所在目录/src/ ./redis-cli -h 本地节点的ip -p redis的端口号 -a 密码 [r ...
- model 模型层
using System; namespace MODEL { [Serializable] /// <summary> /// 作者: liuhaitao /// 描述: 实体层 -- ...