Codeforces Round #443 (Div. 1) B. Teams Formation
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的更多相关文章
- Codeforces Round #443 (Div. 2) 【A、B、C、D】
Codeforces Round #443 (Div. 2) codeforces 879 A. Borya's Diagnosis[水题] #include<cstdio> #inclu ...
- Codeforces Round #443 Div. 1
A:考虑每一位的改变情况,分为强制变为1.强制变为0.不变.反转四种,得到这个之后and一发or一发xor一发就行了. #include<iostream> #include<cst ...
- Codeforces Round #443 (Div. 1) D. Magic Breeding 位运算
D. Magic Breeding link http://codeforces.com/contest/878/problem/D description Nikita and Sasha play ...
- 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 ...
- 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 ...
- Codeforces Round #443 (Div. 1) C. Tournament
题解: 思路挺简单 但这个set的应用好厉害啊.. 我们把它看成图,如果a存在一门比b大,那么a就可以打败b,a——>b连边 然后求强联通分量之后最后顶层的强联通分量就是能赢的 但是因为是要动态 ...
- Codeforces Round #443 (Div. 2)
C. Short Program Petya learned a new programming language CALPAS. A program in this language always ...
- Codeforces Round #443 (Div. 2) C 位运算
C. Short Program time limit per test 2 seconds memory limit per test 256 megabytes input standard in ...
- 【Codeforces Round #443 (Div. 2) A】Borya's Diagnosis
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 模拟 [代码] #include <bits/stdc++.h> using namespace std; const ...
随机推荐
- Docker建立自己的私有仓库
拉去仓库镜像 docker pull registry:latest 创建存储账户的文件夹路径 mkdir -p /{dir}/auth/ 创建用户密码信息文件 docker run --entryp ...
- ubuntu安装php+mysql+apche
步骤一,安装apache2 ? sudo apt-get install apache2 安装完成. 运行如下命令重启下: ? sudo /etc/init.d/apache2 restart 在浏览 ...
- photoshop CC智能切图
网页设计在技术层面上,第一步是美工做出网页效果图,第二步就是网页前端进行网页切图.网页切图工具常用的有fireworks.PS,这里使用PS进行网页切图. 我们通过设计稿,得到我们想要的产出物(如.p ...
- .net core 中的 DependencyInjection - IOC
概要:因为不知道写啥,所以随便找个东西乱说几句,嗯,就这样,就是这个目的. 1.IOC是啥呢? IOC - Inversion of Control,即控制反转的意思,这里要搞明白的就是,它是一种思想 ...
- C# 之 日常问题积累(一)
1.响应在此上下文中不可用(Response). 异常:响应在此上下文中不可用 产生异常的过程:在asp.net程序中添加了一个 类.cs ,其中有一段代码如下 : Response.ClearCon ...
- 对线性回归,logistic回归和一般回归
对线性回归,logistic回归和一般回归 [转自]:http://www.cnblogs.com/jerrylead JerryLead 2011年2月27日 作为一个机器学习初学者,认识有限,表述 ...
- bootstrap下jQuery自动完成的样式调整-【jQuery】
1. 覆盖层调整 在bootstrap的对话框中,当其中的输入项使用了自动完成控件,则其中下拉框中的内容就会被bootstrap对话框的覆盖层遮盖. 为了能够使后面的自动完成的层显示出来,可以使用如下 ...
- Loadbalancer
LoadBalancer 可以将来自客户端的请求分发到不同的服务器,通过将一系列的请求转发到不同的服务器可以提高服务器的性能,并可以自动地寻找最优的服务器转发请求,这样不仅提高了系统性能,同时达到了负 ...
- 黑色半透明镂空遮罩指引效果实现jQuery小插件
/*! * by zhangxinxu(.com) 2017-05-18 * 新版上线时候的黑色半透明镂空遮罩指引效果实现jQuery小插件 * 兼容到IE8+ * MIT使用协议,使用时候保留版权 ...
- html5的audio实现高仿微信语音播放效果
效果图 前台大体呈现效果图如下: 点击就可以播放mp3格式的录音.点击另外一个录音,当前录音停止! 思路 关于播放动画,这个很简单,我们可以用css3的逐帧动画来实现.关于逐帧动画,我之前的文章也写过 ...