B. Teams Formation

link

http://codeforces.com/contest/878/problem/B

describe

This time the Berland Team Olympiad in Informatics is held in a remote city that can only be reached by one small bus. Bus has n passenger seats, seat i can be occupied only by a participant from the city ai.

Today the bus has completed m trips, each time bringing n participants. The participants were then aligned in one line in the order they arrived, with people from the same bus standing in the order of their seats (i. e. if we write down the cities where the participants came from, we get the sequence a1, a2, ..., an repeated m times).

After that some teams were formed, each consisting of k participants form the same city standing next to each other in the line. Once formed, teams left the line. The teams were formed until there were no k neighboring participants from the same city.

Help the organizers determine how many participants have left in the line after that process ended. We can prove that answer doesn't depend on the order in which teams were selected.

Input

The first line contains three integers n, k and m (1 ≤ n ≤ 105, 2 ≤ k ≤ 109, 1 ≤ m ≤ 109).

The second line contains n integers a1, a2, ..., an (1 ≤ ai ≤ 105), where ai is the number of city, person from which must take seat i in the bus.

Output

Output the number of remaining participants in the line.

Examples

input

4 2 5

1 2 3 1

output

12

input

1 9 10

1

output

1

input

3 2 10

1 2 1

output

0

Note

In the second example, the line consists of ten participants from the same city. Nine of them will form a team. At the end, only one participant will stay in the line.

题意

给你长度为n的序列,现在把这个序列重复写m次,然后消去长度为k的相同序列,消去若干次之后,问最后剩下什么。

题解

首先预先先把能消除的消除了。然后我们把这个序列切成三块,l+mid+r,其中l和r是能够互相消去的。

假设l和r拼在一起,最后消成了p。

那么最后答案一定是这样的构成 l+mid+p+mid+p+....+p+mid+r这样的。

最后分p是否消除完来讨论即可。

如果p的长度为0,那么我们还得考虑多个mid合在一起的情况。

我的代码写的很丑。。。因为一开始我写的时候少考虑很多种情况,后面修修改改才过去的。

代码

#include<bits/stdc++.h>
using namespace std;
const int maxn = 1e6+7;
int n,k,m,x,p,tot;
int val[maxn],cnt[maxn],val2[maxn],cnt2[maxn];
int a[maxn];
int main(){
scanf("%d%d%d",&n,&k,&m);
for(int i=0;i<n;i++){
scanf("%d",&x);
a[tot]=x;
cnt[tot]=1;
if(tot>0&&a[tot]==a[tot-1])cnt[tot]=cnt[tot-1]+1;
if(cnt[tot]>=k){
tot-=k;
}
tot++;
}
memset(cnt,0,sizeof(cnt));
for(int i=0;i<tot;i++){
x=a[i];
if(p>0&&x==val[p-1]){
cnt[p-1]++;
}else{
val[p]=x;
cnt[p]=1;
p++;
}
}
tot=0;
for(int i=0;i<p;i++){
cnt[i]%=k;
val2[i]=val[i];
cnt2[i]=cnt[i];
}
long long ans = 0;
for(int i=0;i<p;i++){
ans+=cnt[i];
}
if(p==1){
cout<<1ll*ans*m%k<<endl;
return 0;
}
if(m==1){
cout<<1ll*ans<<endl;
return 0;
}
for(int i=0;i<p;i++){
if(cnt2[i]==0)continue;
val[tot]=val2[i];
cnt[tot]=cnt2[i];
tot++;
}
if(val[0]!=val[tot-1]){
cout<<1ll*ans*m<<endl;
return 0;
}
int l = 0,r = tot-1;
int he = 0;
long long solve = 0;
long long deal = 0;
long long cntl=0,cntr=0;
while(he==0&&l<r){
if(val[l]==val[r]){
cntl+=cnt[l];
cntr+=cnt[r];
deal+=(cnt[l]+cnt[r]);
if((cnt[l]+cnt[r])%k){
solve+=(cnt[l]+cnt[r])%k;
he = 1;
break;
}
}else{
break;
}
l++;
r--;
}
long long mid = ans-deal;
//cout<<cntl<<" "<<cntr<<" "<<mid<<" "<<solve<<" "<<he<<endl;
if(val[0]==val[tot-1]&&he){
cout<<cntl+cntr+mid*m+solve*(m-1)<<endl;
return 0;
}
// cout<<r<<" "<<l<<endl;
int flag = r>l?0:1;
if(flag==0){
cout<<cntl+cntr+mid*m<<endl;
return 0;
}else if(mid*m%k==0){
cout<<(cntl+cntr)%k<<endl;
}else{
cout<<(cntl+cntr+mid*m%k)<<endl;
}
}

Codeforces Round #443 (Div. 1) B. Teams Formation的更多相关文章

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

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

  2. Codeforces Round #443 Div. 1

    A:考虑每一位的改变情况,分为强制变为1.强制变为0.不变.反转四种,得到这个之后and一发or一发xor一发就行了. #include<iostream> #include<cst ...

  3. Codeforces Round #443 (Div. 1) D. Magic Breeding 位运算

    D. Magic Breeding link http://codeforces.com/contest/878/problem/D description Nikita and Sasha play ...

  4. Codeforces Round #443 (Div. 1) A. Short Program

    A. Short Program link http://codeforces.com/contest/878/problem/A describe Petya learned a new progr ...

  5. Codeforces Round #443 (Div. 2) C. Short Program

    C. Short Program time limit per test 2 seconds memory limit per test 256 megabytes input standard in ...

  6. Codeforces Round #443 (Div. 1) C. Tournament

    题解: 思路挺简单 但这个set的应用好厉害啊.. 我们把它看成图,如果a存在一门比b大,那么a就可以打败b,a——>b连边 然后求强联通分量之后最后顶层的强联通分量就是能赢的 但是因为是要动态 ...

  7. Codeforces Round #443 (Div. 2)

    C. Short Program Petya learned a new programming language CALPAS. A program in this language always ...

  8. Codeforces Round #443 (Div. 2) C 位运算

    C. Short Program time limit per test 2 seconds memory limit per test 256 megabytes input standard in ...

  9. 【Codeforces Round #443 (Div. 2) A】Borya's Diagnosis

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 模拟 [代码] #include <bits/stdc++.h> using namespace std; const ...

随机推荐

  1. Hive启动失败

    启动hive报如下错误 [root@node01 conf]# hive19/03/31 09:57:31 WARN conf.HiveConf: HiveConf of name hive.meta ...

  2. python---用链表结构实现有序和无序列表的几个功能

    只是看看套路,没有深入练习. 如果真要自己写,可以基于此类. 但其实,在普通使用中,这样实现的性能,并没有python原生的列表性能好. 因为python原生列表的功能,是基于数组作扩展实现的. # ...

  3. C++ 定位new运算符

    这里说的定位new运算符,是一种相对于普通的new运算符,可以指定内存地址的运算符,程序直接使用我们提供的地址,不管它是否已经被使用,而且可以看到新值直接覆盖在旧值上面. 定位new运算符直接使用传递 ...

  4. (转载)dotnet core 中文乱码 codepages

    引子 转载自:http://www.jianshu.com/p/1c9c59c5749a 参考:.Net Core 控制台输出中文乱码 上文中我查阅了一些cli的源码, 闲来无事就继续翻代码, 冥冥之 ...

  5. NEST 中的距离单位

    Distance units Version: 5.x 英文原文地址:Distance units 当我们需要指定距离时(地理位置查询),可以使用一个双精度的数字来表示,它的默认单位是米(meters ...

  6. ghithub中PHPOffice/PHPWord的学习

    1.概念:PHPWord是用纯PHP提供了一组类写入和从不同的文档格式的文件阅读库.PHPWord的当前版本支持微软的Office Open XML(OOXML或处理OpenXML),用于Office ...

  7. CSS3 鲜为人知的属性-webkit-tap-highlight-color的理解

    (一)-webkit-tap-highlight-color         这个属性只用于iOS (iPhone和iPad).当你点击一个链接或者通过Javascript定义的可点击元素的时候,它就 ...

  8. Flask--第三个例子,写一个接口,该接口返回html前端页面,模板的使用

     将接口数据返回至html前端页面有两种方法 方法一: 1 @app.route('/index',methods=['get']) 2 def open_index(): 3 page=open(' ...

  9. UOJ#62. 【UR #5】怎样跑得更快 数论 莫比乌斯反演

    原文链接https://www.cnblogs.com/zhouzhendong/p/UOJ62.html 题解 太久没更博客了,该拯救我的博客了. $$\sum_{1\leq j \leq n} \ ...

  10. /bin/sh ./xxxxx.sh出现:“Syntax error: “(” unexpected”

    Ubuntu/Debian为了加快开机速度,用dash代替了bash. dpkg-reconfigure dash 选择 No,取消dash即可,要重新开启dpkg-reconfigure dash选 ...