CF 19C 思维题STL应用
2015-01-07 22:40
344 查看
http://codeforces.com/problemset/problem/19/C
Once Bob saw a string. It contained so many different letters, that the letters were marked by numbers, but at the same time each letter could be met in the string at most 10 times. Bob didn't like that string, because it contained repeats: a repeat of length x is
such a substring of length 2x, that its first half coincides character by character with its second half. Bob started deleting all the repeats from the
string. He does it as follows: while it's possible, Bob takes the shortest repeat, if it is not unique, he takes the leftmost one, and deletes its left half and everything that is to the left of this repeat.
You're given the string seen by Bob. Find out, what it will look like after Bob deletes all the repeats in the way described above.
Input
The first input line contains integer n (1 ≤ n ≤ 105)
— length of the string. The following line contains n space-separated integer numbers from 0 to 109 inclusive
— numbers that stand for the letters of the string. It's guaranteed that each letter can be met in the string at most 10 times.
Output
In the first line output the length of the string's part, left after Bob's deletions. In the second line output all the letters (separated by a space) of the string, left after Bob deleted all the repeats in the described way.
Sample test(s)
input
output
input
output
Once Bob saw a string. It contained so many different letters, that the letters were marked by numbers, but at the same time each letter could be met in the string at most 10 times. Bob didn't like that string, because it contained repeats: a repeat of length x is
such a substring of length 2x, that its first half coincides character by character with its second half. Bob started deleting all the repeats from the
string. He does it as follows: while it's possible, Bob takes the shortest repeat, if it is not unique, he takes the leftmost one, and deletes its left half and everything that is to the left of this repeat.
You're given the string seen by Bob. Find out, what it will look like after Bob deletes all the repeats in the way described above.
Input
The first input line contains integer n (1 ≤ n ≤ 105)
— length of the string. The following line contains n space-separated integer numbers from 0 to 109 inclusive
— numbers that stand for the letters of the string. It's guaranteed that each letter can be met in the string at most 10 times.
Output
In the first line output the length of the string's part, left after Bob's deletions. In the second line output all the letters (separated by a space) of the string, left after Bob deleted all the repeats in the described way.
Sample test(s)
input
6 1 2 3 1 2 3
output
3 1 2 3
input
7 4 5 6 5 6 7 7
output
1 7
/** CF19C STL 题目大意:给定一个数组有重复,让求出删除重复后的数组。所谓重复即为;123123,而123124不算重复。必须是2n长度1-n和n+1~n*2完全对应相等 现在寻找最右边的一个重复的,将其1~n部分和其前面所有的数全部删掉。 解题思路:利用list存储所有相同数字依次出现的位置,从前往后匹配,并一边删除,比vector时间复杂度低 */ #include <stdio.h> #include <iostream> #include <map> #include <list> using namespace std; map<int,list<int> > t; list<int>::iterator it; int a[200000]; int main() { int n; while(~scanf("%d",&n)) { for (int i=0; i<n; i++) { scanf("%d",&a[i]); t[a[i]].push_back(i); } a =-1; int ans; for (int i=0; i<n; i++) { list<int> e=t[a[i]]; t[a[i]].pop_front(); for (it=e.begin(); it!=e.end(); it++) { int x=i+1; int y=(*it)+1; while (x<(*it)&&a[x]==a[y]) { x++; y++; } if (x==(*it)) { i=(*it)-1; ans=(*it); } } } printf("%d\n",n-ans); for (int i=ans; i<n; i++) printf(i==n-1?"%d\n":"%d ",a[i]); } return 0; }
相关文章推荐
- hdu4400 STL应用 查找思维题
- Codeforces 757C Felicity is Coming!【思维+vector应用】STL好神奇啊!
- WCF for .NET CF的一个应用及两个困惑的问题
- 在PPC上面用.NET CF开发应用需要注意些什么——(一)CPU、OS以及CLR差别简述
- c++高级应用(模板)(STL)(模板嵌套)
- 思维导图在企业培训中的应用
- hdu1022 Train Problem I(STL 栈的应用)
- STL在ACM中的典型应用
- 图算法中STL的应用
- 在PPC上面用.NET CF开发应用需要注意些什么——(一)CPU、OS以及CLR差别简述
- VC如何应用STL
- CFTREE数据库应用实例
- stl应用小问题
- STL的简单应用
- .net CF应用中隐藏OK按钮
- .Net CF 开发菜鸟笔记(PDA应用开发)
- 练手之用STL类型区分应用
- 思维导图的一个应用实例
- WCF for .NET CF的一个应用及两个困惑的问题
- Adapter模式在STL中的应用