题目

给定 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. hdu 1075 What Are You Talking About 火星文翻译成英文

    What Are You Talking About Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 102400/204800 K ...

  2. python刷LeetCode:28. 实现 strStr()

    难度等级:简单 题目描述: 实现 strStr() 函数. 给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 ( ...

  3. linux shell的创建与启动

    1.创建shell脚本,输入linux命令: touch my.sh 2.编辑shell脚本,输入linux命令: vi my.sh 3.在shell脚本进行编辑:顺便记一次Jenkins的自动启动的 ...

  4. Java算法练习——回文数

    题目链接 题目描述 判断一个整数是否是回文数.回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数. 示例 1 输入: 121 输出: true 示例 2 输入: -121 输出: false ...

  5. df 、dh

    查看磁盘 不挂载获取文件系统 [root@localhost ~]# file -s /dev/sda1/dev/sda1: SGI XFS filesystem data (blksz 4096, ...

  6. 开源Git代码托管平台

    开源Git代码托管平台主要参考有以下4个: 1.GitHub 很多开源项目都来自GitHub,但是GitHub只能新建公开的Git仓库,私有 仓库要收费.GitHub地址:https://github ...

  7. 64.Python中ORM查询条件:in和关联模型

    定义模型的models.py文件中示例代码如下: from django.db import models class Category(models.Model): name = models.Ch ...

  8. Pycharm2020最新激活码|永久激活(附最新激活码和插件)

    最近很多人的Pycharm激活时间又过期了,后台很多人索要激活码,我就再把激活的方法汇和工具再梳理一次给大家. 最主要有两种激活方式(两种方式需要的激活码不同): 一.激活码激活: 一般一年多需要激活 ...

  9. 201809-1 卖菜 Java

    思路: 需要两个数组,一个保存原始数据 import java.util.Scanner; public class Main { public static void main(String[] a ...

  10. [ACTF2020 新生赛]Include

    0x00 知识点 本地文件包含 ?file=php://filter/read/convert.base64-encode/resource=index.php ?file=php://filter/ ...