CodeForces 352B 水题
2017-06-14 14:08
337 查看
B. Jeff and Periods
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output
One day Jeff got hold of an integer sequence a1,
a2,
..., an of length
n. The boy immediately decided to analyze the sequence. For that, he needs to find all values of
x, for which these conditions hold:
x occurs in sequence
a.
Consider all positions of numbers x in the sequence
a (such i, that
ai = x). These numbers, sorted in the increasing order, must form an arithmetic progression.
Help Jeff, find all x that meet the problem conditions.
Input
The first line contains integer n
(1 ≤ n ≤ 105). The next line contains integers
a1,
a2, ...,
an
(1 ≤ ai ≤ 105). The numbers are separated by spaces.
Output
In the first line print integer t — the number of valid
x. On each of the next
t lines print two integers x and
px, where
x is current suitable value,
px is the common difference between numbers in the progression (if
x occurs exactly once in the sequence,
px must equal 0). Print the pairs in the order of increasing
x.
Examples
Input
Output
Input
Output
Note
In the first test 2 occurs exactly once in the sequence, ergo
p2 = 0.
题意,查找一串序列中,出现位置为等差数列的数
代码://By Sean Chen
#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
#include <map>
#include <vector>
#include <algorithm>
using namespace std;
struct node{
int num,p;
};
map <int,int> P;
map <int,int> prepos;
map <int,int> flag;
vector <int> num;
node ans[100005];
int b;
int cmp(node a,node b)
{
return a.num<b.num;
}
int main()
{
int n;
scanf("%d",&n);
for (int i=1;i<=n;i++)
{
scanf("%d",&b);
if (!prepos[b])
{
num.push_back(b);
flag[b]=1;
}
else if (P[b]!=0 && i-prepos[b]!=P[b])
{
flag[b]=0;
}
else if (P[b]==0)
{
P[b]=i-prepos[b];
}
prepos[b]=i;
}
node temp;
int cnt=0;
for (int i=0;i<=num.size();i++)
{
if (flag[num[i]]==1)
{
temp.num=num[i];
temp.p=P[num[i]];
ans[cnt++]=temp;
}
}
sort(ans,ans+cnt,cmp);
printf("%d\n",cnt);
for (int i=0;i<cnt;i++)
{
printf("%d %d\n",ans[i].num,ans[i].p);
}
return 0;
}
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output
One day Jeff got hold of an integer sequence a1,
a2,
..., an of length
n. The boy immediately decided to analyze the sequence. For that, he needs to find all values of
x, for which these conditions hold:
x occurs in sequence
a.
Consider all positions of numbers x in the sequence
a (such i, that
ai = x). These numbers, sorted in the increasing order, must form an arithmetic progression.
Help Jeff, find all x that meet the problem conditions.
Input
The first line contains integer n
(1 ≤ n ≤ 105). The next line contains integers
a1,
a2, ...,
an
(1 ≤ ai ≤ 105). The numbers are separated by spaces.
Output
In the first line print integer t — the number of valid
x. On each of the next
t lines print two integers x and
px, where
x is current suitable value,
px is the common difference between numbers in the progression (if
x occurs exactly once in the sequence,
px must equal 0). Print the pairs in the order of increasing
x.
Examples
Input
1 2
Output
1 2 0
Input
8 1 2 1 3 1 2 1 5
Output
4 1 2 2 4 3 0 5 0
Note
In the first test 2 occurs exactly once in the sequence, ergo
p2 = 0.
题意,查找一串序列中,出现位置为等差数列的数
代码://By Sean Chen
#include <iostream>
#include <cstdio>
#include <cstring>
#include <queue>
#include <map>
#include <vector>
#include <algorithm>
using namespace std;
struct node{
int num,p;
};
map <int,int> P;
map <int,int> prepos;
map <int,int> flag;
vector <int> num;
node ans[100005];
int b;
int cmp(node a,node b)
{
return a.num<b.num;
}
int main()
{
int n;
scanf("%d",&n);
for (int i=1;i<=n;i++)
{
scanf("%d",&b);
if (!prepos[b])
{
num.push_back(b);
flag[b]=1;
}
else if (P[b]!=0 && i-prepos[b]!=P[b])
{
flag[b]=0;
}
else if (P[b]==0)
{
P[b]=i-prepos[b];
}
prepos[b]=i;
}
node temp;
int cnt=0;
for (int i=0;i<=num.size();i++)
{
if (flag[num[i]]==1)
{
temp.num=num[i];
temp.p=P[num[i]];
ans[cnt++]=temp;
}
}
sort(ans,ans+cnt,cmp);
printf("%d\n",cnt);
for (int i=0;i<cnt;i++)
{
printf("%d %d\n",ans[i].num,ans[i].p);
}
return 0;
}
相关文章推荐
- Codeforces 417B Crash(水题)
- CodeForces 405A Gravity Flip【水题】
- codeforces水题100道 第十四题 Codeforces Round #321 (Div. 2) A. Kefa and First Steps (brute force)
- codeforces水题100道 第二十六题 Codeforces Beta Round #95 (Div. 2) A. cAPS lOCK (strings)
- Codeforces 443A Anton and Letters(水题)
- Literature Lesson - CodeForces 139C 水题
- Codeforces 632B Alice, Bob, Two Teams 【水题】
- CodeForces 444C. DZY Loves Physics(枚举+水题)
- CodeForces 289A Polo the Penguin and Segments (水题)
- Codeforces 631A Interview【模拟水题】
- codeforces 746 C. Tram【水题】
- Codeforces 365(Div.2)A.Mishka and Game【水题】
- codeforces 158A Next Round (水题)
- CodeForces 705A Hulk (水题)
- CodeForces 589I Lottery (暴力,水题)
- Codeforces 465B Inbox (100500)(水题)
- codeforces 659C C. Tanya and Toys(水题+map)
- Codeforces 764A Taymyr is calling you(水题翻译)
- Codeforces 825D Suitable Replacement【贪心】水题
- Codeforces 677 B.Coat of Anticubism【水题】