题目链接:http://codeforces.com/contest/879/problem/D

题意:这题题意我反正是看了很久,可能是我的理解能力有点差,就是将一个数组倍增m倍然后将连续的相同的k个删除删到不能再删为止。

题解:这里m有点大肯定不能暴力所以可以考虑两个两个之间相互抵消比如

(1231) (1231) (1231) (1231) (1231)

第一部分的后半和第二部分的前半合并,第二部分后半和第三部分前半合并最后第一部分前半和最后一部分后半合并差不多就是这个意思然后就摸你一下就好

#include <iostream>
#include <cstring>
#include <cstdio>
#include <stack>
using namespace std;
const int M = 1e5 + ;
typedef long long ll;
ll Stack[M][];
int main() {
int n , k , m , x , top = ;
ll ans = ;
cin >> n >> k >> m;
for(int i = ; i < n ; i++) {
cin >> x;
if(!top || Stack[top][] != x) {
Stack[++top][] = x;
Stack[top][] = ;
}
else {
Stack[top][]++;
}
if(Stack[top][] == k) {
Stack[top--][] -= k;
}
}
ll sum = ;
for(int i = ; i <= top ; i++) {
sum += Stack[i][];
}
int sta = , ed = top;
while(sta < ed && Stack[sta][] == Stack[ed][]) {
if((Stack[sta][] + Stack[ed][]) % k == ) {
sta++ , ed--;
}
else {
Stack[sta][] = (Stack[sta][] + Stack[ed][]) % k;
Stack[ed][] = ;
break;
}
}
if(sta < ed) {
for(int i = sta ; i <= ed ; i++) ans += Stack[i][];
ans *= (m - );
ans += sum;
}
else if(sta == ed) {
if(Stack[sta][] * m % k == ) ans = ;
else {
ans = sum + Stack[sta][] * (m - );
ans -= Stack[sta][] * m - Stack[sta][] * m % k;
}
}
cout << ans << endl;
return ;
}

最新文章

  1. Linux服务器高并发实践经历
  2. Moosefs源代码分析
  3. 进阶系列三【绝对干货】----Log4.Net的介绍
  4. 轨迹记录App是怎样对定位轨迹进行过滤、优化和平滑处理的
  5. Win10光驱不见了
  6. VB.NET Winform的一些功能实现
  7. Android 判断SIM卡属于哪个移动运营商
  8. 笔记本CPU的型号和类型的区分方法
  9. 使用httpModule做权限系统
  10. 红豆带你从零学C#系列—Visual Studio工具介绍、下载和安装
  11. [asp.net] 利用WebClient上传图片到远程服务
  12. SQL Server存储过程同时返回分页结果集和总数
  13. SQL Server 日志传送[转载]
  14. 【转】使用VS开发 Node.js指南
  15. 纯JS写最简单的图片轮播
  16. Java范型
  17. CentOS 7安装squid代理服务器
  18. 【JVM系列】一步步解析java执行内幕
  19. vue中v-model 与 v-bind:value
  20. 什么是C++

热门文章

  1. C# 委托(delegate)、泛型委托和Lambda表达式
  2. 现代c++与模板元编程
  3. js常用事件列表
  4. Transformations 方块转换 USACO 模拟 数组 数学 耐心
  5. mysql是如何实现事务隔离以及MVCC详解
  6. Spring 源码学习(一)-容器的基础结构
  7. Python基础总结之初步认识---clsaa类(上)。第十四天开始(新手可相互督促)
  8. Spring Cloud下基于OAUTH2+ZUUL认证授权的实现
  9. Java8 CompletableFuture 编程
  10. C++7行代码实现求最大公约数