题目链接

种花 flower

题目描述

OI太可怕了,我决定回家种田。
我在后院里开辟了一块圆形的花圃,准备种花。种花是一种艺术,通过一定技术手法,花材的排列组合会让花变得更加的赏心悦目,这就是花艺。
当然你知道,我在种田之前是OIer,所以我不懂花艺,只会排列组合。我把花圃从圆心向外画线,分成了\(N\)块扇形,分别编号为\(1\),\(2\),\(3\).....\(N\),再从村里的商店采购了\(M\)种花。然后我大胆的决定:花圃中的每块只种\(M\)种花中的一种,相邻的两块不能种同一种花。我反应比较慢,所以我请来了机房里手速最快的强袭黯灭勋章鱼人守卫来帮我,让他试一下每种排列,看看哪种最令人赏心悦目。
有一些人,他们的美丽就在身边,也许就在自己身上,像艺术家一样,他们的眼光独到特别,可就因为他们不是艺术家,他们不被人们认可,被称之为另类。简单真实的事情总可以绽放最鲜艳的花,我欣赏这样的人的心理,当然拒绝粗鲁地对待一切。
正想着,他居然告诉我已经尝试完了。这怎么可能?这可一共有.......多少种方案来着?
众所周知的是,我的智商很低。
我想知道种花的方案一共有几种。

输入格式:

仅一行,包含两个整数,分别为\(N\)和\(M\)。

输出格式:

仅一行,包含一个整数,表示方案数。这个数可能很大,你只需要输出这个数对\(1000000007\)取模的结果。

样例输入:

3 3

样例输出:

6

数据范围:

对于20%的数据,\(0<N≤5\),\(1<M≤5\)
对于60%的数据,\(0<N≤500,000\)
对于100%的数据,\(0<N≤10^{18}\),\(1<M≤10^9\)

时间限制:

1S

空间限制:

128M

提示:

remove!!!

题解

此题的题意就是将\(m\)种点放到\(n\)个围成圈的位置里,要求相邻的点不能相同。
我们先假设\(n\)个位置是一条链,那么方案数就是\(m(m-1)^{n-1}\)。
那么如果是环的话方案数就是\(m(m-1)^{n-1}\)再减去最后一个位置和第一个位置重复的个数就行了。
考虑一下当倒数第二个位置和第一个位置相同的话,因为最后一个位置和倒数第二个位置是不同的,所以这部分的最后一个位置和第一个位置是不会相同的。
当倒数第二个位置和第一个位置不相同的话,倒数第二个位置和第一个位置的每一种不相同的情况下,最后一个位置都会存在和第一个位置一样的情况被计算在\(m(m-1)^{n-1}\)中。
所以方案数就是\(m(m-1)^{n-1}\)减去倒数第二个位置和第一个位置不相同的方案数。
如果\(F[n]\)表示有\(n\)个位置时的方案数。
那么\(F[n]=m(m-1)^{n-1}-F[n-1]\)就是方案数的递推方程了。
这里要注意一下:
\(F[1]=m\)是显而易见的。
但是当\(n=2\)时,倒数第二个位置就是第一个位置,所以\(F[2]=m(m-1)\)。
题目说\(0<N≤10^{18}\),但是递推方程的时间复杂度是\(O(n)\)的。
所以我们用等比数列求和来优化一下。
得到\(F[n]=(m-1)^n+(m-1)(-1)^n\)
接着我们再用快速幂优化后时间复杂度就变成了\(O(log_2n)\)。
上代码:

#define mod 1000000007
using namespace std;
long long n,m;
long long ksm(long long x,long long p){long long s=x,ans=1;while(p){if(p&1) ans*=s;s*=s;s%=mod;ans%=mod;p/=2;}return ans%mod;
}
int main(){scanf("%lld%lld",&n,&m);printf("%lld",(ksm(m-1,n)%mod+((m-1)*ksm(-1,n))%mod+mod)%mod);return 0;
}

转载于:https://www.cnblogs.com/linjiale/p/11602032.html

【XJOI】种花 flower相关推荐

  1. NOIP16提高组赛前训练20-day2 T2:种花 flower(组合数学)

    NOIP16提高组赛前训练20-day2 T2:种花 flower 题目描述: OI太可怕了,我决定回家种田. 我在后院里开辟了一块圆形的花圃,准备种花.种花是一种艺术,通过一定技术手法,花材的排列组 ...

  2. LeetCode刷题-种花问题

    前言说明 算法学习,日常刷题记录. 题目连接 种花问题 题目内容 假设有一个很长的花坛,一部分地块种植了花,另一部分却没有.可是,花不能种植在相邻的地块上,它们会争夺水源,两者都会死去. 给你一个整数 ...

  3. 2012_p3 摆花 (flower.cpp/c/pas)

    问题 F: 2012_p3 摆花 (flower.cpp/c/pas) 时间限制: 1 Sec  内存限制: 128 MB 提交: 16  解决: 9 [提交][状态][讨论版][命题人:外部导入] ...

  4. 【每日一算法】种花问题

    微信改版,加星标不迷路! 每日一算法-种花问题 作者:阿广 阅读目录 1 题目 2 解析 1 题目 假设你有一个很长的花坛,一部分地块种植了花,另一部分却没有.可是,花卉不能种植在相邻的地块上,它们会 ...

  5. HDU - 6486 Flower(思维)

    HDU - 6486 Flower 题目大意:有n堆草每次只能对n-1堆操作每次只能减1问最少操作几次能把这些草剪到相同高度如果不能输出-1 我们让n-1个数减1实际上可以看成使得剩下的那一个数加1. ...

  6. flower.php,flowerlist.php

    require_once('nav.php'); ?> $sql = 'select * from flower'; $result = fetch_array($sql); ?> 鲜花列 ...

  7. 捡垃圾、跳大绳、种花、写字,波士顿动力机器狗迎来重大升级

    2021-02-02 12:26:06 机器之心报道 作者:蛋酱.魔王 今天,波士顿动力发布了 Spot 机器人全新视频,除了添加了一条机械臂,它还能实现捡垃圾.跳绳.种花等多种功能. 当你以为波士顿 ...

  8. 校招真题练习011 种花(美团)

    种花 题目描述 公园里有N个花园,初始时每个花园里都没有种花,园丁将花园从1到N编号并计划在编号为i的花园里恰好种A_i朵花,他每天会选择一个区间[L,R](1≤L≤R≤N)并在编号为L到R的花园里各 ...

  9. XJOI 3585 The rescue plan 营救计划 题解

    英文 Time Limit:1s Memory Limit:256M Description Given a n*m map.A "Mengxin" is trapped.You ...

最新文章

  1. python习题:修改文件里的内容
  2. 【项目实战课】人人免费可学!基于Pytorch的图像分类简单任务数据增强实战
  3. Charles学习(三)之使用Map local代理本地静态资源以及配置网页代理在Mac模拟器调试iOS客户端...
  4. VS2019-写opengl时Bugs合集(持续更新)
  5. 在python中获取当前工作目录可以通过_python-获取当前工作路径
  6. php phar效率,PHP的Phar包原来性能这么强
  7. ios字典存bool_iOS 开发之字典写入文件
  8. docker_4 数据卷技术
  9. 【少儿软件的定制】如何吸引少儿的学习兴趣?如何提高少儿学习软件的粘度?
  10. mapreduce实现——腾讯大数据QQ共同好友推荐系统【你可能认识的人】
  11. foremost文件删除恢复
  12. 同轴馈电微带天线(一)
  13. c语言中闰年的流程图_c语言(算法流程图).ppt
  14. 【大学分析】985只要国家线?华东师范大学考研情况如何?
  15. Hubble数据库x某股份制商业银行:一款混布数据库的“交易+分析”提速之路
  16. gta5正版私人服务器,《GTA5》国内神级服务器,万人同服?堪称虚拟版地球OL?...
  17. 各大搜索引擎收录入口
  18. 怎么用一个显示器来显示和控制两台主机
  19. 蓝牙耳机哪款打游戏最好用?值得入手的四款低延迟游戏蓝牙耳机
  20. 怎么调计算机运行内存大小,运行内存太小怎么办?如何扩大电脑的运行内存?...

热门文章

  1. 平安科技亮相重庆,「AI人脸识别+健康医疗」首秀;GE 推智能医疗影像系统UV6.0,已在3000家机构投入使用...
  2. 谈谈我对P2P网络借贷的一些看法
  3. 报表工具的第二次革命,室友用了大喊三声好好好!
  4. mysql replicate-rewrite-db,mysql 主从复制 replicate-rewrite-db 无效
  5. 易语言注册机原理介绍
  6. web界面——html基础
  7. odoo13 订单模板设置_Odoo12: 自定义配置面板
  8. mac系统删除.DS_Store文件
  9. Word控件Spire.Doc 【列表】教程:在 Word 文档中插入列表
  10. 角蜂鸟AI视觉套件1:开箱和开发环境搭建