https://vijos.org/p/1789

我yy了一下发现我的方法没错啊,为嘛才80分。。(后来看了题解,噗,还要判断k>n和k=1的情况QAQ

当k=1的时候,答案显然是m^n

当k>n的时候,显然随便搞都满足

当n=k的时候,显然这是个排列就能做的,枚举一半必定有且只有一个另一半与之对应,所以直接做就行了。

当k是奇数的时候,我们可以假设有一个奇数长的模型,每一次向右移动一个,显然最前边和最后边、此前边和次后边以此类推,他们都是相等的,也就是说,这个序列一定由两个元素组成(可以相同)那么显然有m*m种方法

当k是偶数的时候,根据前边的分析,显然只有m种序列(每一种序列的元素是一模一样的)

  1. #include <cstdio>
  2. #include <cstring>
  3. #include <cmath>
  4. #include <string>
  5. #include <iostream>
  6. #include <algorithm>
  7. #include <queue>
  8. using namespace std;
  9. typedef unsigned long long ll;
  10. #define rep(i, n) for(int i=0; i<(n); ++i)
  11. #define for1(i,a,n) for(ll i=(a);i<=(n);++i)
  12. #define for2(i,a,n) for(int i=(a);i<(n);++i)
  13. #define for3(i,a,n) for(int i=(a);i>=(n);--i)
  14. #define for4(i,a,n) for(int i=(a);i>(n);--i)
  15. #define CC(i,a) memset(i,a,sizeof(i))
  16. #define read(a) a=getint()
  17. #define print(a) printf("%d", a)
  18. #define dbg(x) cout << (#x) << " = " << (x) << endl
  19. #define printarr2(a, b, c) for1(_, 1, b) { for1(__, 1, c) cout << a[_][__]; cout << endl; }
  20. #define printarr1(a, b) for1(_, 1, b) cout << a[_] << '\t'; cout << endl
  21. inline const ll getint() { ll r=0, k=1; char c=getchar(); for(; c<'0'||c>'9'; c=getchar()) if(c=='-') k=-1; for(; c>='0'&&c<='9'; c=getchar()) r=r*10+c-'0'; return k*r; }
  22. inline const int max(const int &a, const int &b) { return a>b?a:b; }
  23. inline const int min(const int &a, const int &b) { return a<b?a:b; }
  24.  
  25. const ll MD=1e9+7;
  26. ll n, m, k, ans=1;
  27. ll mul(ll a, ll b) { return ((a%MD)*(b%MD))%MD; }
  28. int main() {
  29. read(n); read(m); read(k);
  30. if(k==1 || k>n) for1(i, 1, n) ans=mul(ans, m);
  31. else if(n==k) {
  32. ll mid=(n+1)>>1; ans=1;
  33. for1(i, 1, mid) ans=mul(ans, m);
  34. }
  35. else if(k&1) ans=mul(m, m);
  36. else ans=m;
  37. printf("%lld\n", ans%MD);
  38. return 0;
  39. }

描述

假设有M个字母,问由这些字母可以组成多少个满足以下条件的长度为N的串:该串的任意长度为K的子串是一个回文串。答案可能很大,只需输出对10^9+7取模的结果。

回文串是指从左往右和从右往左读起来一样。例如:aba, abba

格式

输入格式

读入三个正整数:N,M,K。

输出格式

输出一个整数,表示满足条件的串的个数对10^9+7取模的结果。

样例1

样例输入1[复制]

  1. 5 2 4

样例输出1[复制]

  1. 2

限制

每个测试点1s。

提示

对于30%的测试数据,N,M<=5。

对于100%的测试数据,N,M,K<=2000。

【vijos】1789 String(组合计数+奇怪的题)的更多相关文章

  1. [Bzoj1008][HNOI2008]越狱(组合计数)

    题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1008 组合计数的简单题,可能越狱的方案数等于总方案数-不可能越狱的方案数,则: 总方案数 ...

  2. FJOI2020 的两道组合计数题

    最近细品了 FJOI2020 的两道计数题,感觉抛开数据范围不清还卡常不谈里面的组合计数技巧还是挺不错的.由于这两道题都基于卡特兰数的拓展,所以我们把它们一并研究掉. 首先是 D1T3 ,先给出简要题 ...

  3. 【BZOJ5491】[HNOI2019]多边形(模拟,组合计数)

    [HNOI2019]多边形(模拟,组合计数) 题面 洛谷 题解 突然特别想骂人,本来我考场现切了的,结果WA了几个点,刚刚拿代码一看有个地方忘记取模了. 首先发现终止态一定是所有点都向\(n\)连边( ...

  4. [总结]数论和组合计数类数学相关(定理&证明&板子)

    0 写在前面 0.0 前言 由于我太菜了,导致一些东西一学就忘,特开此文来记录下最让我头痛的数学相关问题. 一些引用的文字都注释了原文链接,若侵犯了您的权益,敬请告知:若文章中出现错误,也烦请告知. ...

  5. 【BZOJ5323】[JXOI2018]游戏(组合计数,线性筛)

    [BZOJ5323][JXOI2018]游戏(组合计数,线性筛) 题面 BZOJ 洛谷 题解 显然要考虑的位置只有那些在\([l,r]\)中不存在任意一个约数的数. 假设这样的数有\(x\)个,那么剩 ...

  6. 【BZOJ5305】[HAOI2018]苹果树(组合计数)

    [BZOJ5305][HAOI2018]苹果树(组合计数) 题面 BZOJ 洛谷 题解 考虑对于每条边计算贡献.每条边的贡献是\(size*(n-size)\). 对于某个点\(u\),如果它有一棵大 ...

  7. 【BZOJ3142】[HNOI2013]数列(组合计数)

    [BZOJ3142][HNOI2013]数列(组合计数) 题面 BZOJ 洛谷 题解 唯一考虑的就是把一段值给分配给\(k-1\)天,假设这\(k-1\)天分配好了,第\(i\)天是\(a_i\),假 ...

  8. 【BZOJ4005】[JLOI2015] 骗我呢(容斥,组合计数)

    [BZOJ4005][JLOI2015] 骗我呢(容斥,组合计数) 题面 BZOJ 洛谷 题解 lalaxu #include<iostream> using namespace std; ...

  9. 【BZOJ4830】[HNOI2017]抛硬币(组合计数,拓展卢卡斯定理)

    [BZOJ4830][HNOI2017]抛硬币(组合计数,拓展卢卡斯定理) 题面 BZOJ 洛谷 题解 暴力是啥? 枚举\(A\)的次数和\(B\)的次数,然后直接组合数算就好了:\(\display ...

随机推荐

  1. RocketMq通信协议格式及编解码 (源码分析)

    一.RocketMq broker服务器与客户端的网络通信是基于netty4.x实现的,重点分析  RocketMq设计的通信协议及对应的编解码 开发.         名字解释           ...

  2. cordova百度地图定位Android版插件

    本插件利用百度地图提供的定位功能进行Android版手机定位. 为什么没有iOS版? 因为iOS版有官方的定位插件cordova-plugin-geolocation可以使用. 请参照:cordova ...

  3. DOM BOM document window 区别

    DOM 是为了操作文档出现的 API,document 是其的一个对象: BOM 是为了操作浏览器出现的 API,window 是其的一个对象.   使用下图讲解:   归DOM管的: E区:即doc ...

  4. list_entry(ptr, type, member)——知道结构体内某一成员变量地址,求结构体地址

    #define list_entry(ptr, type, member) \ ((type *)(() -> member))) 解释: 1 在0这个地址看做有一个虚拟的type类型的变量,那 ...

  5. python能够执行,但编译第三包遇到 python.h no such file or directory

    python能够执行,但编译第三包遇到 python.h no such file or directory 这个问题是由于没有安装python-devel, 安装此包就能够解决次问题,在Linux下 ...

  6. docker build 的 cache 机制

    cache 机制注意事项 可以说,cache 机制很大程度上做到了镜像的复用,降低存储空间的同时,还大大缩短了构建时间.然而,不得不说的是,想要用好 cache 机制,那就必须了解利用 cache 机 ...

  7. nginx 配置一个文件下载服务

    cat openvpn.conf server { listen ; server_name localhost; location / { root /home/openvpn/client_fil ...

  8. 动态添加easyui 控件

    jquery提供了append,appendTo方法,可以动态添加静态的html文本,在easyui中,要动态添加easyui控件要怎么做呢,下面就来介绍动态添加easyui控件. 使用方法:和添加静 ...

  9. Android MimeType的用途以及所有类型

    MIME TYPE描述 多用途互联网邮件扩展(MIME,Multipurpose Internet Mail Extensions)是一个互联网标准,它扩展了电子邮件标准,使其能够支持非ASCII字符 ...

  10. 저장소system.runtime.remoting.messaging.callcontext

    https://msdn.microsoft.com/ko-kr/library/system.runtime.remoting.messaging.callcontext(v=vs.110).asp ...