- 6.10 AcWing 4268. 性感素数
- 6.11 校庆
“性感素数 ”是指形如 (p,p+6) 这样的一对素数。
之所以叫这个名字,是因为拉丁语管“六”叫“sex”(即英语的“性感”)。
现给定一个整数,请你判断其是否为一个性感素数。
输入格式
输入在一行中给出一个正整数 N。
输出格式
若 N 是一个性感素数,则在一行中输出 Yes,并在第二行输出与 N 配对的另一个性感素数(若这样的数不唯一,输出较小的那个)。
若 N 不是性感素数,则在一行中输出 No,然后在第二行输出大于 N 的最小性感素数。
数据范围
1
≤
N
≤
1
0
8
1≤N≤10^8
1≤N≤108
题解:
写一个
O
(
n
)
O( sqrt n)
O(n
)的质数判定。
bool prime(int n){
if(n<=1) return 0;
else{
for(int i=2;i<=sqrt(n);i++){
if(n%i==0) return 0;
}
}
return 1;
}
接下来就模拟就行了,有
n
+
6
n+6
n+6和
n
−
6
n-6
n−6两种情况。
第一问直接输出
y
e
s
yes
yes,第二问枚举到
1
e
8
1e8
1e8都不会爆炸。
AC代码
#includeusing namespace std; bool primes(int n){ if(n<=1) return 0; else{ for(int i=2;i<=sqrt(n);i++){ if(n%i==0) return 0; } } return 1; } int main(){ int n; scanf("%d",&n); if(primes(n)==1&&(primes(n+6)==1||primes(n-6)==1)){ cout<<"Yes"< cout< cout< cout<<"No"< if(primes(i)&&primes(i-6)){ cout< cout< 6.11 校庆 2019 年浙江大学将要庆祝成立 122 周年。
为了准备校庆,校友会收集了所有校友的身份证号。
现在需要请你编写程序,根据来参加校庆的所有人士的身份证号,统计来了多少校友。
输入格式
输入在第一行给出正整数 N。
随后 N 行,每行给出一位校友的身份证号(18 位由数字和大写字母 X 组成的字符串)。题目保证身份证号不重复。
随后给出前来参加校庆的所有人士的信息:
首先是一个正整数 M。
随后 M 行,每行给出一位人士的身份证号。题目保证身份证号不重复。
输出格式
首先在第一行输出参加校庆的校友的人数。
然后在第二行输出最年长的校友的身份证号 —— 注意身份证第 7−14 位给出的是 yyyymmdd 格式的生日。
如果没有校友来,则在第二行输出最年长的来宾的身份证号。题目保证这样的校友或来宾必是唯一的。
数据范围
1 ≤ N , M ≤ 1 0 5 1≤N,M≤10^5 1≤N,M≤105题解:
这个题时间限制0.8s。。奇怪。。只能用unordered_map才卡的过去的题。
其实拿到这道题,脑子里只能有两个关键词“去重+去除子串”
那么我们的立刻就想到了 m a p 和 s u b s t r map和substr map和substr函数。
先在输入学生的身份证号时给对应的 m a p map map赋值,之后我们可以进行判断。
我们开一个 M a t e Mate Mate字符串和 G u e s t Guest Guest字符串来存储学生的身份证和来宾的身份证号。每次取出子串对其进行更新就行了。#includeusing namespace std; int cnt=0; int main(){ int n,m; string s; unordered_map mp; scanf("%d",&n); while(n--){ cin>>s; mp[s]=1; } scanf("%d",&m); string Mate="99999999999999999X"; string Guest="99999999999999999X"; while(m--){ cin>>s; if(mp[s]){ cnt++; if(Mate.substr(6,13)>s.substr(6,13)){ Mate=s; } } else{ if(Guest.substr(6,13)>s.substr(6,13)){ Guest=s; } } } printf("%dn",cnt); if(cnt) cout<



