【BZOJ1408】[Noi2002]Robot DP+数学

【BZOJ1408】[Noi2002]Robot

Description

Input

Output

Sample Input

3
2 1
3 2
5 1

Sample Output

8
6
75

HINT

90号机器人有10个老师,加上它自己共11个。其中政客只有15号;军人有3号和5号;学者有8个,它们的编号分别是:2,6,9,10,18,30,45,90。

题解:语文题,就是问你n的约数中μ(d)=0,1,-1时,φ(d)的和,其中令μ(1)=0,φ(2)=0

直接DP,令f[i][0/1]表示枚举到第i个素数,已选则不同奇素数为偶数/奇数个时的φ(d)的和,然后根据,直接用n减去f[k][0]+f[k][1]就行了

#include <iostream>
#include <cstdio>
#include <cstring>
#define mod 10000
using namespace std;
const int maxn=10010;
int n,m;
int f[maxn][2],p[maxn],e[maxn];
int pm(int x,int y)
{
	int z=1;
	while(y)
	{
		if(y&1)	z=z*x%mod;
		x=x*x%mod,y>>=1;
	}
	return z;
}
int main()
{
	scanf("%d",&n);
	int i;
	for(m=i=1;i<=n;i++)	scanf("%d%d",&p[i],&e[i]),m=m*pm(p[i],e[i])%mod;
	f[0][0]=1;
	for(i=1;i<=n;i++)
	{
		if(p[i]==2)
		{
			f[i][0]=f[i-1][0];
			f[i][1]=f[i-1][1];
			continue;
		}
		f[i][0]=(f[i-1][0]+f[i-1][1]*(p[i]-1))%mod;
		f[i][1]=(f[i-1][1]+f[i-1][0]*(p[i]-1))%mod;
	}
	printf("%d\n%d\n%d\n",f[n][0]-1,f[n][1],(m-f[n][0]-f[n][1]+20000)%mod);
	return 0;
}
时间: 2024-10-16 00:01:08

【BZOJ1408】[Noi2002]Robot DP+数学的相关文章

BZOJ1408 NOI2002 Robot 快速幂+欧拉函数

题意:分别求所有质因数都不同且质因数个数为奇数个.偶数个的数的欧拉函数和,和质因数存在重复的数的欧拉函数和 题解: 说书题……前面一大串就是用一种比较有趣的语言定义欧拉函数. 显然我们只需要求出所有军人ans1和政客ans2,然后用求得的M减去独立数和就是学者的独立数和了. 由于善良的出题人已经帮我们把M给质因分解了,因此我们假定当前已经得到了ans1和ans2,那么根据欧拉函数的定义,ans1'=ans1+ans2*(p-1),ans2'=ans2+ans1*(p-1),因为新加入的质因子会让

hdu-5621 KK&#39;s Point(dp+数学)

题目链接: KK's Point Time Limit: 2000/1000 MS (Java/Others)     Memory Limit: 65536/65536 K (Java/Others) Problem Description Our lovely KK has a difficult mathematical problem:He points N(2≤N≤10^5) points on a circle,there are all different.Now he's goi

BZOJ 1408: [Noi2002]Robot

1408: [Noi2002]Robot Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 510  Solved: 344[Submit][Status][Discuss] Description Input Output Sample Input 3 2 1 3 2 5 1 Sample Output 8 6 75 HINT 90号机器人有10个老师,加上它自己共11个.其中政客只有15号:军人有3号和5号:学者有8个,它们的编号分别是:2,6,9,

CodeForces 55D Beautiful numbers 数位DP+数学

题意大概是,判断一个正整数区间内有多少个整数能被它自身的每一个非零的数字整除. 因为每一个位置上的整数集s = {0,1,2,3,4,5,6,7,8,9} lcm(s) = 2520 现在有一个整数t是由s中一个或者多个数字构成的,记为abcde,显然t = a*10^4+b*10^3+c*10^2+d*10^1+e 要使得t能被a,b,c,d,e整除,必然有t % lcm(a,b,c,d,e) = 0 因为a,b,c,d,e去重之后一定是s的一个子集,所以lcm(s)一定是lcm(a,b,c,

ZOJ3872 Beauty of Array---规律 | DP| 数学能力

传送门ZOJ 3872 Beauty of Array Time Limit: 2 Seconds      Memory Limit: 65536 KB Edward has an array A with N integers. He defines the beauty of an array as the summation of all distinct integers in the array. Now Edward wants to know the summation of t

【DP|数学+预处理】POJ-1160 Post Office

Post Office Time Limit: 1000MS Memory Limit: 10000K Description There is a straight highway with villages alongside the highway. The highway is represented as an integer axis, and the position of each village is identified with a single integer coord

hdu-5000 Clone(DP+数学)

该题是一道需要先进行数学推导的dp题 , 可惜我没有学过离散数学,现在也不是很明白 .   大致的意思是说按照题目中的要求,所有能存活下来的克隆人(一个向量,有很多属性)构成了一条最长反链,具有偏序关系 .偏序关系说白了就是对于向量a.b,不能确定他俩的大小关系 .   那么什么是反链呢?  其实也是不可比的意思,只不过每次将某个属性加减1,可以组成一条最长反链 ,如下图: 对于每一行,构成了一条反链 ,那么最长的就是结点最多的那一行 . 代码如下: 版权声明:本文为博主原创文章,未经博主允许不

zznu 1255 数字统计(数位DP, 数学方法)

最近在学数位DP, 感觉还是满有收获的! 做了几个题之后想起来自己OJ上曾经做的一道题,以前是用数学方法写的,现在改用数位DP来写了一遍. 题目: 1255: 数字统计 时间限制: 1 Sec  内存限制: 128 MB提交: 31  解决: 4[提交][状态] 题目描述 一本书的页码从自然数1 开始顺序编码直到自然数n.书的页码按照通常的习惯编排, 每个页码都不含多余的前导数字0.例如,第6 页用数字6 表示,而不是06 或006 等.数 字计数问题要求对给定书的总页码n,计算出书的全部页码中

CF1024E Natasha, Sasha and the Prefix Sums——DP/数学(组合数)

题面 CF1024E 解析 题意就是要求所有由$n$个$1$.$m$个$-1$构成的序列的最大前缀和的和 算法一$(DP)$ $n$, $m$都小于等于$2000$, 显然可以$DP$ 设$dp[i][j]$表示由$i$个$1$, $j$个$-1$构成的序列的最大前缀和的和 $i$个$1$, $j$个$-1$构成的序列, 可以看做是在$i-1$个$1$, $j$个$-1$的序列的最前面加一个$1$得到,也可以看做是在$i$个$1$, $j-1$个$-1$的序列最前面加一个$-1$得到 这也就意味