NC54253. 能不能让我捧个杯啊
描述
输入描述
第一行两个整数,用空格隔开,表示有效参赛队总数 N 和打星队伍的数量 K
第二行有 K 个整数,用空格隔开,依次表示 K 支打星队伍的排名(注意:这 K 支队伍排名无序)
, ,为方便计算,保证 N 是 10 的整数倍
输出描述
输出由三行构成,每行两个整数,中间由空格隔开
三行依次对应金奖、银奖、铜奖。每行的两个整数依次代表第一个获得金/银/铜奖的队伍排名,和最后一个获得金/银/铜奖的队伍排名
示例1
输入:
400 1 88
输出:
1 40 41 121 122 241
说明:
样例表示有400支有效参赛队,可算出应有40个金奖、80个银奖、120个铜奖。1支打星队,排名为第88名Java(javac 1.8) 解法, 执行用时: 49ms, 内存消耗: 12112K, 提交时间: 2020-02-16 16:05:09
import java.util.Arrays; import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int N = sc.nextInt(); int K = sc.nextInt(); int [] a = new int [K]; for (int i = 0; i < K; i++){ a[i] = sc.nextInt(); } Arrays.sort(a); int [] m = new int [N+K]; for (int i = 0; i < K; i++){ m[(a[i])-1] = a[i]; } int yi = (int) (N * 0.1); int er = (int) (N * 0.3); int san = (int) (N * 0.6); int A = 0; int B = 0; int C = 0; int D = 0; int E = 0; int F = 0; int q = 0; for (int i = 0; i < N + K; i++){ if (m[i] == 0){ q++; if(q == 1){ A = i + 1; } if(q == yi){ B = i + 1; C = i + 2; } if(q == er){ D = i + 1; E = i + 2; } if(q == san){ F = i + 1; } } } System.out.println(A + " " + B); System.out.println(C + " " + D); System.out.println(E + " " + F); } }
C++11(clang++ 3.9) 解法, 执行用时: 4ms, 内存消耗: 388K, 提交时间: 2019-11-11 18:05:33
#include<iostream> #include<vector> bool a[501]; int b[501]; using namespace std; int main() { int N,K,x,t=0; cin>>N>>K; for(int i=1;i<=K;i++) { cin>> x; a[x]=true; } for(int i=1;i<=N;i++) { if(a[i]==false) b[++t]=i; } printf("%d %d\n%d %d\n%d %d",b[1],b[N/10],b[N/10+1],b[3*N/10],b[3*N/10+1],b[6*N/10]); return 0; }
C++14(g++5.4) 解法, 执行用时: 2ms, 内存消耗: 368K, 提交时间: 2019-10-29 15:13:02
# include<stdio.h> int m[705]; bool vis[705]; int main() { int n, k, x, i, j = 0; scanf("%d %d",&n, &k); for(i=1;i<=k;i++){ scanf("%d",&x); vis[x] = true; } for(i=1;i<=n+k;i++){ if(!vis[i]){ m[++j] = i; } } n /= 10; printf("%d %d\n%d %d\n%d %d\n",m[1],m[n],m[n+1],m[3*n],m[3*n+1],m[6*n]); return 0; }