蓝桥杯省赛夺奖冲刺营内置模板
「快递分拣」
题目描述
蓝桥王国的每个快递都包含两个参数:1.快递单号 2.快递城市。
小李是蓝桥王国的一名快递员,每天的快递分拣让他苦不堪言。
于是他想要你帮他设计一个程序用于快递的分拣(将不同快递按城市信息分开)。
输入描述
输入第一行包含一个整数 N,表示快递的个数。
接下来第 2 ~ N+1 行每行包含一个字符串 S 和一个字符串 P,分别快递单号以及快递对应的城市。
1≤N≤10^3 ,保证数据量不超过 10^6
输出描述
输出共若干行。按城市的输入顺序依次输出城市的名称以及城市的快递个数,以及该城市的所有快递单号(单号按照输入顺序排序)。
输入输出样例
示例
输入
10
10124214 北京
12421565 上海
sdafasdg213 天津
fasdfga124 北京
145252 上海
235wtdfsg 济南
3242356fgdfsg 成都
23423 武汉
23423565f 沈阳
1245dfwfs 成都
输出
北京 2
10124214
fasdfga124
上海 2
12421565
145252
天津 1
sdafasdg213
济南 1
235wtdfsg
成都 2
3242356fgdfsg
1245dfwfs
武汉 1
23423
沈阳 1
23423565f
运行限制
最大运行时间:1s
最大运行内存: 256M
import java.util.Scanner;
import java.util.Vector;
public class Main {
static Vector<String> city=new Vector<String>();
static Vector<Vector<String>> pack=new Vector<Vector<String>>();
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n=sc.nextInt();
String number;
String addr;
while(n-->0) {
number=sc.next();
addr=sc.next();
int index=findCity(addr);//该城市对应位置
if(index!=-1) {//已有
pack.get(index).add(number);
}else {
city.add(addr);//先添加此城市
pack.add(new Vector<String>());//添加此城市快递队列
pack.get(pack.size()-1).add(number);//将此快递单号添加进对应城市
}
}
for (int i = 0; i < city.size(); i++) {
System.out.println(city.get(i)+" "+pack.get(i).size());
for (int j = 0; j < pack.get(i).size(); j++) {
System.out.println(pack.get(i).get(j));
}
}
}
private static int findCity(String addr) {
for (int i = 0; i < city.size(); i++) {
if(city.get(i).equals(addr)) {
return i;
}
}
return -1;
}
}
「CLZ 的银行」
题目描述
CLZ 银行只有两个接待窗口,VIP 窗口和普通窗口,VIP 用户进入 VIP 窗口排队,剩下的进入普通窗口排队。现有 M 次操作,操作有四种类型,如下:
IN name V:表示一名叫 name 的用户到 VIP 窗口排队
OUT V:表示 VIP窗口队头的用户离开排队
IN name N:表示一名叫 name 的用户到普通窗口排队
OUT N:表示普通窗口队头的用户离开排队
求 M次操作结束后 VIP 窗口队列和普通窗口队列中的姓名。
输入描述
第一行是一个整数 M(1<M <1000)M(1≤M≤1000),表示一共有 M 次操作。
第二行到第 M+1行输入操作,格式如下:
IN name V
OUT V
IN name N
OUT N
输出描述
输出 M 次操作后 VIP 窗口队列和普通窗口队列中的姓名(从头到尾),先输出 VIP 窗口队列后输出普通窗口队列。
输入输出样例
示例 1
输入
5
IN xiaoming N
IN Adel V
IN laozhao N
OUT N
IN CLZ V
输出
Adel
CLZ
laozhao
运行限制
最大运行时间:1s
最大运行内存: 128M
代码
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
public class Main {
static Queue<String> vip=new LinkedList<String>();
static Queue<String> normal=new LinkedList<String>();
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n=sc.nextInt();
String op,name,kind;
while(n-->0) {
op=sc.next();//操作符
if(op.equals("IN")) {
name=sc.next();
kind=sc.next();
in(name,kind);
}else {
kind=sc.next();
out(kind);
}
}
while (vip.size()>0) {
System.out.println(vip.remove());
}
while (normal.size()>0) {
System.out.println(normal.remove());
}
}
private static void out(String kind) {
if(kind.equals("V")) {
vip.remove();
}else {
normal.remove();
}
}
private static void in(String name, String kind) {
if(kind.equals("V")) {
vip.add(name);
}else {
normal.add(name);
}
}
}
「弗里石的的语言」
题目描述
小发明家弗里想创造一种新的语言,众所周知,发明一门语言是非常困难的,首先你就要克服一个困难就是,有大量的单词需要处理,现在弗里求助你帮他写一款程序,判断是否出现重复的两个单词。
输入描述
第 1 行,输入 N,代表共计创造了多少个单词。
第 2行至第 N+1 行,输入 N个单词。
1≤N≤10^4 ,保证字符串的总输入量不超过 10^6。
输出描述
输出仅一行。若有重复的单词,就输出重复单词,没有重复单词,就输出 NO,多个重复单词输出最先出现的。
输入输出样例
示例1
输入
6
1fagas
dsafa32j
lkiuopybncv
hfgdjytr
cncxfg
sdhrest
输出
NO
示例2
输入
5
sdfggfds
fgsdhsdf
dsfhsdhr
sdfhdfh
sdfggfds
输出
sdfggfds
运行限制
最大运行时间:3s
最大运行内存: 512M
代码
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
public class Main {
static Map<String, Integer> map=new HashMap<String, Integer>();
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n=sc.nextInt();
String word;
boolean flag=false;
while(n-->0) {
word=sc.next();
if(map.get(word)==null) {
map.put(word, 1);
}else{
System.out.println(word);
flag=true;
break;
}
}
if(!flag) {
System.out.println("NO");
}
}
}