题目链接:https://codeforces.com/problemset/problem/620/C

题目分析

题意:给你一串珍珠,每个珍珠都有一个对应值,需要分割这n个珍珠(必须连续),使得每一串珍珠中含有对应值相同的两个珍珠,并让这个样的珍珠串数目达到最多。

首先看到这个题目的时候想用数组保存各个数出现的位置的,但是由于题目的要求,数组太大,故改用map来保存各个数出现的位置。

具体实现,用 s 代表当前珍珠串的起点, e 代表当前搜索的位置, 开始时 s == e ,实现用map通过第e个珍珠的对应值,来访问为这个珍珠的位置 e 。 如果当前位置的珍珠 e 满足

map[e] != 0 ,说明在区间[s,e-1] 含有和珍珠 e 相同的珍珠,也就是说 [ s,e] 是可以分割的最小珍珠串,分割了当前串后,将 s = e +1 ,e = s ,分割位置后移,准备分割下一串珍珠。

最后,由于题目要求n个珍珠必须分割完毕,所以最后一个珍珠串需要包含到最后一个珍珠(前提是至少有一个满足条件的珍珠串)

代码区

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include <set>
#include <map>
typedef long long ll;
using namespace std;
const int Max = 1e9;
const int Max2 = 3e5 + ;
const int inf = 0x3f3f3f3f; int v[Max2];
map<int, int>m; //前一个数为数值,后一个为位置
pair<int, int>p[Max2]; int main()
{
int n;
while (scanf("%d", &n) != EOF)
{
int sum = ;
for (int i = ; i <= n; i++)
{
scanf("%d", v + i);
}
int s = , e = ;
m.clear();
while (e <= n)
{
if (m[v[e]]) //出现过
{
p[++sum] = { s,e };
s = e + ;
e = s;
m.clear();
}
else
{
m[v[e]] = e;
e++;
}
}
p[sum].second = n; //wa了一次,发现所以的珍珠都需要被使用
if (sum == )
{
printf("-1\n");
continue;
}
printf("%d\n", sum);
for (int i = ; i <= sum; i++)
{
printf("%d %d\n", p[i].first, p[i].second);
} }
return ;
}

codeforces 620C的更多相关文章

  1. Pearls in a Row CodeForces 620C 水题

    题目:http://codeforces.com/problemset/problem/620/C 文章末有一些测试数据仅供参考 题目大意 给你一个数字串,然后将分成几个部分,要求每个部分中必须有一对 ...

  2. CodeForces 620C Pearls in a Row

    水题,每当出现重复就分割开来,最后留下的尾巴给最后一段 #include<cstdio> #include<cstring> #include<cmath> #in ...

  3. CodeForces - 620C Pearls in a Row 贪心 STL

    C. Pearls in a Row time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

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

  5. 【32.26%】【codeforces 620C】Pearls in a Row

    time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...

  6. python爬虫学习(5) —— 扒一下codeforces题面

    上一次我们拿学校的URP做了个小小的demo.... 其实我们还可以把每个学生的证件照爬下来做成一个证件照校花校草评比 另外也可以写一个物理实验自动选课... 但是出于多种原因,,还是绕开这些敏感话题 ...

  7. 【Codeforces 738D】Sea Battle(贪心)

    http://codeforces.com/contest/738/problem/D Galya is playing one-dimensional Sea Battle on a 1 × n g ...

  8. 【Codeforces 738C】Road to Cinema

    http://codeforces.com/contest/738/problem/C Vasya is currently at a car rental service, and he wants ...

  9. 【Codeforces 738A】Interview with Oleg

    http://codeforces.com/contest/738/problem/A Polycarp has interviewed Oleg and has written the interv ...

随机推荐

  1. 消费端ACK和重回队列

    使用场景 消费端ACK和重回队列 消费端ACK使用场景: 1.消费端进行消费的时候,如果由于业务异常我们可以进行日志记录,然后进行补偿. 2.由于服务器宕机等严重问题,那我们就需要手工进行ACK保障消 ...

  2. JavaWeb_(SSH论坛)_一、项目入门

    基于SSH框架的小型论坛项目 一.项目入门 传送门 二.框架整合 传送门 三.用户模块 传送门 四.页面显示 传送门 五.帖子模块 传送门 六.点赞模块 传送门 七.辅助模块 传送门 项目已上传至gi ...

  3. Leetcode题目20.有效的括号(简单)

    题目描述: 给定一个只包括 '(',')','{','}','[',']' 的字符串,判断字符串是否有效. 有效字符串需满足: 左括号必须用相同类型的右括号闭合.左括号必须以正确的顺序闭合.注意空字符 ...

  4. Git客户端TortoiseGit下载、安装及汉化

    本篇经验将和大家介绍Git客户端TortoiseGit下载.安装及汉化的方法,希望对大家的工作和学习有所帮助! TortoiseGit下载和安装   1 TortoiseGit是Windows下最好用 ...

  5. Python中异常和JSON读写数据

    异常可以防止出现一些不友好的信息返回给用户,有助于提升程序的可用性,在java中通过try ... catch ... finally来处理异常,在Python中通过try ... except .. ...

  6. LC 861. Score After Flipping Matrix

    We have a two dimensional matrix A where each value is 0 or 1. A move consists of choosing any row o ...

  7. Dom4j工具j解析XML原理和示例代码

    import java.io.File; import java.util.ArrayList; import java.util.Iterator; import java.util.List; i ...

  8. [Python]在python中调用shell脚本,并传入参数-02python操作shell实例

    首先创建2个shell脚本文件,测试用. test_shell_no_para.sh 运行时,不需要传递参数 test_shell_2_para.sh 运行时,需要传递2个参数  test_shell ...

  9. 阶段3 3.SpringMVC·_02.参数绑定及自定义类型转换_7 获取Servlet原生的API

    控制器里面获取常用的request对象或者Response对象. 想拿到谁, 就在参数上写上谁 再获取servletConetext并输出

  10. Python标准组件ConfigParser配置文件解析器,保存配置时支持大写字母的方法

    虽然自己已经改用xml作为配置文件首选格式了,但是有时候还是需要解析ini.cfg文件(为了兼容早期版本或者其他作者的软件). 基本上Python自带的ConfigParser足够应对了,但是美中不足 ...