Programming Ability Test 乙级真题及训练集1065
来源:互联网 发布:每个淘宝号最多刷几单 编辑:程序博客网 时间:2024/06/04 21:32
1065. 单身狗(25)
“单身狗”是中文对于单身人士的一种爱称。本题请你从上万人的大型派对中找出落单的客人,以便给予特殊关爱。
输入格式:
输入第一行给出一个正整数N(<=50000),是已知夫妻/伴侣的对数;随后N行,每行给出一对夫妻/伴侣——为方便起见,每人对应一个ID号,为5位数字(从00000到99999),ID间以空格分隔;之后给出一个正整数M(<=10000),为参加派对的总人数;随后一行给出这M位客人的ID,以空格分隔。题目保证无人重婚或脚踩两条船。
输出格式:
首先第一行输出落单客人的总人数;随后第二行按ID递增顺序列出落单的客人。ID间用1个空格分隔,行的首尾不得有多余空格。
输入样例:
3
11111 22222
33333 44444
55555 66666
7
55555 44444 10000 88888 22222 11111 23333
输出样例:
5
10000 23333 44444 55555 88888
解题过程
#include <iostream>#include <stdio.h>using namespace std;int szzsz(int in,int num[],int gs);int ewszzsz(int in,int num[][2],int gs);int cmp ( const void *a , const void *b );int main(int argc, char *argv[]){ int N,yhid[50000][2],M,mgrid[10000],i,j=0,dsgid[10000],wldid[10000],ldid[10000],ngs=0,ygs=0,ldrs=0; scanf("%d",&N); for(i=0;i<N;i++) { scanf("%d %d",&yhid[i][0],&yhid[i][1]); } scanf("%d",&M); for(i=0;i<M;i++) { scanf("%d",&mgrid[i]); } for(i=0;i<M;i++) { if(ewszzsz(mgrid[i],yhid,N)!=0) { if(yhid[ewszzsz(mgrid[i],yhid,N)][0]=mgrid[i]) { if(szzsz(yhid[ewszzsz(mgrid[i],yhid,N)][1],mgrid,M)!=0) { wldid[ngs++]=mgrid[i]; } else { ldid[ygs++]=mgrid[i]; } } else { if(szzsz(yhid[ewszzsz(mgrid[i],yhid,N)][0],mgrid,M)!=0) { wldid[ngs++]=mgrid[i]; } else { ldid[ygs++]=mgrid[i]; } } } else { ldid[ygs++]=mgrid[i]; } } printf("%d\n",ygs); qsort(ldid,ygs,sizeof(ldid[0]),cmp); for(i=0;i<ygs;i++) { printf("%d ",ldid[i]); } return 0;}int cmp ( const void *a , const void *b ) { return *(int *)a - *(int *)b; } int szzsz(int in,int num[],int gs){ for(int i=0;i<gs;i++) { if(num[i]==in) { return i; } } return 0;}int ewszzsz(int in,int num[][2],int gs){ for(int i=0;i<gs;i++) { if(num[i][0]==in||num[i][1]==in) { return i; } } return 0; }
这个就是我的思路,完全失败,就像老太婆的裹脚布又臭又长,下面是布道者的思路
#include <iostream>using namespace std;int cmp(const void *a,const void *b){ return *(int *)a - *(int *)b;}int main(int argc, char *argv[]){ int n,m,i=0,j,t=0; int X,Y; int c[100000]={0}; int d[100000]={0}; int e[100000]={0}; scanf("%d",&n);//输入夫妻对数 while(i<n)//输入各对夫妻 { scanf("%d %d",&X,&Y); c[X]=Y;c[Y]=X;//因为X不可能等于Y,所以可以这样赋值,并让配对好的和单身的得以区分,单身的值均为0; i++; } i=0; scanf("%d",&m);//输入参与人数 while(i<m)//输入人数编号 { scanf("%d",&d[i]); i++; } i=0; while(i<m) { j=i+1; if (c[d[i]]!=0) { while(j<m) { if(c[d[i]]==d[j]) { d[i]=0; d[j]=0; } j++; } } i++; } i=0; while(i<m) { if(d[i]!=0) { e[t]=d[i]; t++; } i++; } printf("%d\n",t); qsort(e,t,sizeof(e[0]),cmp); i=0; while(i<t-1) { printf("%d ",e[i]); i++; } printf("%d ",e[i]); return 0;}
看上去条理清晰,逻辑上似乎也没有问题对吧,可惜还是出错了。待这题研究出来我会把最后代码放在下面的。
阅读全文
0 0
- Programming Ability Test 乙级真题及训练集1065
- Programming Ability Test 乙级真题及训练集1001
- Programming Ability Test 乙级真题及训练集1002
- Programming Ability Test 乙级真题及训练集1004
- ZOJ 3927 Programming Ability Test
- zoj-3927-Programming Ability Test
- 【PAT乙级真题及训练集】【1003】我要通过!(20)
- 【PAT乙级真题及训练集】1002. 写出这个数 (20)
- 【PAT乙级真题及训练集】1003. 我要通过!(20)
- PAT乙级真题及训练集(2)--1011. A+B和C (15)
- PAT乙级真题及训练集(3)--1016. 部分A+B (15)
- PAT乙级真题及训练集(4)--1026. 程序运行时间(15)
- PAT乙级真题及训练集(5)--1046. 划拳(15)
- PAT乙级真题及训练集(6)--1008. 数组元素循环右移问题 (20)
- PAT乙级真题及训练集(7)--1012. 数字分类 (20)
- PAT乙级真题及训练集(8)--1018. 锤子剪刀布 (20)
- PAT乙级真题及训练集(9)--1010. 一元多项式求导
- PAT乙级真题及训练集(10)--1041. 考试座位号(15)
- Spring Cloud各组件超时总结
- Pstore dmesg read篇
- 前端面镜-布局方式
- JavaScript 面向对象之工厂模式
- POJ 3159 Candies 差分约束-SPFA栈实现
- Programming Ability Test 乙级真题及训练集1065
- main函数的两个参数
- Java方法总结
- 爬虫--今日头条ajax动态
- 前端面经-性能优化
- 行高line-height,元素居中
- Android按钮控制加减
- Linux和Windows系统下C++读取文件夹下文件名
- 速卖通外贸运营 从0到12万美金 外贸工厂转战跨境电商分享!