https://pintia.cn/problem-sets/994805046380707840/problems/994805117167976448
解析
PTA 还是一样卡语言,Java 得 17 分,TLE 最后一个点。
这个题需要注意朋友圈只有一个人的情况,一个表示没有朋友,输出的时候要满足五位数,小于五位数需要补零。
AC Code
import java.io.*;
import java.math.*;
import java.util.*;
public class Main {
static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
static StreamTokenizer st = new StreamTokenizer(br);
static PrintWriter out = new PrintWriter(new BufferedOutputStream(System.out));
public static void main(String[] args) throws Exception {
int n = nextInt();
int[] vis = new int[100000];
while(n-- != 0) {
int k = nextInt(); // 朋友个数
for(int i = 1; i <= k; i++) {
int id = nextInt(); // 朋友ID
if(vis[id] != 0) vis[id]++; // 当ID已经存在时,朋友个数 +1
else vis[id] = k; // 当ID不存在时,直接赋予朋友个数
}
}
int m = nextInt();
boolean flag = false;
boolean headEmpty = false;
while(m-- != 0) {
int id = nextInt();
if(vis[id] <= 1) { // 朋友个数小于或等于零的人表示没有朋友
if(headEmpty) out.print(" ");
out.printf("%05d", id);
flag = true;
vis[id] = 2; // 置为 2 ,防止重复询问
headEmpty = true;
}
}
if(!flag) out.println("No one is handsome");
out.flush();
}
public static int nextInt() throws Exception {
st.nextToken();
return (int) st.nval;
}
public static String nextStr() throws Exception {
st.nextToken();
return st.sval;
}
}
C 语言版 满分
#include <stdio.h>
int main() {
int n;
scanf("%d", &n);
int vis[100000] = {0};
while(n-- != 0) {
int k;
scanf("%d", &k);
for(int i = 1; i <= k; i++) {
int id;
scanf("%d", &id);
if(vis[id] != 0) vis[id]++;
else vis[id] = k;
}
}
int m;
scanf("%d", &m);
int flag = 0;
int headEmpty = 0;
while(m-- != 0) {
int id;
scanf("%d", &id);
if(vis[id] <= 1) {
if(headEmpty) printf(" ");
printf("%05d", id);
flag = 1;
vis[id] = 2;
headEmpty = 1;
}
}
if(!flag) printf("No one is handsome");
return 0;
}