经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » C » 查看文章
洛谷P4925 [1007]Scarlet的字符串不可能这么可爱(计数)
来源:cnblogs  作者:自为风月马前卒  时间:2018/10/9 10:12:14  对本文有异议

题意

题目链接

Sol

只要知道“回文连续子串”就能做了吧。。

想要满足这个条件,肯定是不能出现\(aa\)\(aba\)这种情况

如果没有\(S\)的限制,答案为\(K * (K - 1) * \prod_{i = 3}^n (k - 2)\)

如果有\(S\)的限制就除一个\(K\)

然而考场上没注意到会乘爆long long于是挂乘暴力分。。。。

  1. #include<bits/stdc++.h>
  2. #define int long long
  3. using namespace std;
  4. inline int read() {
  5. char c = getchar(); int x = 0, f = 1;
  6. while(c < '0' || c > '9') {if(c == '-')f =- 1; c = getchar();}
  7. while(c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
  8. return x * f;
  9. }
  10. int K, L, mod, S, W;
  11. int mul(int a, int b) {
  12. return a * b % mod;
  13. }
  14. int fastpow(int a, int p) {
  15. int base = 1; a %= mod;
  16. while(p) {
  17. if(p & 1) base = 1ll * base * a % mod;
  18. a = 1ll * a * a % mod; p >>= 1;
  19. }
  20. return base;
  21. }
  22. main() {
  23. K = read(); L = read(); mod = read();
  24. S = read(); W = read();
  25. K %= mod;
  26. if(S == 0) {
  27. if(L == 1) cout << K;
  28. else if(L == 2) cout << K * (K - 1) % mod;
  29. else cout << 1ll * K * (K - 1) % mod * fastpow(K - 2, L - 2) % mod;
  30. } else {
  31. int base = 1;
  32. if(L == 1) cout << 1;
  33. else if(L == 2) cout << (K - 1) % mod;
  34. else {
  35. base = mul(base, K - 1);
  36. base = base * fastpow(K - 2, L - 2) % mod;
  37. cout << base;
  38. }
  39. }
  40. }
 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号