PAT乙级:1083 是否存在相等的差 (20分)
2024-09-04 20:46:09
PAT乙级:1083 是否存在相等的差 (20分)
题干
给定 N 张卡片,正面分别写上 1、2、……、N,然后全部翻面,洗牌,在背面分别写上 1、2、……、N。将每张牌的正反两面数字相减(大减小),得到 N 个非负差值,其中是否存在相等的差?
输入格式:
输入第一行给出一个正整数 N(2 ≤ N ≤ 10 000),随后一行给出 1 到 N 的一个洗牌后的排列,第 i 个数表示正面写了 i 的那张卡片背面的数字。
输出格式:
按照“差值 重复次数”的格式从大到小输出重复的差值及其重复的次数,每行输出一个结果。
输入样例:
8
3 5 8 6 2 1 4 7
输出样例:
5 2
3 3
2 2
思路
hash表,记录一下,按降序输出即可。可以用map实现因为自动有序
code
#include<iostream>
#include<vector>
#include<algorithm>
#include<map>
using namespace std;
int main(){
int n=0;
cin>>n;
vector<int> nums(n);
for(int i=0;i<n;i++) cin>>nums[i];
map<int,int> dic;
for(int i=0;i<n;i++){
dic[abs(nums[i]-i-1)]++;
}
for(auto it=dic.rbegin();it!=dic.rend();++it){
pair<int,int> temp=*it;
if(temp.second>=2) cout<<temp.first<<" "<<temp.second<<endl;
}
return 0;
}
结果
提交时间 | 状态 | 分数 | 题目 | 编译器 | 耗时 | 用户 |
---|---|---|---|---|---|---|
2020/4/1 10:29:10 | 答案正确 | 20 | 1083 | C++ (g++) | 17 ms | a man |
测试点 | 结果 | 耗时 | 内存 |
---|---|---|---|
0 | 答案正确 | 5 ms | 384 KB |
1 | 答案正确 | 4 ms | 508 KB |
2 | 答案正确 | 3 ms | 384 KB |
3 | 答案正确 | 17 ms | 808 KB |
最新文章
- android输入限制
- ZTE and TP-Link RomPager - DoS Exploit
- Git 源代码管理工具
- angularjs ng-option ie issue解决方案
- float 和 inline-block的心得
- 关于Elasticsearch单个索引文档最大数量问题
- App lifecycle(UWP深入学习一)
- CentOS 快速安装pip
- 更新Code First生成的数据库
- Spring execution 表达式
- 博客志第一天——判断一个整数N是否是完全平方数?
- [PHP] sys_get_temp_dir()和tempnam()函数报错与环境变量的配置问题
- 初识 Nginx
- 任务调度框架FluentScheduler简介
- STM32 PWM输出(映射)
- godaddy之ssl申请
- vmware因为软件出过一次复制的错误导致不能复制到主机的解决方法
- 使用Spring配置shiro时,自定义Realm中属性无法使用注解注入解决办法
- numpy.ravel()/numpy.flatten()/numpy.squeeze()
- Java连接MySQL数据库,并进行增删改查