题意

将一个长度为\(n\)的数组重复\(m\)遍得到一个长度为\(n \times m\)的新序列,然后消掉新序列中连续\(k\)个相同的元素,不断重复这一过程,求最后剩下的序列的长度

分析

首先可以明确一件事就是消除的顺序是任意的,最终得到的序列是相同的

消除的块有两种情况:

  1. 块在序列内部
  2. 块在序列交界处

首先可以消掉每个序列内部可以消去的块,然后再考虑第二部分

两个序列首位相接,每遇到\(k\)个连续的相同颜色的块就消去(注意消去的总长度不超过\(n\)),最终将一个序列分为左中右三部分

这样就是前一个序列的右部分和后一个序列的左部分进行消去,\(m\)个序列进行消去后就变成了:

左部分+中间部分重复\(m\)次+右部分

然后再分成三种情况讨论:

  1. 重复\(m\)次的中间部分是同一种颜色且是\(k\)的倍数,那么最终消去了所有元素
  2. 重复\(m\)次的中间部分是同一种颜色但不能全部消去,那么答案就是消去中间能消的再加上两端
  3. 中间部分有两种颜色或以上说明已经没有可消去的块了
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
using namespace std;
typedef long long LL;
typedef pair<int, int> PII;
#define MP make_pair
#define PB push_back
#define REP(i, a, b) for(int i = a; i < b; i++)
#define PER(i, a, b) for(int i = b - 1; i >= a; i--) const int maxn = 100000 + 10; int n, m, k;
int a[maxn], S[maxn], cnt[maxn], top; int main() {
bool single_color = true;
scanf("%d%d%d", &n, &k, &m);
REP(i, 0, n) scanf("%d", a + i);
REP(i, 1, n) if(a[i] != a[i - 1]) { single_color = false; break; } if(single_color) {
printf("%I64d\n", (LL)n * m % k);
return 0;
} REP(i, 0, n) {
S[++top] = a[i];
if(top > 1 && S[top] == S[top-1]) cnt[top] = cnt[top-1] + 1;
else cnt[top] = 1;
if(cnt[top] >= k) top -= k;
} int L = 1, R = top;
LL t = 0; while(S[L] == S[R] && L < R) {
int l = L, r = R, cnt = 0;
while(S[l] == S[L] && l < r && cnt < k) { cnt++; l++; }
while(S[r] == S[L] && l < r && cnt < k) { cnt++; r--; }
if(cnt == k) { L = l; R = r; t += k; }
else break;
} single_color = true;
REP(i, L, R) if(S[i] != S[i+1]) { single_color = false; break; }
if(single_color) {
LL mid = (LL)(R-L+1)*m%k;
if(mid) printf("%lld\n", mid + t);
else printf("0\n");
} else {
printf("%lld\n", (LL)(R-L+1)*m + t);
} return 0;
}

CodeForces 879D Teams Formation的更多相关文章

  1. 【Codeforces】879D. Teams Formation 思维+模拟

    题意 给定$n$个数,重复拼接$m$次,相邻$k$个重复的可消除,问最后序列中有多少个数 首先可以发现当$k>=n$时,如果要使$n$个数可以被消除,那么$n$个数必须一样,否则$n$个数不能被 ...

  2. Codeforces Round #443 (Div. 1) B. Teams Formation

    B. Teams Formation link http://codeforces.com/contest/878/problem/B describe This time the Berland T ...

  3. cf 443 D. Teams Formation](细节模拟题)

    cf 443 D. Teams Formation(细节模拟题) 题意: 给出一个长为\(n\)的序列,重复\(m\)次形成一个新的序列,动态消除所有k个连续相同的数字,问最后会剩下多少个数(题目保证 ...

  4. codeforces 879 D. Teams Formation(思维)

    题目链接:http://codeforces.com/contest/879/problem/D 题意:这题题意我反正是看了很久,可能是我的理解能力有点差,就是将一个数组倍增m倍然后将连续的相同的k个 ...

  5. 443 D. Teams Formation

    http://codeforces.com/contest/879/problem/D This time the Berland Team Olympiad in Informatics is he ...

  6. Teams Formation

    题意: 给定一长度为 n 的整数序列 $a$,将其复制m次,并接成一条链,每相邻K个相同的整数会消除,然后其他的整数继续结成一条链,直到不能消除为止,求问最终剩余多少个整数. 解法: 首先将长度为n的 ...

  7. Codeforces Round #443 (Div. 2) 【A、B、C、D】

    Codeforces Round #443 (Div. 2) codeforces 879 A. Borya's Diagnosis[水题] #include<cstdio> #inclu ...

  8. codeforces 478B Random Teams

    codeforces   478B  Random Teams  解题报告 题目链接:cm.hust.edu.cn/vjudge/contest/view.action?cid=88890#probl ...

  9. Codeforces 552 E. Two Teams

    E. Two Teams time limit per test 2 seconds memory limit per test 256 megabytes input standard input ...

随机推荐

  1. u-boot分析(十一)----MMU简单分析|u-boot分析大结局|学习规划

    u-boot分析(十一) 通过前面十篇博文,我们已经完成了对BL1阶段的分析,通过这些分析相信我们对u-boot已经有了一个比较深入的认识,在BL2阶段大部分是对外设的初始化,并且有的我们已经分析过, ...

  2. PB导出规定格式DBF文件 dBase 3 格式 222个字段

    最近在做一个给卫计委做数据上报的数据接口,接口要求使用奇葩的dBase 3数据库存储上报数据,忙活了几天总算搞好了,使用开发工具为powerbuild 12,222个字段的上报数据表生成DBF文件,写 ...

  3. php:定义时间跳转到指定页面

    我们想要定义延迟时间,再跳转到指定页面,只要用header()即可,语法: header("Refresh:延迟时间;url=要跳转的页面"); 例子: 注意注意:我们在heade ...

  4. 前端必须要掌握的几个CSS3的属性

    随着Css3和html5的风靡,越来越多的前端人员开始学习Css3,今天的文章就是来说说前端应该掌握10个Css3属性. 1. Border-radius Border-radius是一大堆CSS3属 ...

  5. 初学React:定义一个组件

    接着聊React,今天说说如何创建一个组件类. <!DOCTYPE html> <html lang="en"> <head> <meta ...

  6. spring-mabatis整合的配置文件

    1.spring.xml <?xml version="1.0" encoding="UTF-8"?> <beans xmlns=" ...

  7. 解决Wamp各版本中 Apache 文件列表图标无法显示

    Edit the following file manually and change the path to the icons folder (it appears times in the fi ...

  8. Poj(1789),最小生成树,Prim

    题目链接:http://poj.org/problem?id=1789 还是套路. #include <stdio.h> #include <string.h> #define ...

  9. 2017.10.1 JDBC数据库访问技术

    4.1 JDBC技术简介 4.1.1 定义 JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的 java API,由一组类与接口组成,通过 ...

  10. Laravel5 构造器高级查询条件写法

    <?php #DB 高级查询 // select * from table where A and B or C $all_data = DB::table("shopnc_goods ...