The 2017 China Collegiate Programming Contest, Hangzhou Site Solution
A: Super_palindrome
题面:给出一个字符串,求改变最少的字符个数使得这个串所有长度为奇数的子串都是回文串
思路:显然,这个字符串肯定要改成所有奇数位相同并且所有偶数位相同
那统计一下奇数位上哪个字符出现的个数最多,偶数位上哪个字符出现的个数最多
答案就是 n 减去它们
#include <bits/stdc++.h> using namespace std; #define N 110
#define INF 0x3f3f3f3f int t;
char s[N]; int odd[];
int even[]; int main()
{
scanf("%d", &t);
while (t--)
{
scanf("%s", s);
memset(odd, , sizeof odd);
memset(even, , sizeof even);
int len = strlen(s);
int Maxodd = , Maxeven = ;
for (int i = ; i < len; ++i)
{
if (i & )
odd[s[i]]++, Maxodd = max(Maxodd, odd[s[i]]);
else
even[s[i]]++, Maxeven = max(Maxeven, even[s[i]]);
}
printf("%d\n", len - Maxodd - Maxeven);
}
return ;
}
B: Master of Phi
题意:给定一个n,接下来n行输入p和q代表数字num有q个p因子,计算题中式子
思路:根据题中数字提取出公因数n,然后每个式子只是每个数的质因子乘上(1-1/p)。对于所有要求的式子,对于每个质因子p仅可能0-q中可能,所以所求式子就变成了∏((1-1/pi)*qi+1)所得值。
#include<bits/stdc++.h> using namespace std; #define N 110 typedef long long ll; const int MOD = ; inline ll qpow(ll x,ll n)
{
ll res = ;
while(n)
{
if(n & ) res = (res * x) % MOD;
x = (x * x) % MOD;
n >>= ;
}
return res;
} int m;
ll p[N],q[N];
ll tmp[N]; int main()
{
int t;
scanf("%d",&t);
while(t--)
{
scanf("%d",&m);
ll ans = ;
for(int i = ;i <= m; ++i)
{
scanf("%lld %lld",&p[i], &q[i]);
p[i] %= MOD;
ans = (ans * qpow(p[i], q[i])) % MOD;
p[i] = (p[i] - ) * qpow(p[i], MOD - ) % MOD;
tmp[i] = p[i] * q[i] % MOD;
}
for(int i = ; i <= m; ++i)
{
ans = (ans * (tmp[i] + ) % MOD) % MOD;
}
printf("%lld\n",ans);
}
return ;
}
C: Hakase and Nano
题面:有n堆石子,两个人轮流取,Hakase 一轮必须取两次,另一个人一轮取一次,最后取光的人胜利,给出先后手顺序,判断哪个人必胜
思路:通过两个人的简单模拟,可以发现Hakase的优势很大,它的必败情况很少。
以下四种为必败情况
H先手,并且所有石子堆都是1,并且石子堆数%3==0
H后手,并且所有石子堆都是1,并且石子堆数%3==1
H后手,并且有一个石子堆的个数不是1,其它全是1,并且石子堆数%3==0 || %3 == 1
#include<bits/stdc++.h> using namespace std; #define N 1000010 int n, d;
int arr[N]; int main()
{
int t;
scanf("%d",&t);
while(t--)
{
scanf("%d %d",&n,&d);
int num = ;
for(int i = ; i <= n; ++i)
{
scanf("%d",&arr[i]);
if(arr[i] > ) num++;
}
if(num >= )
{
puts("Yes");
continue;
}
if(d == )
{
if(num == && n % == ) puts("No");
else puts("Yes");
}
else if(d == )
{
if(num == && n % == ) puts("No");
else if(num == && (n % == || n % == )) puts("No");
else puts("Yes");
}
}
return ;
}
D:Master of Random
题意:给出一棵树,每个节点都有一个权值,对于第i个节点,它的father是random(0, i-1),求任意一颗子树的权值期望。
题意:对于一颗子树,它的权值为自身权值加上除自己以外的权值期望。对于节点i,那么i+1是节点i的子节点的概率为1/(1 + i),对于第i+2个节点是节点i的子节点的概率为1/(i+2)+1/(i+1)*1/(i+2)=1/(i+1),从而发现后面每个节点是i的子节点的概率都为1/(i+1)。那么第i个节点的权值期望就为ai+1/(i+1)*∑aj(j from i+1 to n-1)
#include<bits/stdc++.h> using namespace std; typedef long long ll; const int MOD = ; #define N 100010 inline ll qpow(ll x,ll n)
{
ll res = ;
while(n)
{
if(n & ) res = (res * x) % MOD;
x = (x * x) % MOD;
n >>= ;
}
return res;
} int n;
ll a[N];
ll sum[N]; int main()
{
int t;
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
for(int i = ;i < n; ++i)
{
scanf("%lld",&a[i]);
}
memset(sum, , sizeof sum);
for(int i = n - ; i >= ; --i)
{
sum[i] = (sum[i + ] + a[i]) % MOD;
}
ll ans = ;
for(int i = ;i < n; ++i)
{
ans = (ans + (a[i] + sum[i + ] * qpow(i + , MOD - ) % MOD) % MOD) % MOD;
}
ans = (ans * qpow(n, MOD - )) % MOD;
printf("%lld\n", ans);
}
return ;
}
E:Master of Subgraph
留坑。
F:Hearthock
留坑。
G:Marriage
留坑。
H:Master of Connexted Component
留坑。
I:Master of Matrix
留坑
J:Master of GCD
题意:有n个数刚开始都是1,然后每次操作使得(l, r)区间的所有数都乘上x,x == 2 || x ==3 求所有数的最大公约数
思路:显然,我们找出乘2最少的次数n,以及乘3最少的次数m 答案就是2^n * 3*m
#include<bits/stdc++.h> using namespace std; typedef long long ll;
const int INF = 0x3f3f3f3f;
const int p = ;
#define N 100010 int n, m; ll sum_2[N], sum_3[N]; ll qpow(ll x,ll n)
{
ll res = ;
while(n)
{
if(n & ) res = (res * x) %p;
x = (x * x) % p;
n >>= ;
}
return res;
} int main()
{
int t;
scanf("%d",&t);
while(t--)
{
memset(sum_2, , sizeof sum_2);
memset(sum_3, , sizeof sum_3);
scanf("%d %d",&n,&m);
for(int i = ; i < m; ++i)
{
int l,r,x;
scanf("%d %d %d",&l ,&r ,&x);
if(x == )
{
sum_2[l]++;
sum_2[r + ]--;
}
else
{
sum_3[l]++;
sum_3[r + ]--;
}
}
ll Min_2 = INF;
ll Min_3 = INF;
ll op_2 = , op_3 = ;
for(int i = ; i <= n; ++i)
{
op_2 += sum_2[i];
Min_2 = min(Min_2, op_2);
op_3 += sum_3[i];
Min_3 = min(Min_3, op_3);
}
ll ans = ;
ans = (ans * qpow(, Min_2)) % p;
ans = (ans * qpow(, Min_3)) % p;
printf("%lld\n",ans);
}
return ;
}
K:Master of Sequence
题意:两组序列,三种操作。
思路:ai很小,我们可以考虑对ai作文章。可以把那个式子拆开看成 floor(t / ai) - (bi / ai)
然后预处理出bi / ai 的整数部分和余数部分 并且将所有整数部分相加得到sum
然后查询的时候二分枚举t,查询的时候用去考虑对于同一个ai, 如果t/ai 的余数小于 bi/ai 的余数 那就需要多减一 然后加上整数部分
然后前缀和处理一下,二分的时间复杂度为logn * 1000
修改的时间复杂度为O(1000)
#include <bits/stdc++.h> using namespace std; #define N 100010 #define M 1010 #define ll long long #define INFLL (ll)1e12 int arr[N], brr[N]; int a[M][M]; ll sum; int n, m; inline bool check(ll mid, ll k)
{
ll tot = -sum;
for (int i = ; i <= ; ++i)
{
ll tmp = mid / i;
ll MOD = mid % i;
tot += tmp * a[i][];
tot -= a[i][MOD + ];
}
return tot >= k;
} int main()
{
int t; scanf("%d", &t);
while (t--)
{
scanf("%d%d", &n, &m);
for (int i = ; i <= n; ++i)
scanf("%d", arr + i);
for (int i = ; i <= n; ++i)
scanf("%d", brr + i);
memset(a, , sizeof a);
sum = ;
for (int i = ; i <= n; ++i)
{
a[arr[i]][brr[i] % arr[i]]++;
sum += brr[i] / arr[i];
}
for (int i = ; i <= ; ++i)
{
for (int j = ; j >= ; --j)
{
a[i][j] += a[i][j + ];
}
}
int op, x, y, k;
while (m--)
{
scanf("%d", &op);
if (op == )
{
scanf("%d%d", &x, &y);
int tmp = arr[x]; arr[x] = y;
for (int i = ; i <= brr[x] % tmp; ++i)
a[tmp][i]--;
sum -= brr[x] / tmp;
sum += brr[x] / arr[x];
for (int i = ; i <= brr[x] % arr[x]; ++i)
a[arr[x]][i]++;
}
else if (op == )
{
scanf("%d%d", &x, &y);
int tmp = brr[x]; brr[x] = y;
for (int i = ; i <= tmp % arr[x]; ++i)
a[arr[x]][i]--;
sum -= tmp / arr[x];
sum += brr[x] / arr[x];
for (int i = ; i <= brr[x] % arr[x]; ++i)
a[arr[x]][i]++;
}
else if (op == )
{
scanf("%d", &k);
ll l = , r = INFLL, ans = -;
while (r - l >= )
{
ll mid = (l + r) >> ;
if (check(mid, (ll)k))
{
ans = mid;
r = mid - ;
}
else
{
l = mid + ;
}
}
printf("%lld\n", ans);
}
}
}
return ;
}
L:Mod, Xor and Everything
留坑。
The 2017 China Collegiate Programming Contest, Hangzhou Site Solution的更多相关文章
- The 2019 China Collegiate Programming Contest Harbin Site F. Fixing Banners
链接: https://codeforces.com/gym/102394/problem/F 题意: Harbin, whose name was originally a Manchu word ...
- 2017 China Collegiate Programming Contest Final (CCPC 2017)
题解右转队伍wiki https://acm.ecnu.edu.cn/wiki/index.php?title=2017_China_Collegiate_Programming_Contest_Fi ...
- The 2019 China Collegiate Programming Contest Harbin Site
题解: https://files.cnblogs.com/files/clrs97/HarbinEditorialV2.zip Code: A. Artful Paintings /* let x= ...
- The 2019 China Collegiate Programming Contest Harbin Site K. Keeping Rabbits
链接: https://codeforces.com/gym/102394/problem/K 题意: DreamGrid is the keeper of n rabbits. Initially, ...
- The 2019 China Collegiate Programming Contest Harbin Site J. Justifying the Conjecture
链接: https://codeforces.com/gym/102394/problem/J 题意: The great mathematician DreamGrid proposes a con ...
- The 2019 China Collegiate Programming Contest Harbin Site I. Interesting Permutation
链接: https://codeforces.com/gym/102394/problem/I 题意: DreamGrid has an interesting permutation of 1,2, ...
- 模拟赛小结:2017 China Collegiate Programming Contest Final (CCPC-Final 2017)
比赛链接:传送门 前期大顺风,2:30金区中游.后期开题乏力,掉到银尾.4:59绝杀I,但罚时太高卡在银首. Problem A - Dogs and Cages 00:09:45 (+) Solve ...
- 模拟赛小结:The 2019 China Collegiate Programming Contest Harbin Site
比赛链接:传送门 上半场5题,下半场疯狂挂机,然后又是差一题金,万年银首也太难受了. (每次银首都会想起前队友的灵魂拷问:你们队练习的时候进金区的次数多不多啊?) Problem J. Justify ...
- The 2015 China Collegiate Programming Contest A. Secrete Master Plan hdu5540
Secrete Master Plan Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Othe ...
随机推荐
- linux文件类型详解
*nix 有各种的文件类型 当#ls -la后,会发现在权限位前有个 - 有些是 b 有些是 d 这个位置就是文件类型的标示 普通文件regular file, 用 - (破折号)标示, 比如 ...
- js积累
动态加载JS文件(function (d) { var t=d.createElement("script");t.type="text/javascript" ...
- java基础---->多线程之ThreadLocal(七)
这里学习一下java多线程中的关于ThreadLocal的用法.人时已尽,人世还长,我在中间,应该休息. ThreadLocal的简单实例 一.ThreadLocal的简单使用 package com ...
- 谈谈KV存储集群的设计要点
版权声明:本文由廖念波原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/150 来源:腾云阁 https://www.qclo ...
- 存储总量达20T的MySQL实例,如何完成迁移?
版权声明:本文由王亮原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/122 来源:腾云阁 https://www.qclou ...
- Fatal error Using $this when not in object context in
大致意思是 $this 没有上下文,原因是没有对此类进行实例化. 出现此错误的原因是:在FileCommand.php中使用 $this->方法/属性. $this 不是不可以用,而是要看情况用 ...
- all index range ref eq_ref const system 索引type说明
背景知识 在使用sql的过程中经常需要建立索引,而每种索引是怎么处罚的又是怎么起到作用的,首先必须知道索引和索引的类型. 索引类型type 我们可以清楚的看到type那一栏有index ALL eq_ ...
- 聊聊对APM的理解
本文主要从以下几个列举对APM的认识: -什么是APM工具 -为什么要用APM工具,APM工具的价值在哪里: -什么样的APM工具适合于传统金融业: -如何用好APM工具: -精准告警 - ...
- .net asp 在1.asp页面嵌入另一个页面2.asp
<iframe src="http://www.baidu.com" width="100%" height="100%" onloa ...
- WCF(四) 绑定
绑定 是一个制定好的通道栈,包含了协议通道,传输通道和编码器.从功能上来看,一个绑定集成了通信模式.可靠性.安全性.事务传播和互操作性 绑定方式分两种:代码中和配置文件中绑定 1: 2: 3.配置ap ...