题意

给定$n$个数,重复拼接$m$次,相邻$k$个重复的可消除,问最后序列中有多少个数


首先可以发现当$k>=n$时,如果要使$n$个数可以被消除,那么$n$个数必须一样,否则$n$个数不能被消除

当$k<n$时,首先对序列能够消除的消除,用栈记录每个数和这个数的相同的相邻个数$f$,将序列压缩,考虑一次拼接,记$L$为第二个序列的开始元素,$R$为第一个序列的最后一个元素,如果$L!=R$那么所有序列将不能压缩,如果$LR,f_L+f_R!=k$,那么这两个序列拼接之后会合并成一个不可被消去的元素,减去$m-1$次的贡献得到答案,如果$LR,f_L+f_R==k$,那么这两个可以完全被消除,那么按照相同方式计算$L+1,R-1$对应的贡献,最后如果整个序列都能合并到最后,如果$n$为奇数,表示最后会剩下一个元素,计算这个元素对应答案,如果$n$为偶数,那么答案为$0$

代码

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
int st[100100], f[100100];
int n, k, m, a, flag = 0, top = 1;
LL ans = 0;
int main() {
scanf("%d%d%d", &n, &k, &m);
st[0] = 0;
for(int i = 1; i <= n; ++i) {
scanf("%d", &a);
if(st[top - 1] != a) st[top] = a, f[top++] = 1;
else {
if(f[top - 1] + 1 < k) f[top - 1] += 1;
else if(f[top - 1] + 1 == k) top--;
}
}
if(k >= n) {
for(int i = 1; i < top - 1; ++i) if(st[i] != st[i + 1]) flag = 1;
if(!flag) cout << 1LL * n * m % k << endl; else cout << 1LL * n * m << endl;
return 0;
}
for(int i = 1; i < top; ++i) ans += f[i];
if(m == 1 || ans == 0) {cout << ans << endl; return 0;}
ans = 1LL * m * ans;
int L = 1, R = top - 1;
while(L < R) {
if(st[L] != st[R]) {cout << ans << endl; return 0;}
if(f[L] + f[R] == k) {L++; R--;ans -= 1LL * (m - 1) * k; continue;}
if(f[L] + f[R] > k) ans -= 1LL * (m - 1) * k;
cout << ans << endl; return 0;
}
if(L > R) {cout << 0 << endl; return 0;}
if(L == R) {
LL x = 1LL * f[L] * m;
if(x % k == 0) {cout << 0 << endl;}
else {cout << ans - x / (LL)k * (LL)k << endl;}
}
return 0;
}

【Codeforces】879D. Teams Formation 思维+模拟的更多相关文章

  1. CodeForces 879D Teams Formation

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

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

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

  3. codeforces 887A Div. 64 思维 模拟

    A. Div. 64 time limit per test 1 second memory limit per test 256 megabytes input standard input out ...

  4. Codeforces 1087C Connect Three (思维+模拟)

    题意: 网格图选中三个格,让你选中一些格子把这三个格子连起来,使得选中的格子总数最小.最后输出方案 网格范围为1000 思路: 首先两点间连起来最少需要的格子为他们的曼哈顿距离 然后连接方案一定是曼哈 ...

  5. 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 ...

  6. CodeForces.158A Next Round (水模拟)

    CodeForces.158A Next Round (水模拟) 题意分析 校赛水题的英文版,坑点就是要求为正数. 代码总览 #include <iostream> #include &l ...

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

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

  8. Codeforces Round #706 (Div. 2)B. Max and Mex __ 思维, 模拟

    传送门 https://codeforces.com/contest/1496/problem/B 题目 Example input 5 4 1 0 1 3 4 3 1 0 1 4 3 0 0 1 4 ...

  9. Codeforces 758D:Ability To Convert(思维+模拟)

    http://codeforces.com/problemset/problem/758/D 题意:给出一个进制数n,还有一个数k表示在n进制下的值,求将这个数转为十进制最小可以是多少. 思路:模拟着 ...

随机推荐

  1. dtrace 语法

    Usage: dtrace [-aACeFHlqSvVwZ] [-arch i386|x86_64] [-b bufsz] [-c cmd] [-D name[=def]]      [-I path ...

  2. 非常easy的JAVA反射教程

    原创文章,转载请注明. 反射能够动态载入类,实例化对象,调用方法.如今以下面样例解说. 一.载入类. Class clazz = Class.forName("java.lang.Strin ...

  3. Cts框架解析(15)-任务运行完

    case运行完成后.会回到CtsTest的run方法中: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaXRmb290YmFsbA==/font/5a6L ...

  4. 使用 Navicat 8.0 管理mysql数据库(导出导入数据)

    http://dxcns.blog.51cto.com/1426423/367105 使用Navicat For MySql 将mysql中的数据导出,包括数据库表创建脚本和数据 (1)数据的导出:右 ...

  5. centos创建本地yum仓库

    怎样发布自己软件的安装和更新YUM源 在创建之前,我们先了解些相关的内容: yum仓库可以支持三种途径提供给yum在安装的时候下载rpm包 第一种:  ftp服务  ftp:// 第二种:  http ...

  6. 轻松搞定RabbitMQ(三)——消息应答与消息持久化

    转自 http://blog.csdn.net/xiaoxian8023/article/details/48710653 这个官网的第二个例子中的消息应答和消息持久化部分.我把它摘出来作为单独的一块 ...

  7. Android异步载入AsyncTask具体解释

    曾看见有人说过.认为非常有道理.分享一下:   技术分为术和道两种:   (1)具体做事的方法是术.   (2)做事的原理和原则是道. 近期项目发现个重大问题.结果打log跟踪查是AsyncTask导 ...

  8. python-pyDes-ECB加密-DES-DES3加密

    网上的教程都他妹的是抄的,抄也就算了,还改抄错了,害我写了一两天都没找到原因,直接去官网看,找例子很方便 官网链接:http://twhiteman.netfirms.com/des.html 一个小 ...

  9. 如何将mysql的路径加入环境变量

    1.打开终端,输入: cd ~ 会进入~文件夹 2.然后输入:touch .bash_profile 回车执行后, 2.再输入:open -e .bash_profile 会在TextEdit中打开这 ...

  10. gridcontrol复选框功能实现(超具体)

    博主这几天就准备离职了,以后不再做.Net开发.因此这应该是我写的最后一篇关于dev控件的博文.既然是最后一篇,那就写的具体一些.画个圆满的省略号...... 本文介绍gridcontrol怎样实现复 ...