PAT Basic 1083 是否存在相等的差 (20) [hash映射,map STL]
题目
给定 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开始到N结束--卡片正面数字,对应位置数字--卡片背面数字(题目:第i个数表示正⾯写了i的那张卡⽚背⾯的数字)
- 输入时,统计差值出现次数,输入完成统计完成
map
- 定义map,key为差值绝对值,value为差值出现次数
- 逆序输出map的key value(map默认key升序),若value<=1跳过(题目已知:重复差值,1次不算重复)
数组
- 定义数组dfs
- 大小设置为10000(题目已知:1<=N<=10000),最大差值为10000-1;
- 下标为差值(0下标废弃不使用);
- 元素值记录下标对应差值出现的次数;
- 逆序输出数组,(元素值<=1跳过,因为其不算重复差值)
易错点
- 第二行输入下标从1开始计数(下标>=1&&下标<=N)
- 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]的更多相关文章
- PAT Basic 1083 是否存在相等的差 (20 分)
给定 N 张卡片,正面分别写上 1.2.…….N,然后全部翻面,洗牌,在背面分别写上 1.2.…….N.将每张牌的正反两面数字相减(大减小),得到 N 个非负差值,其中是否存在相等的差? 输入格式: ...
- PAT乙级:1083 是否存在相等的差 (20分)
PAT乙级:1083 是否存在相等的差 (20分) 题干 给定 N 张卡片,正面分别写上 1.2.--.N,然后全部翻面,洗牌,在背面分别写上 1.2.--.N.将每张牌的正反两面数字相减(大减小), ...
- PAT(B) 1083 是否存在相等的差(Java)统计
题目链接:1083 是否存在相等的差 (20 point(s)) 题目描述 给定 N 张卡片,正面分别写上 1.2.--.N,然后全部翻面,洗牌,在背面分别写上 1.2.--.N.将每张牌的正反两面数 ...
- PAT 乙级 1083 是否存在相等的差(20 分)
1083 是否存在相等的差(20 分) 给定 N 张卡片,正面分别写上 1.2.…….N,然后全部翻面,洗牌,在背面分别写上 1.2.…….N.将每张牌的正反两面数字相减(大减小),得到 N 个非负差 ...
- PAT Basic 1083
1083 是否存在相等的差 给定 N 张卡片,正面分别写上 1.2.…….N,然后全部翻面,洗牌,在背面分别写上 1.2.…….N.将每张牌的正反两面数字相减(大减小),得到 N 个非负差值,其中是否 ...
- 【PAT】1083 是否存在相等的差(20 分)
//这题不是我耍流氓,实在太简单,只能直接贴代码了,凑个数 #include<stdio.h> int aaa[10005]={0}; int main(){ int N;scanf(&q ...
- 1083 是否存在相等的差 (20 分)C语言
给定 N 张卡片,正面分别写上 1.2.--.N,然后全部翻面,洗牌,在背面分别写上 1.2.--.N.将每张牌的正反两面数字相减(大减小),得到 N 个非负差值,其中是否存在相等的差? 输入格式: ...
- PAT (Basic Level) Practice 1027 打印沙漏 分数 20
本题要求你写个程序把给定的符号打印成沙漏的形状.例如给定17个"*",要求按下列格式打印 ***** *** * *** ***** 所谓"沙漏形状",是指 ...
- PAT (Basic Level) Practice 1019 数字黑洞 分数 20
给定任一个各位数字不完全相同的 4 位正整数,如果我们先把 4 个数字按非递增排序,再按非递减排序,然后用第 1 个数字减第 2 个数字,将得到一个新的数字.一直重复这样做,我们很快会停在有" ...
随机推荐
- Swift 访问权限
internal 内部的 1.默认情况下所有的类&属性&方法的访问权限都是internal 2.在本模块(项目/包/target)中可以访问 private 私有的 1.只有在本类中访 ...
- 吴裕雄--天生自然C++语言学习笔记:C++ 循环
有的时候,可能需要多次执行同一块代码.一般情况下,语句是顺序执行的:函数中的第一个语句先执行,接着是第二个语句,依此类推. 编程语言提供了允许更为复杂的执行路径的多种控制结构. 循环语句允许我们多次执 ...
- Docker PHP 例子
版权所有,未经许可,禁止转载 章节 Docker 介绍 Docker 和虚拟机的区别 Docker 安装 Docker Hub Docker 镜像(image) Docker 容器(container ...
- 使用BurpSuite和Hydra爆破相关的服务(9.25 第十一天)
使用BP和Hydra爆破相关的服务 Hydra:九头蛇,开源的功能强大的爆破工具,支持的服务有很多,使用Hydra爆破C/S架构的服务. 使用BurpSuite爆破web服务 DVWA:web应用程序 ...
- 新部署到服务器 报 The requested URL /home/profession was not found on this server. 错误
The requested URL /home/profession was not found on this server. 通过xxx.com, 首页可以正常访问,xxx.com/xx/xx 就 ...
- 【Java Spring 进阶之路 】1.Spring 是什么?
- App_显示图表内容
今天在之前记账本的基础上增加了图标的显示功能,在本次课程中它以折线图为例讲述.但是课程中给出了多有图的代码案例. https://github.com/lecho/hellocharts-androi ...
- js中数字的4种遍历方式
<!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <title> ...
- 对于AVL树和红黑树的理解
AVL又称(严格)高度平衡的二叉搜索树,也叫二叉查找树.平衡二叉树.window对进程地址空间的管理用到了AVL树. 红黑树是非严格平衡二叉树,统计性能要好于平衡二叉树.广泛的在C++的STL中,ma ...
- swift之水纹动画
import UIKit class CVLayerView: UIView { var pulseLayer : CAShapeLayer! //定义图层 override init(frame: ...