1043: Radical loves integer sequences

Time Limit: 1 Sec  Memory Limit: 128 MB
Submit: 36  Solved: 4
[Submit][Status][Web
Board
]

Description

One day Radical got hold of an integer sequence a1, a2, ..., an of length n. He 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 Radical, 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.

Sample Input

1
3
4
9 9 3 5

Sample Output

1
3 0
3
3 0
5 0
9 1

这题前几次看真心没看懂,今天下午看了一下,发现是判断同一个数字出现的下标是否是等差数列,是则输出公差,否则则不输出。

没什么算法,就是记录时判断麻烦点..

代码:

#include<iostream>
#include<algorithm>
#include<cstdlib>
#include<sstream>
#include<cstring>
#include<cstdio>
#include<string>
#include<deque>
#include<cmath>
#include<queue>
#include<set>
#include<map>
bool ok[100009];
int mop[100009];
int step[100009];
int pos[100009];
using namespace std;
int main (void)
{
int t,i,j,n,tstep,cnt;
while (~scanf("%d",&n))
{
memset(ok,0,sizeof(ok));//判断改数是否存在等差数列
memset(mop,0,sizeof(mop));//记录该数的出现次数
memset(step,0,sizeof(step));//记录该数的公差
memset(pos,0,sizeof(pos));//记录该数的每(前)一次出现的下标pos
tstep=0;
cnt=0;
for (i=1; i<=n; i++)
{
scanf("%d",&t);
mop[t]++;
if(mop[t]>=1)//若出现过
{
if(mop[t]==1)//若此时只有一次
{
ok[t]=1;//暂时可行
cnt++;//暂时可行数+1
pos[t]=i;//此时为第一次出现的位置
step[t]=0;//此时公差为0
}
else if(mop[t]==2)//两次
{
step[t]=i-pos[t];//公差Δd
pos[t]=i;//位置更变
ok[t]=1;//暂时可行
}
else//三次以上
{
tstep=i-pos[t];//临时公差
if(tstep!=step[t])//若不等于此前的公差,则
{
if(ok[t])//若此前没有被减掉
cnt--;//减掉该数
ok[t]=0;//变为不可行
}
pos[t]=i;//位置变更
}
}
}
printf("%d\n",cnt);
for (i=1; i<=100000; i++)
{
if(ok[i])
{
if(mop[i]==1)
{
printf("%d %d\n",i,0);
}
else
{
printf("%d %d\n",i,step[i]);
}
}
}
}
return 0;
}

ACM程序设计选修课——1043: Radical loves integer sequences(YY)的更多相关文章

  1. ACM程序设计选修课——1018: Common Subsequence(DP)

    问题 L: Common Subsequence 时间限制: 1 Sec  内存限制: 32 MB 提交: 70  解决: 40 [提交][状态][讨论版] 题目描述 A subsequence of ...

  2. ACM程序设计选修课——1057: Beautiful Garden(模拟+耐心调试)

    1057: Beautiful Garden Time Limit: 5 Sec  Memory Limit: 128 MB Submit: 25  Solved: 12 [Submit][Statu ...

  3. ACM程序设计选修课——1040: Alex and Asd fight for two pieces of cake(YY+GCD)

    1040: Alex and Asd fight for two pieces of cake Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 27   ...

  4. ACM程序设计选修课——Problem E:(ds:图)公路村村通(Prim)

    问题 E: (ds:图)公路村村通 时间限制: 1 Sec  内存限制: 128 MB 提交: 9  解决: 5 题目描述 现有村落间道路的统计数据表中,列出了有可能建设成标准公路的若干条道路的成本, ...

  5. ACM程序设计选修课——Problem F:(ds:图)旅游规划(优先队列+SPFA)

    问题 F: (ds:图)旅游规划 时间限制: 1 Sec  内存限制: 128 MB 提交: 14  解决: 4 题目描述 有了一张自驾旅游路线图,你会知道城市间的高速公路长度.以及该公路要收取的过路 ...

  6. ACM程序设计选修课——Problem E:(ds:图)公路村村通(优先队列或sort+克鲁斯卡尔+并查集优化)

    畅通工程 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submi ...

  7. ACM程序设计选修课——Problem D: (ds:树)合并果子(最优二叉树赫夫曼算法)

    Problem D: (ds:树)合并果子 Time Limit: 5 Sec  Memory Limit: 64 MB Submit: 80  Solved: 4 [Submit][Status][ ...

  8. ACM程序设计选修课——1076汇编语言(重定向+模拟)

    1076: 汇编语言 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 34  Solved: 4 [Submit][Status][Web Board] ...

  9. ACM程序设计选修课——1065: Operations on Grids(暴力字符串)

    1065: Operations on Grids Time Limit: 3 Sec  Memory Limit: 128 MB Submit: 17  Solved: 4 [Submit][Sta ...

随机推荐

  1. 禁止MySQL开机自动启动的方法

    这几天发现电脑卡机变慢了,还有一些卡,发现每次开机MySQL都会自动启动(明明我安装的时候选择了不开机自启,任务管理器启动列表中也没有,但就是自启了...) 1.打开服务列表 有两种方法,一是快捷键 ...

  2. Processing一些常用技巧

    一些常用技巧总结: Tweak模式 快速查找函数用法 显示与输入中文注释 代码快速对齐 批量添加注释符 Tweak模式 Tweak模式是非常有用的功能,自3.0版本后,它就正式整合到Processin ...

  3. js 去除数组中的空值以及数组判断是否有重复数据

    1.判断是否有重复数据 function isRepeat(array){ var hash = {}; for(var i in array) { if(array[i]!="" ...

  4. Cross-Entropy Loss 与Accuracy的数值关系(很重要,很好的博客)

    http://www.cnblogs.com/dengdan890730/p/6132937.html

  5. Django 的母板及布局(Bootstrap)

    title: Django 的母板及布局(Bootstrap) tags: Django --- Django 的母板及布局(Bootstrap) Django 的母板是作为公共的部分,其他的页面都能 ...

  6. Linux连接外网

    1.给linux配置ip 进行远程管理 如果网络不同的话需要配置网卡,命令如下: vi /etc/sysconfig/network-scripts/ifcfg-enp0s3   回车 就出现网络的环 ...

  7. 01_10_SERVLET如何连接Mysql数据库

    01_10_SERVLET如何连接Mysql数据库 1. 实现类 public void doGet(HttpServletRequest request, HttpServletResponse r ...

  8. Linux下打包解压命令

    tar 压缩: tar -cvjpf etc.tar.bz2 /etc //-c为创建一个打包文件,相应的-f后面接创建的文件的名称,使用了.tar.bz2后缀,-j标志使用bzip2压缩,最后面为具 ...

  9. Qt概念和快捷键

    Qt概念和快捷键 Qt简介        1.Qt的由来和发展 Qt是一个1991年由Qt Company开发的跨平台C++图形用户界面应用程序开发框架.它既可以开发GUI程序,也可用于开发非GUI程 ...

  10. python入门:输出1-10的所有数

    #!/usr/bin/env python # -*- coding:utf-8 -*- #输出1-10的所有数 """ 变量kaishi的赋值为数字1,while 真, ...