hdu2481 Toy

2023-11-07 19:48
文章标签 toy hdu2481

本文主要是介绍hdu2481 Toy,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

这题就是【bzoj1002 轮状病毒】【poj2888 Magic Bracelet】的综合版。用前者找到的规律和后者求不动点的方法就可以了。
需要注意的是 m 不一定是质数,需要利用a/b%m=a%(bm)/b在模 nm 下计算。但是这样乘法就会爆long long了,需要快速乘。

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define LL long long
const int maxx=100000;
int n,m,tot,have[maxx+10],prm[maxx+10];
LL p;
int phi(int x)
{int ret=x;for (int i=1;i<=tot&&(LL)prm[i]*prm[i]<=x;i++)if (x%prm[i]==0){ret=ret/prm[i]*(prm[i]-1);while (x%prm[i]==0) x/=prm[i];}if (x>1) ret=ret/x*(x-1);return ret%p;
}
LL multi(LL base,LL x)
{LL ret=0;while (x){if (x&1){ret+=base;if (ret>p) ret-=p;}base+=base;if (base>p) base-=p;x>>=1;}return ret;
}
struct mat
{LL a[5][5];mat operator * (const mat &mm) const{mat ret;for (int i=1;i<=3;i++)for (int j=1;j<=3;j++){ret.a[i][j]=0;for (int k=1;k<=3;k++)ret.a[i][j]=(ret.a[i][j]+multi(a[i][k],mm.a[k][j]))%p;}return ret;}mat pow(int k){mat ret,base;for (int i=1;i<=3;i++)for (int j=1;j<=3;j++){base.a[i][j]=a[i][j];ret.a[i][j]=(i==j);}for (;k;k>>=1,base=base*base)if (k&1) ret=ret*base;return ret;}
}ori,trans,res;
LL calc(int n)
{res=ori*trans.pow(n-1);return res.a[1][1];
}
void solve()
{LL ans=0;p=(LL)m*n;trans.a[2][1]=p-1;for (int i=1;(LL)i*i<=n;i++)if (n%i==0){ans=(ans+multi(phi(n/i),calc(i)))%p;if (i*i<n) ans=(ans+multi(phi(i),calc(n/i)))%p;}printf("%d\n",ans/n);
}
int main()
{ori.a[1][1]=trans.a[1][2]=trans.a[3][1]=trans.a[3][3]=1;ori.a[1][3]=2;trans.a[1][1]=3;for (int i=2;i<=maxx;i++){if (!have[i]) prm[++tot]=i;for (int j=1;(LL)i*prm[j]<=maxx;j++){have[i*prm[j]]=1;if (i%prm[j]==0) break;}}while (scanf("%d%d",&n,&m)==2) solve();
}

这篇关于hdu2481 Toy的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/365892

相关文章

CodeForces - 545A Toy Cars (模拟)

【题目链接】:click here~~ 【题目大意】: 给一个n*n的矩阵,-1只在对角线出现(因为自己不能撞自己),0代表没有车在碰撞,1代表第i辆车(横坐标)被撞坏了,2代表第j辆车(纵坐标)被撞坏了,3代表两辆车都撞坏了。问哪几辆车完好无损。  代码: /* * Problem: CodeForces - 545A * Running time: 15MS *

poj 2398 Toy Storage(计算几何:叉积)

基本上和poj 2318一模一样。。。 改下输出就可以了 代码如下: /* ***********************************************Author :yinhuaCreated Time :2014年12月01日 星期一 19时25分15秒File Name :poj2398.cpp*******************

HDU 2865 Birthday Toy(ploya好题)

对于这种颜色多的,但是限制简单的情况,可以利用dp推出公式,然后矩阵快速幂求解 代码: #include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int MOD = 1000000007;typedef long long ll;int n, k;int phi(int n) {

poj 2398 Toy Storage 【计算几何】【点和线的关系】

题目链接:http://poj.org/problem?id=2398 题目大意:这次的题目和前一道题目几乎是一样的,不同之处在于这次给出的线不是有顺序的,还有就是输出的时候有一个优化。 基本的分析见我上篇博客:http://blog.csdn.net/u010468553/article/details/39474007 注意sort函数中cmp的编写还有后期数据的整理 #inclu

Codeforces Round #542 [Alex Lopashev Thanks-Round] (Div. 2)D2. Toy Train(思维)

题目链接:https://codeforces.com/contest/1130/problem/D2   题目大意:有n个车站,按照环前进,有m条要求从x送到y,每次从x最多能拿一个糖,输出在第i个车站出发最少需要多少时间完成所有要求   题目思路:根据要求得到每个点需要送出的糖果数,并且把每个点要到的地方存一下。枚举第s个车站出发,然后枚举每一个点,计算到达这个点以及把这个点需要送的货

BZOJ1010: [HNOI2008]玩具装箱toy(斜率优化dp)

Description   P教授要去看奥运,但是他舍不下他的玩具,于是他决定把所有的玩具运到北京。他使用自己的压缩器进行压 缩,其可以将任意物品变成一堆,再放到一种特殊的一维容器中。P教授有编号为1…N的N件玩具,第i件玩具经过 压缩后变成一维长度为Ci.为了方便整理,P教授要求在一个一维容器中的玩具编号是连续的。同时如果一个一维容 器中有多个玩具,那么两件玩具之间要加入一个单位长度的填充物,形

CF405D Toy Sum

刚看见的时候貌似是一道很难做的题…题面十分的玄学,不能重选的要求也十分难搞… 但是,可以发现N<=5*105从中可以不难发现一旦不能直接取时便会一定有一对正好和为1e6-1 #include<bits/stdc++.h>using namespace std;const int maxS=1000005;int a[maxS],b[maxS],answer[maxS],S,N;bool

[bzoj1010]:[HNOI2008]玩具装箱toy

传送门 HNOI2008 All Clear! 这个题貌似有三种做法。。 首先可以斜率优化dp 然后可以证(da)明(biao)发现决策单调性 之后根据这个结论有两个做法: 1.每次算出来一个dp[i],就往后二分查找影响区间的变化点x,然后将[x,n]涂上i 然后按照这样递推算出来就好了,涂色用线段树, O(nlog2n) O(nlog^2n) 2.用单调队列和二分查找,具体可以

玩具装箱TOY[斜率优化]

传送门 第一次自己推斜率优化,好高兴 对于区间的长度,s[i]表示前缀和在加上i 也就是 首先,考虑暴力的DP  拆开 整理成如下形式   也就是 最小值维护下凸包 #include<bits/stdc++.h>#define y(A) (f[A]+s[A]*s[A]+s[A])#define k(A) (2*s[A]-2*L)#define x(A)

论文阅读:Vary-toy论文阅读笔记

目录 引言整体结构图方法介绍训练vision vocabulary阶段PDF数据目标检测数据 训练Vary-toy阶段Vary-toy结构数据集情况 引言 论文:Small Language Model Meets with Reinforced Vision Vocabulary Paper | Github | Demo 说来也巧,之前在写论文阅读:Vary论