摘要

  本文主要给出了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. Unity中AB资源打包简单的脚本

    脚本应该放在Editor文件夹下 using System.Collections; using System.Collections.Generic; using UnityEngine; usin ...

  2. Windows多线程学习随笔

    自学Windows多线程知识,例程如下: #include <iostream> #include <windows.h> #include <process.h> ...

  3. 通过iptables添加QoS标记

    1.什么是QoS QoS是一种控制机制,它提供了针对不同用户或者不同数据流采用相应不同的优先级,或者是根据应用程序的要求,保证数据流的性能达到一定的水准.QoS的保证对于容量有限的网络来说是十分重要的 ...

  4. openXML向Word插入表

    表是 Word 中的另一类型的块级内容,它是以行和列排列的一组段落(以及其他块级内容). Word 中的表格通过 tbl 元素定义,该元素类似于 HTML <表格>标记. 表元素指定文档中 ...

  5. HTML基本格式和文本元素(标签)介绍

    <!doctype html>//声明文档类型 <html lang="zh-cn">//文档开始,后面是声明是中文页面的意思,en是英语的意思 <h ...

  6. maven 项目快速下载jar方式

    maven仓库默认在国外,使用难免很慢,尤其是下载依赖的时候,换为国内镜像,让你感受飞一般的感觉.国内支持maven镜像的有阿里云,开源中国等,这里换为阿里云的. 修改maven配置文件setting ...

  7. 1042.D Petya and Array 前缀 + 树状数组

    11.19.2018 1042.D Petya and ArrayNew Point: 前缀 + 树状数组 :树状数组逐个维护前缀个数 Describe: 给你一个数组,一个标记数,问你有多少区间[l ...

  8. 运维工具pssh和pdsh安装和使用

    1. pssh安装与使用 1.1 pssh安装 [root@server]# wget http://peak.telecommunity.com/dist/ez_setup.py [root@ser ...

  9. shell 日常技巧

    批量注释: :<<COMMENT code COMMENT 循环: #!/bin/bash  for varible1 in {1..5}  #for varible1 in 1 2 3  ...

  10. Android-引导用户指纹录入

    根据不同的手机,跳转到指纹录入界面,如果没有检测到手机的品牌,就提醒用户手动去指纹录入: 首先描述手机信息检测对象,PhoneInfoCheck.java: package com.esandinfo ...