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 ...
随机推荐
- php和mySQL结合使用
首先,我建立了一个名为class的表,里面有cid,cname,cnum,我想用php代码来实现这一效果,步骤如下: 1.链接数据库 mysqli_set_charset($coon,"ut ...
- 【IOS6.0 自学瞎折腾】(五)应用程序的启动过程和Application生命周期
一 :main函数入口 看下项目资源结构,其实程序的入口也是在main.m里面. #import <UIKit/UIKit.h> #import "BvinAppDelegate ...
- Android开发 Android Studio2.0 教程从入门到精通Windows版 - 入门篇
第一篇 介绍了Android Studio开发环境以及Genymotion虚拟机安装方法,本节将给大家介绍如何使用Android Studio开发应用. 开发第一应用 可以开发属于自己的应用,是否有点 ...
- Java三方---->pdf框架之IText的使用
在企业的信息系统中,报表处理一直占比较重要的作用t.通过在服务器端使用Jsp或JavaBean生成PDF报表,客户端采用超链接显示或下载得到生成的报表,这样就很好的解决了B/S系统的报表处理问题.今天 ...
- Zabbix漏洞汇总
一.zabbix: zabbix是监控是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案.zabbix能监视各种网络参数,保证服务器系统的安全运营:并提供灵活的通知机制以让 ...
- ios 图片拉伸不变形的方法
如果一个椭圆图片,原图大小为30*30,而我们让它显示100*30,那么这个图片就会被拉伸,而且效果很难看.用下边的方法可以创建一个局部不被拉伸的图片. UIImage * buttonBg = [[ ...
- less常见的操作
less初体验: mixin : 混合,将一堆属性从一个规则集到另外一个规则集: (如果有公用的样式,可以做提取:) 清除浮动经典代码: .clearfix { displ ...
- having使用的时机
where 子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,条件中不能包含聚组函数,使用where条件显示特定的行. having 子句的作用是筛选满足条件的 ...
- CH1602 The XOR Largest Pair【Trie树】
1602 The XOR Largest Pair 0x10「基本数据结构」例题 描述 在给定的N个整数A1,A2……AN中选出两个进行xor运算,得到的结果最大是多少? 输入格式 第一行一个整数N, ...
- Qt::QWindow多窗口争抢置顶状态解决方案
有时候我们会有这种需求,自己的桌面程序需要置顶,但是程序包含了很多窗口,可能我们要求窗口1,2都在其它桌面程序之上,但是窗口1必须随时在窗口2之上. Qt提供的置顶方式是在windowsflags上增 ...