题目

给定 N 张卡⽚,正⾯分别写上 1、2、……、N,然后全部翻⾯,洗牌,在背⾯分别写上 1、2、……、 N。将每张牌的正反两⾯数字相减(⼤减⼩),得到 N 个⾮负差值,其中是否存在相等的差?

输⼊格式:

输⼊第⼀⾏给出⼀个正整数 N(2 <= N <= 10000),随后⼀⾏给出 1 到 N 的⼀个洗牌后的排列,第 i 个数表示正⾯写了 i 的那张卡⽚背⾯的数字。

输出格式:

按照“差值 重复次数”的格式从⼤到⼩输出重复的差值及其重复的次数,每⾏输出⼀个结果。

输⼊样例:

8

3 5 8 6 2 1 4 7

输出样例:

5 2

3 3

2 2

解题思路

  1. 第二行输入,下标从1开始到N结束--卡片正面数字,对应位置数字--卡片背面数字(题目:第i个数表示正⾯写了i的那张卡⽚背⾯的数字)
  2. 输入时,统计差值出现次数,输入完成统计完成

map

  • 定义map,key为差值绝对值,value为差值出现次数
  • 逆序输出map的key value(map默认key升序),若value<=1跳过(题目已知:重复差值,1次不算重复)

数组

  • 定义数组dfs

    • 大小设置为10000(题目已知:1<=N<=10000),最大差值为10000-1;
    • 下标为差值(0下标废弃不使用);
    • 元素值记录下标对应差值出现的次数;
  • 逆序输出数组,(元素值<=1跳过,因为其不算重复差值)

易错点

  1. 第二行输入下标从1开始计数(下标>=1&&下标<=N)
  2. 1次不算重复

知识点

map逆序输出

for(map<int,int>::reverse_iterator it=m.rbegin(); it!=m.rend(); it++) {}

Code

Code 01(map)

#include <iostream>
#include <map>
#include <cmath>
using namespace std;
int main(int argc, char * argv[]) {
int N,g;
scanf("%d",&N);
map<int,int> m;
for(int i=1; i<=N; i++) {
scanf("%d",&g);
m[abs(g-i)]++;
}
for(map<int,int>::reverse_iterator it=m.rbegin(); it!=m.rend(); it++) {
if(it->second>1)printf("%d %d\n",it->first,it->second);
}
return 0;
}

Code 02(数组)

#include <iostream>
#include <cmath>
using namespace std;
int main(int argc, char * argv[]) {
int N,g;
scanf("%d",&N);
int dfs[10000]={0};
for(int i=1; i<=N; i++) {
scanf("%d",&g);
dfs[abs(g-i)]++;
}
for(int i=10000-1;i>=0;i--){
if(dfs[i]>1)printf("%d %d\n",i,dfs[i]);
}
return 0;
}

PAT Basic 1083 是否存在相等的差 (20) [hash映射,map STL]的更多相关文章

  1. PAT Basic 1083 是否存在相等的差 (20 分)

    给定 N 张卡片,正面分别写上 1.2.…….N,然后全部翻面,洗牌,在背面分别写上 1.2.…….N.将每张牌的正反两面数字相减(大减小),得到 N 个非负差值,其中是否存在相等的差? 输入格式: ...

  2. PAT乙级:1083 是否存在相等的差 (20分)

    PAT乙级:1083 是否存在相等的差 (20分) 题干 给定 N 张卡片,正面分别写上 1.2.--.N,然后全部翻面,洗牌,在背面分别写上 1.2.--.N.将每张牌的正反两面数字相减(大减小), ...

  3. PAT(B) 1083 是否存在相等的差(Java)统计

    题目链接:1083 是否存在相等的差 (20 point(s)) 题目描述 给定 N 张卡片,正面分别写上 1.2.--.N,然后全部翻面,洗牌,在背面分别写上 1.2.--.N.将每张牌的正反两面数 ...

  4. PAT 乙级 1083 是否存在相等的差(20 分)

    1083 是否存在相等的差(20 分) 给定 N 张卡片,正面分别写上 1.2.…….N,然后全部翻面,洗牌,在背面分别写上 1.2.…….N.将每张牌的正反两面数字相减(大减小),得到 N 个非负差 ...

  5. PAT Basic 1083

    1083 是否存在相等的差 给定 N 张卡片,正面分别写上 1.2.…….N,然后全部翻面,洗牌,在背面分别写上 1.2.…….N.将每张牌的正反两面数字相减(大减小),得到 N 个非负差值,其中是否 ...

  6. 【PAT】1083 是否存在相等的差(20 分)

    //这题不是我耍流氓,实在太简单,只能直接贴代码了,凑个数 #include<stdio.h> int aaa[10005]={0}; int main(){ int N;scanf(&q ...

  7. 1083 是否存在相等的差 (20 分)C语言

    给定 N 张卡片,正面分别写上 1.2.--.N,然后全部翻面,洗牌,在背面分别写上 1.2.--.N.将每张牌的正反两面数字相减(大减小),得到 N 个非负差值,其中是否存在相等的差? 输入格式: ...

  8. PAT (Basic Level) Practice 1027 打印沙漏 分数 20

    本题要求你写个程序把给定的符号打印成沙漏的形状.例如给定17个"*",要求按下列格式打印 ***** *** * *** *****   所谓"沙漏形状",是指 ...

  9. PAT (Basic Level) Practice 1019 数字黑洞 分数 20

    给定任一个各位数字不完全相同的 4 位正整数,如果我们先把 4 个数字按非递增排序,再按非递减排序,然后用第 1 个数字减第 2 个数字,将得到一个新的数字.一直重复这样做,我们很快会停在有" ...

随机推荐

  1. C++ 99表

    #include<iostream> using namespace std; class Sumes { public: int sum; int i, j; }; int main() ...

  2. [NOIP2017] T4 跳房子 DP+二分

    Description 跳房子,也叫跳飞机,是一种世界性的儿童游戏,也是中国民间传统的体育游戏之一.跳房子的游戏规则如下:  在地面上确定一个起点,然后在起点右侧画 n 个格子,这些格子都在同一条直线 ...

  3. Python MySQL Order By

    章节 Python MySQL 入门 Python MySQL 创建数据库 Python MySQL 创建表 Python MySQL 插入表 Python MySQL Select Python M ...

  4. 创建一个简单的Spring应用

    环境已经安装完成,接下来创建一个简单的Spring应用. 创建Spring应用步骤: 创建一个maven项目 添加spring库依赖 创建Bean类 添加Bean的xml装配文件 创建主类 运行应用程 ...

  5. 第二十一篇 关联管理器(RelatedManager)

    关联管理器(RelatedManager) lass RelatedManager "关联管理器"是在一对多或者多对多的关联上下文中使用的管理器.它存在于下面两种情况: Forei ...

  6. UVA - 12113 Overlapping Squares(重叠的正方形)

    题意:给定一个4*4的棋盘和棋盘上所呈现出来的纸张边缘,问用不超过6张2*2的纸能否摆出指定的形状. 分析:2*2的纸在4*4的棋盘上总共有9种放置位置,枚举所有的放置位置即可.枚举情况总共种. #p ...

  7. java web实现在线编辑word,并将word导出(一)

    前段时间领导交代了一个需求:客户需要一个能够web在线编辑文字,如同编辑word文档一样,同时能够将编辑完成的内容导出为word文档并下载到本地. 我们选择了前台使用富文本插件的形式用于编辑内容,使用 ...

  8. 201771010123汪慧和《面向对象程序设计Java》第十五周实验总结

    一.理论部分 1.JAR文件 (1)Java程序的打包:程序编译完成后,程序员将.class文件压缩打包为.jar文件后,GUI界面 程序就可以直接双击图标运行. (2).jar文件(Java归档)既 ...

  9. SQLite数据库以及增删改查的案例

    Android使用开源的与操作系统无关的SQL数据库——SQLite 一:在命令行下创建数据库: 1.启动模拟器后,打开命令行,执行adb shell 2.进入所在工程目录 3.执行sqlite3 m ...

  10. Spring中@Value("${}"))取不到值的几种情况

    https://blog.csdn.net/dh12313012/article/details/84661169 1. spring组件重写构造方法,在构造方法中引用@Value为null 由于sp ...