CodeForces - 620C Pearls in a Row 贪心 STL
2 seconds
256 megabytes
standard input
standard output
There are
n pearls in a row. Let's enumerate them with integers from
1 to
n from the left to the right. The pearl number
i has the type
ai.
Let's call a sequence of consecutive pearls a
segment. Let's call a segment
good if it contains two pearls of the same type.
Split the row of the pearls to the maximal number of good segments. Note that each pearl should appear in exactly one segment of the partition.
As input/output can reach huge size it is recommended to use fast input/output methods: for example, prefer to use
scanf/printf instead of
cin/cout in C++, prefer to use
BufferedReader/PrintWriter instead of
Scanner/System.out in
Java.
The first line contains integer
n (1 ≤ n ≤ 3·105)
— the number of pearls in a row.
The second line contains
n integers
ai (1 ≤ ai ≤ 109)
– the type of the
i-th pearl.
On the first line print integer
k — the maximal number of segments in a partition of the row.
Each of the next
k lines should contain two integers
lj, rj
(1 ≤ lj ≤ rj ≤ n)
— the number of the leftmost and the rightmost pearls in the
j-th segment.
Note you should print the correct partition of the row of the pearls, so each pearl should be in exactly one segment and all segments should contain two pearls of the same type.
If there are several optimal solutions print any of them. You can print the segments in any order.
If there are no correct partitions of the row print the number "-1".
5
1 2 3 4 1
1
1 5
5
1 2 3 4 5
-1
7
1 2 1 3 1 2 1
2
1 3
4 7
这题找规律,从第一个数开始向后搜索,当有一个数字重复时则记录该位置,再从下一个数字开始向后重新搜索。可使用STL中的set函数
AC代码
#include<stdio.h>
#include<set>
using namespace std;
int pos[300005];
set<int>a;
int main()
{
int n,m=0,b;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&b);
if(a.count(b)==0)//检查b是否出现过
{
a.insert(b);//在末尾插入b
}
else
{
pos[m]=i;
m++;
a.clear();//清除a中数据
} }
if(m==0)
{
printf("-1\n");
}
else
{
pos[m-1]=n;
printf("%d\n",m);
printf("1 %d\n",pos[0]);
for(int i=0;i<m-1;i++)
{
printf("%d %d\n",pos[i]+1,pos[i+1]);
}
}
return 0;
}
最近刚学的STL,本来想用循环来搜索重复数字的,结果超时,不过可作为思路
#include<stdio.h>
int a[300005],pos[300005];
int main()
{
int n,m=0;
pos[m]=0;
scanf("%d",&n);
for(int i=1;i<=n;i++)
{
scanf("%d",&a[i]);
for(int j=pos[m]+1;j<i;j++)
{
if(a[j]==a[i])
{
m++;
pos[m]=i;
}
}
}
if(m==0)
{
printf("-1\n");
}
else
{
pos[m]=n;
printf("%d\n",m);
printf("1 %d\n",pos[1]);
for(int i=1;i<m;i++)
{
printf("%d %d\n",pos[i]+1,pos[i+1]);
}
}
return 0;
}
CodeForces - 620C Pearls in a Row 贪心 STL的更多相关文章
- CodeForces 620C Pearls in a Row
水题,每当出现重复就分割开来,最后留下的尾巴给最后一段 #include<cstdio> #include<cstring> #include<cmath> #in ...
- codeforces C. Pearls in a Row map的应用
C. Pearls in a Row time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- cf 620C Pearls in a Row(贪心)
d.有一串数字,要把这些数字分成若干连续的段,每段必须至少包含2个相同的数字,怎么分才能分的段数最多? 比如 是1 2 1 3 1 2 1 那么 答案是 21 34 7 即最多分在2段,第一段是1~3 ...
- Codeforces Round #595 (Div. 3)D1D2 贪心 STL
一道用STL的贪心,正好可以用来学习使用STL库 题目大意:给出n条可以内含,相交,分离的线段,如果重叠条数超过k次则为坏点,n,k<2e5 所以我们贪心的想我们从左往右遍历,如果重合部分条数超 ...
- Codeforces 620C EDU C.Pearls in a Row ( set + greed )
C. Pearls in a Row There are n pearls in a row. Let's enumerate them with integers from 1 to n from ...
- 【32.26%】【codeforces 620C】Pearls in a Row
time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...
- Educational Codeforces Round 6 C. Pearls in a Row
Educational Codeforces Round 6 C. Pearls in a Row 题意:一个3e5范围的序列:要你分成最多数量的子序列,其中子序列必须是只有两个数相同, 其余的数只能 ...
- Educational Codeforces Round 6 C. Pearls in a Row set
C. Pearls in a Row There are n pearls in a row. Let's enumerate them with integers from 1 to n from ...
- CF620C Pearls in a Row
CF620C Pearls in a Row 洛谷评测传送门 题目描述 There are nn pearls in a row. Let's enumerate them with integers ...
随机推荐
- Java并发编程原理与实战二:并行&并发&多线程的理解
1.CPU的发展趋势: 核心数目依旧会越来越多,根据摩尔定律,由于单个核心性能提升有着严重的瓶颈问题,普通的PC桌面在2018年可能回到24核心. 2.并发和并行的区别: 所有的并发处理都有排队等候, ...
- Session详解、ASP.NET核心知识(8)
介绍一下Session 1.作用 Cookie是存在客户端,Session是存在服务器端,目的是一样的:保存和当前客户端相关的数据(当前网站的任何一个页面都能取到Session). 在本篇博文的姊妹篇 ...
- solr后台界面介绍——(十一)
1.加一个collection的方法 复制solr-home下的collection1,修改名字为collection2.并且修改collection2文件夹中配置文件core.properties中 ...
- rollup&&cube
group by 擴展 rollup&&cube --按job分組計算不同job的匯總工資 SELECT job, SUM (sal) FROM emp GROUP BY ...
- python实现单单链表
# -*- coding: utf-8 -*- # @Time : 2018/9/28 22:09 # @Author : cxa # @File : node.py # @Software: PyC ...
- 列表选择Spinner
1.只用XML配置来显示列表 在res\values中添加一个arrays.xml 1 <?xml version="1.0" encoding="utf-8&qu ...
- 转载: Android开源库V - Layout:淘宝、天猫都在用的UI框架,赶紧用起来吧!
阿里的UI库... 分析的很精辟... http://blog.csdn.net/carson_ho/article/details/71077193
- centos7 yum搭建lamp环境
=============================================== 2018/1/14_第1次修改 ccb_warlock == ...
- Web Api - HttpMessageHandler 学习
参考: 1.http://www.cnblogs.com/chenboyi081/p/4995252.html 2.http://www.cnblogs.com/r01cn/archive/2012/ ...
- 洛谷P2016战略游戏
传送门啦 战略游戏这个题和保安站岗很像,这个题更简单,这个题求的是士兵人数,而保安站岗需要求最优价值. 定义状态$ f[u][0/1] $ 表示 $ u $ 这个节点不放/放士兵 根据题意,如果当前节 ...