摘要

  本文主要给出了2014-2015 ACM-ICPC, Asia Xian Regional Contest的部分题解,说明了每题的题意、解题思路和代码实现,意即熟悉区域赛比赛题型。


Built with Qinghuai and Ari Factor

题意

判断是否是Q数列,只要数列中每个数均能够被3整除就是Q数列。

解题思路

需要特判一下0的情况。

代码

 #include <cstdio>

 int main()
{
int T;
int n;
int t = ;
scanf("%d", &T);
while(T--) {
scanf("%d", &n);
int f = ;
int x;
for(int i = ; i < n; i++) {
scanf("%d", &x);
if(x == || x % != )
f = ;
}
if(f)
printf("Case #%d: No\n",t++);
else
printf("Case #%d: Yes\n",t++);
}
return ;
}

Last Defence

题意

  定义一个序列,前两项是a和b,第三项是前两项之差的绝对值,然后依次类推,问会出现多少个不同的数字。

解题思路

  首先能够想到的是该数列最终会呈现...,x,0,x,0这样的序列,但是出现过多少个不同的数字呢,其实给出a和b后,不妨将a写成kb + tmp的形式,其中不同的数字个数就是k个,因为每次相减后出现一个(k - 1)* b + tmp,总共有k个,但这只是一组(相当于减到底),下一组就是b = a % b,a = b,直到b等于0的的时候,就可以结束了,最后再加上0这个数字的1个。

  注意考虑特殊情况,当a == 0 且b != 0 或者 b == 0 且 a != 0时 sum = 2;

           当a = b = 0时,sum = 1;

代码

 #include <cstdio>
typedef long long ll; int main()
{
int T, t = ;
scanf("%d", &T);
ll a, b, tmp, sum;
while(T--) {
scanf("%lld %lld", &a, &b);
if(a == && b == )
sum = ;
else if((a == && b != ) || (a != && b == ))
sum = ;
else {
sum = ;
tmp = ;
while(tmp) {
sum += a / b;
tmp = a % b;
a = b;
b = tmp;
}
}
printf("Case #%d: %lld\n", t++, sum);
}
return ;
}

Color

题意

  给出n朵花,排成一行,问从m种颜色中挑出k种染色,使得这n朵花使用恰好k种颜色的同时两个相邻的话不同颜色,有多少种不同的方案。

解题思路

  不难从m中颜色重挑出k中颜色,即C(m, k)。然后计算恰好使用k种颜色去染着n朵花,容易写出C(m, k) * k * (k - 1)^(n - 1)种方法,但是仔细想一下,这计算了最多使用k种颜色染的方案数,包含重复计数,这里就要考虑容斥了,假设最多使用 i 种颜色的方案数为F[i],那么其中包括了最多使用 i-1 种的,最多使用 i-1 种的里面又包含了最多使用 i-2 种的,以此类推得到

  ans = C(m, k) * (F[k] - (F[k - 1] - (F[k - 2] - (... - (F[3] - (F[2] - F[1])))))) = C(m, k) * (F[k] - F[k - 1] + F[k - 2] - ... + (-1)^(k - i)F[i] + (-1)^(k -2)F[2] + (-1)^(k - 1)F[1]),其中F[i]根据之前的计算方法等于(-1)^(k - i) * C(k, i) * (k - i)^(n - 1) 。
  也可以看下表

  

  如果减去f[i-1]的话,相当于减去整个表格里的内容:一个 i-1, 两个 i-2, 三个 i-3 .....所以因为减去了两个i-2,所以需要把i-2加回来一个,所以  + f[i-2] 就行了,其他同理 ,即可解释容斥原理。举个例子,如果选取的k个颜色是1,2,3,4,会有一种染色方案是1,2,1,2...,如果选取的k-1个颜色是1,2,3,仍然会包含一种染色方案1,2,1,2...所以上面的公式要再加上颜色数<=(k-2)的方案数,然后再减去颜色数<=(k-3)的方案数。

  剩下的就是具体实现的细节了,首先怎么快速计算C(m, k)和C(k, i)?使用递推的方式,公式推导如下

  

  然后其中使用到了乘法逆元。

  最后就是了解一下输入输出外挂(不加也可以A)。

代码如下

 #include <cctype>
#include <cstdio> typedef long long ll;
const int mod = 1e9 + ;
const int maxk = 1e6 + ; ll Sca() {
ll res = , f = ;
char x = getchar();
if(x == '-')
f = ;
if(x >= '' && x <= '')
res = x - '';
while((x = getchar()) >= '' && x <= '')
res = res * + (x - '');
return f ? -res : res;
}
void Out(ll x) {
if(x > )
Out(x / );
putchar(x % + '');
}
ll qpow(ll x, ll n) {
ll ans = ;
while(n) {
if(n & )
ans = ans * x % mod;
x = x * x % mod;
n >>= ;
}
return ans;
}
ll inv[maxk];
void get_inv() {
for(ll i = ; i < maxk; i++) {
inv[i] = qpow(i, mod - );
}
}
ll ck[maxk], cm[maxk];
void get_c(ll m, ll k) {
cm[] = ck[] = ;
for(ll i = ; i <= k; i++) {
cm[i] = (cm[i - ] * (m - i + ) % mod) * inv[i] % mod ;
ck[i] = (ck[i - ] * (k - i + ) % mod) * inv[i] % mod;
}
}
int main()
{
get_inv();
ll T;
T = Sca();
ll n, m, k;
for(ll ca = ; ca <= T; ca++) {
n = Sca();
m = Sca();
k = Sca(); get_c(m, k);
ll ans = ;
ll f = ;
for(ll i = k; i >= ; i--, f = -f) {
ans = (ans + (f * ck[i] * i % mod * qpow(i - , n - ) % mod) + mod) % mod;
}
ans = ans * cm[k] % mod;
printf("Case #%lld: %lld\n", ca, ans);
}
return ;
}

Color

2014-2015 ACM-ICPC, Asia Xian Regional Contest(部分题解)的更多相关文章

  1. hdu 5444 Elven Postman(二叉树)——2015 ACM/ICPC Asia Regional Changchun Online

    Problem Description Elves are very peculiar creatures. As we all know, they can live for a very long ...

  2. (并查集)Travel -- hdu -- 5441(2015 ACM/ICPC Asia Regional Changchun Online )

    http://acm.hdu.edu.cn/showproblem.php?pid=5441 Travel Time Limit: 1500/1000 MS (Java/Others)    Memo ...

  3. (二叉树)Elven Postman -- HDU -- 54444(2015 ACM/ICPC Asia Regional Changchun Online)

    http://acm.hdu.edu.cn/showproblem.php?pid=5444 Elven Postman Time Limit: 1500/1000 MS (Java/Others)  ...

  4. 2015 ACM/ICPC Asia Regional Changchun Online HDU 5444 Elven Postman【二叉排序树的建树和遍历查找】

    Elven Postman Time Limit: 1500/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)T ...

  5. ACM ICPC Central Europe Regional Contest 2013 Jagiellonian University Kraków

    ACM ICPC Central Europe Regional Contest 2013 Jagiellonian University Kraków Problem A: Rubik’s Rect ...

  6. 2019-2020 ICPC, Asia Jakarta Regional Contest (Online Mirror, ICPC Rules, Teams Preferred)

    2019-2020 ICPC, Asia Jakarta Regional Contest (Online Mirror, ICPC Rules, Teams Preferred) easy: ACE ...

  7. 2018 ICPC Pacific Northwest Regional Contest I-Inversions 题解

    题目链接: 2018 ICPC Pacific Northwest Regional Contest - I-Inversions 题意 给出一个长度为\(n\)的序列,其中的数字介于0-k之间,为0 ...

  8. 2014-2015 ACM-ICPC, Asia Xian Regional Contest G The Problem to Slow Down You 回文树

    The Problem to Slow Down You Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjud ...

  9. HDU 5458 Stability(双连通分量+LCA+并查集+树状数组)(2015 ACM/ICPC Asia Regional Shenyang Online)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5458 Problem Description Given an undirected connecte ...

随机推荐

  1. input checkbox复选框取值

    <table> <!--列表表头 开始 --> <tr class="ui-widget ui-state-hover" style="he ...

  2. 在 npm 中使用 ES6 module

    node 从 v8.5.0起 支持了 ES6 module. 只需保存文件名为 .mjs ,并通过一个option 可以开启执行,如 node --experimental-modules index ...

  3. MySQL的计算时间差

    一.MySQL计算两个日期的时间差 TIMESTAMPDIFF(DAY, datetime1, datetime2); 第一个参数为比较类型,有day, month, year, hour等: 第二个 ...

  4. 初识Java Servlet

    Java Servlet是什么? Servlet的本质就是一个Java接口,之所以能生成动态的Web内容,是因为对客户的一个HTTP请求,Servlet通过接口这个规范重写了其中的方法,然后Web服务 ...

  5. shell实例利用crontab自动清除日志

    shell实例利用crontab自动清除日志 程序运行会产生很多的日志,对于无用的日志手动删除比价麻烦,写一个自动执行的命令是很有必要的. 删除文件shell命令 find 对应目录 -mtime + ...

  6. navibar记录

    @import (reference) "kmc-common.less"; .kmc{ font-family: PingFangSC-Reguxlar; font-weight ...

  7. 深度学习Tensorflow生产环境部署(下·模型部署篇)

    前一篇讲过环境的部署篇,这一次就讲讲从代码角度如何导出pb模型,如何进行服务调用. 1 hello world篇 部署完docker后,如果是cpu环境,可以直接拉取tensorflow/servin ...

  8. Python math库常用函数

    math库常用函数及举例: 注意:使用math库前,用import导入该库>>> import math 取大于等于x的最小的整数值,如果x是一个整数,则返回x>>> ...

  9. 手把手教你读取Android版微信和手Q的聊天记录(仅作技术研究学习)

    1.引言 特别说明:本文内容仅用于即时通讯技术研究和学习之用,请勿用于非法用途.如本文内容有不妥之处,请联系JackJiang进行处理!   我司有关部门为了获取黑产群的动态,有同事潜伏在大量的黑产群 ...

  10. 字符编码那点事:快速理解ASCII、Unicode、GBK和UTF-8

    原作者:阮一峰(ruanyifeng.com),现重新整理发布,感谢原作者的无私分享. 1.引言 今天中午,我突然想搞清楚 Unicode 和 UTF-8 之间的关系,就开始查资料. 这个问题比我想象 ...