1139 First Contact PAT (Advanced Level)
原题链接:
https://pintia.cn/problem-sets/994805342720868352/problems/994805344776077312
测试点分析:
首先来分析一下测试点,这样可以站在命题者的角度来分析问题。
| 测试点 | 分值 | 数据特点 |
| 0 | 18 | 主测试点,10<=n<70,没有刁难性的数据,数据量一般,ID从0001到3000即可通过,测试基本功能。 |
| 1 | 4 | n=7,存在+0000数据,但不存在-0000数据,ID从0000到5000。 |
| 2 | 2 | n=7,存在-0000数据,但不存在+0000数据,ID从0000到5000。 |
| 3 | 1 | n=2,涉及同性恋问题,ID范围非常大,几乎是0001到9999。 |
| 4 | 1 | n=3,涉及同性恋问题,ID范围非常大,几乎是0001到9999。 |
| 5 | 4 | 70<=n<=300,ID范围非常大,几乎是0001到9999,不存在特殊数据,但是数据量大,要求程序相当完美。 |
刁难性数据分析:
测试点1和2形成对比,虽然n=7不大,ID范围也不大,但是存在0000的数据,意味着如果输出时没有调整成%04d的格式则无法通过。
如果默认所有的0都是+0000,则测试点2不能通过,这就要求程序考虑到+0000和-0000的区别,虽然对整数来说是一样的。
如果+0000和-0000没有区分出来,则测试点1和测试点2至少有1个不能通过,又n均为7,其余数据估计几乎相同(除了+和-),所以很难不判断+-就都通过。
测试点3和测试点4类似,均涉及同性恋问题,虽然n非常小,但是如果没有考虑同性恋,这2个测试点均无法通过。
同性恋问题主要不是要考虑性别因素,而是需要考虑人是否重复。
假设A暗恋B,A认识C认识D认识B。如果是异性恋,不妨设A为男,则AC男,BD女,因为题目给出一个人不会拥有2个性别,所以A!=D,B!=C,不会出现问题。
如果是同性恋,不妨设A为男,则ACDB均为男,但是如果程序不加考虑,则可能出现A==D或B==C的情况,所以导致Wrong Answer。
测试点5主要是数据规模均设置为最大,看程序能不能承受大量数据的测试,如果代码过于暴力,则可能无法通过该测试点。
代码分析:
利用先读一个字符的方法判断性别,g数组存放两人是否认识,下标直接是ID。
gen数组存放每人的性别,1表示男,2表示女,0表示未定义,下标直接是ID。hash数组用于存放所有的ID。
通过性别是否定义过判断某个ID是否首次出现,首次出现就将ID压入hash数组里。
最后等所有ID都进去了,再调一次快速排序把hash数组里的数据排序一下,主要是要保证输出的顺序。
AC代码:
#include<stdio.h>
#include<stdlib.h>
#define N 10000 int g[N][N],gen[N],tmp[*N][],hash[],haN; int inc(const void *a,const void *b)
{
return *(int *)a-*(int *)b;
} int ab(int num)
{
if(num<)
num=-num;
return num;
} int main(void)
{
int n=,m=,k=,g1=,g2=,g3=,g4=;
char c1='\0',c2='\0';
scanf("%d%d",&n,&m);
while(m--)
{
scanf("%*c%c%d%*c%c%d",&c1,&g1,&c2,&g2);
//+0000 or -0000 AC!!!
if(c1!='-')
g1=(c1-'')*+g1;
if(gen[g1]==)
hash[haN++]=g1;
gen[g1]=c1!='-'?:;
if(c2!='-')
g2=(c2-'')*+g2;
if(gen[g2]==)
hash[haN++]=g2;
gen[g2]=c2!='-'?:;
g[ab(g1)][ab(g2)]=g[ab(g2)][ab(g1)]=;
}
qsort(hash,haN,,inc);
scanf("%d",&k);
while(k--)
{
int tmpN=;
scanf("%d%d",&g1,&g2);
g1=ab(g1),g2=ab(g2);
for(g3=;g3<haN;g3++)
{
if(gen[g1]^gen[hash[g3]]||!g[g1][hash[g3]]||hash[g3]==g2)//must not the same
continue;
for(g4=;g4<haN;g4++)
if(gen[hash[g4]]==gen[g2]&&g[hash[g4]][g2]&&g[hash[g3]][hash[g4]]&&g1^hash[g4])//must not the same
tmp[tmpN][]=hash[g3],tmp[tmpN][]=hash[g4],++tmpN;
}
printf("%d\n",tmpN);
for(m=;m<tmpN;m++)
printf("%04d %04d\n",tmp[m][],tmp[m][]);
}
return ;
}
1139 First Contact PAT (Advanced Level)的更多相关文章
- PAT (Advanced Level) Practice(更新中)
Source: PAT (Advanced Level) Practice Reference: [1]胡凡,曾磊.算法笔记[M].机械工业出版社.2016.7 Outline: 基础数据结构: 线性 ...
- PAT (Advanced Level) Practice 1001-1005
PAT (Advanced Level) Practice 1001-1005 PAT 计算机程序设计能力考试 甲级 练习题 题库:PTA拼题A官网 背景 这是浙大背景的一个计算机考试 刷刷题练练手 ...
- PAT (Advanced Level) Practice 1046 Shortest Distance (20 分) 凌宸1642
PAT (Advanced Level) Practice 1046 Shortest Distance (20 分) 凌宸1642 题目描述: The task is really simple: ...
- PAT (Advanced Level) Practice 1042 Shuffling Machine (20 分) 凌宸1642
PAT (Advanced Level) Practice 1042 Shuffling Machine (20 分) 凌宸1642 题目描述: Shuffling is a procedure us ...
- PAT (Advanced Level) Practice 1041 Be Unique (20 分) 凌宸1642
PAT (Advanced Level) Practice 1041 Be Unique (20 分) 凌宸1642 题目描述: Being unique is so important to peo ...
- PAT (Advanced Level) Practice 1035 Password (20 分) 凌宸1642
PAT (Advanced Level) Practice 1035 Password (20 分) 凌宸1642 题目描述: To prepare for PAT, the judge someti ...
- PAT (Advanced Level) Practice 1031 Hello World for U (20 分) 凌宸1642
PAT (Advanced Level) Practice 1031 Hello World for U (20 分) 凌宸1642 题目描述: Given any string of N (≥5) ...
- PAT (Advanced Level) Practice 1027 Colors in Mars (20 分) 凌宸1642
PAT (Advanced Level) Practice 1027 Colors in Mars (20 分) 凌宸1642 题目描述: People in Mars represent the c ...
- PAT (Advanced Level) Practice 1023 Have Fun with Numbers (20 分) 凌宸1642
PAT (Advanced Level) Practice 1023 Have Fun with Numbers (20 分) 凌宸1642 题目描述: Notice that the number ...
随机推荐
- luoguP4169 [Violet]天使玩偶/SJY摆棋子 K-Dtree
P4169 [Violet]天使玩偶/SJY摆棋子 链接 luogu 思路 luogu以前用CDQ一直过不去. bzoj还是卡时过去的. 今天终于用k-dtree给过了. 代码 #include &l ...
- 洛谷1169 [ZJOI2007] 棋盘制作
题目链接 题意概述:给出由0 1构成的矩阵,求没有0 1 相邻的最大子矩阵的最大子正方形. 解题思路:设f[i][j]表示i j向上能到哪,l[i][j] r[i][j]表示向左/右,转移时分开计算矩 ...
- JavaScript sort函数
默认排序法则: 按照String类型ASCII码大小排序 如果要倒序排序,我们可以把大的数放前面: var arr = [10, 20, 1, 2]; arr.sort(function (x, y) ...
- H5中对history栈的操作
今天研究一下H5中history操作的相关知识,首先梳理一下基本内容: 一.在history中的跳转 使用 back(), forward()和 go() 方法来完成在用户历史记录中向后和向前的跳转. ...
- layui上传文件组件(前后端代码实现)
我个人博客系统上传特色图片功能就是用layui上传文件组件做的.另外采用某个生态框架,尽量都统一用该生态框架对应的解决方案,因为这样一来,有这么几个好处?1.统一而不杂糅,有利于制定相应的编码规范,方 ...
- Curator框架实现ZooKeeper分布式锁
排他锁(X) 这里主要讲讲分布式锁中的排他锁.排他锁(Exclusive Locks,简称X锁),又称为写锁或独占锁,是一种基本的锁类型.如果事务T1对数据对象O1加上了排他锁,那么在整个加锁期间,只 ...
- spring mvc中添加对Thymeleaf的支持
一.下载Thymeleaf 官方下载地址:https://dl.bintray.com/thymeleaf/downloads/thymeleaf/ 我下载的是最新的3.0.11版本 把包里的jar包 ...
- SQLServer : 找中间日期
假设找 一个日期居于[ 2022-03-10, 2022-05-11 ]的正中间
- jQuery-webcam使用
基本页面 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <meta ...
- 面试突击(六)——JVM如何实现JAVA代码一次编写到处运行的?
声明:本文图片均来自网络,我只是进行了选择,利用一图胜千言的力量来帮助自己快速的回忆相关的知识点 JVM是 JAVA Virtual Machine 三个英文单词的首字母缩写,翻译成中文就是Java虚 ...