国庆集训Day1
T1 divide
题意:
有\(n\)个数 \(a_1, a_2,..., a_n\) 有m个数\(b_1, b_2,..., b_n\)
令\(a = a_1\times a_2\,\times ... \times \,a_n\)
令\(b = b_1\times\,b_2 \times\,...\,\times\,b_n\)
判断\(a\)是否是\(b\)的倍数
输入:\(n,m\)
输出:\(Yes / No\)
做法:就是个一简单的质因数分解
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int n, m;
int a[1010], b[1010];
int p[3][20]={};
void divid(int op, int x)
{
if(x == 1) return;
if(x == 2) p[op][1]++;
if(x == 3) p[op][2]++;
if(x == 4) p[op][1] += 2;
if(x == 5) p[op][3]++;
if(x == 6) {p[op][1]++; p[op][2]++;}
return;
}
int main()
{
freopen("divide.in","r",stdin);
freopen("divide.out","w",stdout);
scanf("%d%d", &n, &m);
for(int i = 1; i <= n; i++)
{
scanf("%d", &a[i]);
divid(1, a[i]);
}
for(int i = 1; i <= m; i++)
{
scanf("%d", &b[i]);
divid(2, b[i]);
}
for(int i = 1; i <= 3; i++)
{
if(p[1][i] >= p[2][i])continue;
else
{
printf("No\n"); return 0;
}
}
printf("Yes\n");
return 0;
}
/*
样例:
输入:2 3
6 6
1 3 4
输出:Yes
*/
T2 graph
题意:
现在要生成一张n个点的有向图。要求满足:
1.若有\(a-> b\)的边,则有\(b->a\)的边
2.若有\(a->b\)的边和\(b->c\)的边,则有\(a->c\)的边
3.至少有一个点没有自环
求方案数。 由于结果可能较大,结果对\(m\)取模
输入:\(n,m\)
输出:答案
做法:
这道题除了题意比较坑以外,没有什么太大的难点。需要注意的是,按照题意,如果一个点所在的连通块大小大于或等于2,则该点一定有自环。
我的做法是:设\(f[i][0]\)表示\(i\)个点自由组合,且每个点都存在自环的方案数
\(f[i][1]\)表示\(i\)个点自由组合,且至少有\(1\)个点没有自环的方案数
我转移方程的方法有点独特,我是看\(1\)号点所在的连通块的点的个数进行转移,需要注意的是转移是需要讨论\(1\)号点是否孤立为一个点,若孤立,则有\(1\)号点自环和不自环的两种情况,需分别进行讨论,状态转移方程如下:
\(f[i][1]+=f[i - 1][1]\,\,\,\,1\)号点孤立且\(1\)号点存在自环
\(f[i][1] += f[i - 1][1] + f[i - 1][0]\,\,\,\,1\)号点孤立且\(1\)号点不存在自环,则其他点可以自环,可以不自环
\(f[i][1] +=\sum_{j=2}^{i} f[i - j][1]\times C_{i-1}^{j-1} \,\,\,\,\)计算\(1\)号点所在的连通块大小为\(j\)时的方案数
\(f[i][0]+=f[i-1][0]\,\,\,\,1\)号点孤立时只能自环
\(f[i][0]+=\sum_{j=2}^{i} f[i - j][0]\times C_{i-1}^{j-1} \,\,\,\,\)计算\(1\)号点所在的连通块大小为\(j\)时的方案数
组合数用杨辉三角就可以了。
老师讲的做法是把“第\(1\)个点”改成“第\(i\)个点”,其实写法是一样的,只是思路不同而已。
#include <cstdio>
#include <algorithm>
#include <cstring>
using namespace std;
#define maxn 2010
#define ll long long
int n, mol;
ll f[maxn][2];// 1:符合题意 0:不符合题意
ll C[maxn][maxn];
int main()
{
freopen("graph.in", "r", stdin);
freopen("graph.out", "w", stdout);
scanf("%d%d", &n, &mol);
for(int i = 0; i <= n; i++) C[i][0] = 1;
for(int i = 1; i <= n; i++)
{
for(int j = 1; j <= i; j++)
{
C[i][j] = (C[i - 1][j] + C[i - 1][j - 1]) % mol;
}
}
/* for(int i = 0; i <= n; i++)
{
for(int j = 0; j <= i; j++)
printf("C[%d][%d] = %lld ", i, j, C[i][j]);
printf("\n");
}
*/
f[1][1] = 1; f[1][0] = 1;
for(int i = 2; i <= n; i++)
{
f[i][1] = (f[i][1] + f[i - 1][1] + f[i - 1][0] + f[i - 1][1]) % mol;
f[i][0] = (f[i][0] + f[i - 1][0]) % mol;
for(int j = 2; j < i; j++)
{
// f[i][1] = (f[i][1] + ( ( ( (C[i - 1][j - 1] * S[j - 1][j - 1]) % mol ) * ( (f[i - j][0] + f[i - j][1]) % mol) ) % mol)) % mol;
f[i][1] = (f[i][1] + (C[i - 1][j - 1] * f[i - j][1]) % mol) % mol;
f[i][0] = (f[i][0] + (C[i - 1][j - 1] * f[i - j][0]) % mol) % mol;
}
f[i][0] = (f[i][0] + 1) % mol;
}
// for(int i = 1; i <= n; i++)
// printf("f[%d][0] = %lld f[%d][1] = %lld\n", i, f[i][0], i, f[i][1]);
printf("%lld\n", f[n][1]);
return 0;
}
/*
样例:
输入:2 5
输出:3
*/
T3 生成图
题意:
\(a=1\,\,\,b=0\)
进行不超过b次操作,每次可以选择一下两种操作之一:
\(1.\,\,b\,\,+=1\)
\(2.\,a\times b\)
最后得到一个整数\(a\),该整数位于\([l,r]\)之间,求最后的\(a\)有多少种可能
输入:\(l,r,p\)
输出:答案
做法:经过“观察”,我们发现答案很小,所以我们可以通过计算出所有可能的答案(有质因子超过p则该答案不可能),然后“离散化”就可以求出了,同时再计算需要的最小步数。
国庆集训Day1的更多相关文章
- 国庆集训 Day1 T2 生成图 DP
国庆集训 Day1 T2 生成图 现在要生成一张\(n\)个点的有向图.要求满足: 1.若有 a->b的边,则有 b->a 的边 2.若有 a->b 的边和 b->c 的边,则 ...
- 牛客2018国庆集训 DAY1 D Love Live!(01字典树+启发式合并)
牛客2018国庆集训 DAY1 D Love Live!(01字典树+启发式合并) 题意:给你一颗树,要求找出简单路径上最大权值为1~n每个边权对应的最大异或和 题解: 根据异或的性质我们可以得到 \ ...
- 长乐国庆集训Day1
T1 统计数字 题目 [题目描述] 设 S(N ) 表示 N 的各位数字之和,如 S(484) = 4+8+4 = 16, S(22) = 2+2 = 4. 如果一个正整数满足 S(x*x) = S( ...
- 2019 牛客国庆集训day1 2019 点分治
题目链接:https://ac.nowcoder.com/acm/contest/1099/I 点分治,计算路径数的时候,先将每个点到根的距离模2019,计算的时候就可以O(n)求出数目,对于模201 ...
- 【欧拉回路+最小生成树】SD开车@山东2018省队一轮集训day1
目录 [欧拉回路+最小生成树]SD开车@山东2018省队一轮集训day1 PROBLEM 题目描述 输入 输出 样例输入 样例输出 提示 SOLUTION CODE [欧拉回路+最小生成树]SD开车@ ...
- 牛客国庆集训派对Day6 A Birthday 费用流
牛客国庆集训派对Day6 A Birthday:https://www.nowcoder.com/acm/contest/206/A 题意: 恬恬的生日临近了.宇扬给她准备了一个蛋糕. 正如往常一样, ...
- 2019暑期金华集训 Day1 组合计数
自闭集训 Day1 组合计数 T1 \(n\le 10\):直接暴力枚举. \(n\le 32\):meet in the middle,如果左边选了\(x\),右边选了\(y\)(且\(x+y\le ...
- 2019暑期金华集训 Day1 数据结构
自闭集训 Day1 数据结构 CF643G 用类似于下面的方法,搬到线段树上. 如何合并两个集合?先全部放在一起,每次删掉最小的\(cnt_i\),然后把其他所有的\(cnt\)都减去\(cnt_i\ ...
- LOJ 6060「2017 山东一轮集训 Day1 / SDWC2018 Day1」Set(线性基,贪心)
LOJ 6060「2017 山东一轮集训 Day1 / SDWC2018 Day1」Set $ solution: $ 这一题的重点在于优先级问题,我们应该先保证总和最大,然后再保证某一个最小.于是我 ...
随机推荐
- SAS学习笔记33 格式修饰符
冒号(:)格式修饰符 从非空格开始读取变量所对应的数据,直到满足以下任何一种情况 遇到下一个空格列 对应变量所定义的长度已经读满 数据行结束 &格式修饰符 修饰所读取为字符型的列数据中含有一个 ...
- [NOIP2018模拟赛10.20A]挂分报告
闲扯 先看看了B组,T1 ZROI刚好讲过一个性质原根一般很小的,直接枚举;T2一眼二分然后似乎状压 T3没看 然后上来A组题,T1 flow这名字...网络流?! T1题面非常的社会主义核心价值观, ...
- Vue页面手动刷新,导航栏激活项还原到初始状态问题解决方案
场景描述:在页面中存在顶部导航和左侧导航,左侧导航和右侧内容区使用了命名视图实现,点击左侧导航的链接时,右侧内容区相应显示不同组件内容.问题:在当前链接手动刷新浏览器(例如:浏览器地址为/enterp ...
- Framework7 - 入门教程(安装、配置、创建一个H5应用)
1,Framework7介绍 (1)Framework7 是一个开源免费的框架.可以用来开发混合移动应用(原生和 HTML 混合)或者开发 iOS & Android 风格的 WEB APP. ...
- MySQL之日期时间函数
1.NOW() 用法:显示当前日期和时间 举例: mysql> select NOW(); +---------------------+ | NOW() | +-------------- ...
- lvs 中的DR模式 ,解释
CIP即为客户端的IP地址 . DIR为调度器 . VIP为虚拟IP地址 . RIP为真实服务器IP地址 . 假设CIP的mac为A1,ip为B1:DIR只有一个物理网卡mac为A2,IP为B2:RI ...
- Signal Processing and Pattern Recognition in Vision_15_RANSAC:Performance Evaluation of RANSAC Family——2009
此部分是 计算机视觉中的信号处理与模式识别 与其说是讲述,不如说是一些经典文章的罗列以及自己的简单点评.与前一个版本不同的是,这次把所有的文章按类别归了类,并且增加了很多文献.分类的时候并没有按照传统 ...
- Image Processing and Analysis_8_Edge Detection:Design of steerable filters for feature detection using canny-like criteria ——2004
此主要讨论图像处理与分析.虽然计算机视觉部分的有些内容比如特 征提取等也可以归结到图像分析中来,但鉴于它们与计算机视觉的紧密联系,以 及它们的出处,没有把它们纳入到图像处理与分析中来.同样,这里面也有 ...
- Linux行编辑器——ed
实验文件test.txt内容 root:x:::root:/root:/bin/bash bin:x:::bin:/bin:/sbin/nologin daemon:x:::daemon:/sbin: ...
- Python内存数据序列化到硬盘上哪家强
1. 闲扯一下:文件 磁盘上的数据,我们一般称为 “文件” ,一般不同的文件都有各自的后缀名,比如 .txt .docx .xlsx .jpg .mp3 .avi .这些不同类型的文件一般分为两大类: ...