链接在这:http://bak.vjudge.net/contest/132442#overview

  A题,给出a,b和n,初始的集合中有a和b,每次都可以从集合中选择不同的两个,相加或者相减,得到一个新的数,如果在1~n内的话就放入集合中,并算一次操作,谁先不能操作(所有新数已经存在于集合内的话就不能进行操作)者输。问谁会赢。

  可以得到的数字为k*gcd(a,b),那么只要算出在1~n的范围内存在多少个这样的数字,判断一下奇偶性即可。

  

  B题,给出n个字符串,问最大的满足条件的字符串的位置,条件为,在它前面的字符串中至少存在一个字符串不是它的子串。那么方法是我们判断第 i 个字符串的时候,找出前面的不是别人子串的那些字符串,来判断是不是这个字符串的子串,如果不是,那么更新答案,如果是(那么是前面这个字符串子串的字符串肯定也都是 i 的子串,而我们要找的是不是 i 子串的字符串),那么前面那个字符串给一个标记,表示它也是别人的子串了,那么后面就不用再管它了。显然复杂度是O(n^2+n*lenth)。

  

  C题,因为一个集合内互相到达的距离t都是相等的,那么我们可以新建一个点,这个集合内的点到新点的距离都为0,而新点到集合内的点的距离都是t,借助这个辅助点,我们就可以将条件转化了。然后我们使用dijkstra算法找出从1开始的最短路和从n开始的最短路即可。

  D,每个青蛙可以遍历的石头其实是k*gcd(a[i],m),但是很显然会有重复,因此我们用容斥做。具体方法比较奥义,见代码吧(手动模拟一下以后就比较好理解了):

 #include <stdio.h>
#include <algorithm>
#include <string.h>
using namespace std;
const int N = +;
typedef long long ll; int n,m;
int a[N];
int cnt,p[];
int vis[],num[];
// vis表示这个因子应该被使用的次数,num表示这个因子已经使用过的次数 int main()
{
int T;scanf("%d",&T);
for(int kase=;kase<=T;kase++)
{
memset(vis,,sizeof(vis));
memset(num,,sizeof(num));
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++) scanf("%d",a+i);
cnt = ;
for(int i=;1LL*i*i<=(ll)m;i++)
{
if(m%i==)
{
p[++cnt] = i;
if(1LL*i*i != (ll)m) p[++cnt] = m/i;
}
}
sort(p+,p++cnt);
for(int i=;i<=n;i++)
{
int g = __gcd(a[i],m);
for(int j=;j<=cnt;j++)
{
if(p[j] % g == ) vis[j] = ;
}
} vis[cnt] = ; // 最后一个数是不能跳的
ll ans = ;
for(int i=;i<=cnt;i++)
{
if(vis[i] != num[i])
{
ans += 1LL * (vis[i]-num[i]) * m * (m/p[i] - ) / ;
int t = vis[i] - num[i];
for(int j=i;j<=cnt;j++)
{
if(p[j]%p[i] == ) num[j] += t;
}
}
}
printf("Case #%d: %I64d\n",kase,ans);
}
}

2015ACM/ICPC亚洲区沈阳站 部分题解的更多相关文章

  1. 2015ACM/ICPC亚洲区沈阳站 Pagodas

    Pagodas Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Sub ...

  2. 2015ACM/ICPC亚洲区沈阳站 B-Bazinga

    Bazinga Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Sub ...

  3. hdu 5510 Bazinga (kmp+dfs剪枝) 2015ACM/ICPC亚洲区沈阳站-重现赛(感谢东北大学)

    废话: 这道题很是花了我一番功夫.首先,我不会kmp算法,还专门学了一下这个算法.其次,即使会用kmp,但是如果暴力枚举的话,还是毫无疑问会爆掉.因此在dfs的基础上加上两次剪枝解决了这道题. 题意: ...

  4. 2015ACM/ICPC亚洲区沈阳站-重现赛 M - Meeting (特殊建边,最短路)

    题意:有\(n\)个点,\(m\)个集合,集合\(E_i\)中的点都与集合中的其它点有一条边权为\(t_i\)的边,现在问第\(1\)个点和第\(n\)个点到某个点的路径最短,输出最短路径和目标点,如 ...

  5. 2015ACM/ICPC亚洲区沈阳站-重现赛 B - Bazinga (KMP)

    题意:给你\(n\)个字符串,\(s_1,s_2,...,s_n\),对于\(i(1\le i\le n)\),找到最大的\(i\),并且满足\(s_j(1\le j<i)\)不是\(s_i\) ...

  6. 2015ACM/ICPC亚洲区沈阳站-重现赛 D - Pagodas

    题意:有\(n\)个数,开始给你两个数\(a\)和\(b\),每次找一个没出现过的数\(i\),要求满足\(i=j+k\)或\(i=j-k\),当某个人没有数可以选的时候判他输,问谁赢. 题解:对于\ ...

  7. 2015ACM/ICPC亚洲区沈阳站

    5510 Bazinga 题意:给出n个字符串,求满足条件的最大下标值或层数 条件:该字符串之前存在不是 它的子串 的字符串 求解si是不是sj的子串,可以用kmp算法之类的. strstr是黑科技, ...

  8. 2015ACM/ICPC亚洲区沈阳站 Solution

    A - Pattern String 留坑. B - Bazinga 题意:找一个最大的i,使得前i - 1个字符串中至少不是它的子串 思路:暴力找,如果有一个串已经符合条件,就不用往上更新 #inc ...

  9. 2015ACM/ICPC亚洲区沈阳站重现赛-HDU5512-Pagodas-gcd

    n pagodas were standing erect in Hong Jue Si between the Niushou Mountain and the Yuntai Mountain, l ...

随机推荐

  1. hashMap,hashTable,TreeMap,concurrentHashMap区别

    hashMap: 基于哈希表实现 treeMap: 基于二叉树实现,适用于排序 hashTable: 底层还是HashMap,在方法上加了同步 concurrentHashMap: java7底层通过 ...

  2. Vue学习笔记(一) 利用idea 搭建 vue 项目

    环境准备工作: 安装node.js 环境  -- 略 安装vue-li  全局安装vue-cli,在命令行中执行npm install -g vue-cli idea准备工作: 安装vue.js Fi ...

  3. img 图像底部留白的原因以及解决方法

    有时候,我们在添加图片img标签后并没有给该标签设置magrin属性的margin-bottom值,在有些浏览器中打开就会出现图像底部留白,为什么为造成这个原因?下面就来进行分析:由于img元素默认为 ...

  4. EBS常用表_Dictionary

    EBS常用表:转载于 https://blog.csdn.net/xiariqingcao/article/details/8775827 . OU.库存组织 SELECT hou.organizat ...

  5. php打包下载以及断点续传

    php下载单文件 以及 多文件打包下载,支持断点续传 断点续传的功能未经验证 需要nginx或者apache服务器指定静态文件,png, mp4, zip等后缀文件的目录, 直接实例化并调用 down ...

  6. Win10 OpenCV3.3.0+VS2013配置大坑,OpenCV解决方案编译报错“找不到python36_d.lib”错误

    今天因为想要用OpenCV做图像识别,小白一个,在网上找到一个教程,但是需要配置OpenCV3.3.0的环境,于是又在网上找OpenCV3.3.0+VS2013(因为我之前已经安过了VS2013),前 ...

  7. STM32WB 信息块之OTP

    1.OTP Area范围:0x1FFF 7000 - 0x1FFF 73FF 大小1 K 2.OTP描述 1 KB (128 double words) OTP (one-time programma ...

  8. 论文笔记:Learning Region Features for Object Detection

    中心思想 继Relation Network实现可学习的nms之后,MSRA的大佬们觉得目标检测器依然不够fully learnable,这篇文章类似之前的Deformable ROI Pooling ...

  9. 启动Activity的单独事件方法2

    1.Button中创建android:onClick="sendmessage" sendmessage方法名 //MAIN_acitivity创建这个同名独立方法 响应Butto ...

  10. linux 计划任务超时控制和并发控制

    Linux crontab 的配置存放 /var/spool/cron 目录下. Linux crontab的日志文件存放再 /var/log/cron* timeout 命令 timeout 给脚本 ...