今日复习了基本的排序算法,以及自定义sort函数实现排序结构体类型的用法
long long 最大能存2^63大概9e18,碰到大概1e18左右的数都用long long存
string的substr函数通过下标分割字串是左闭右开的
Sort函数
sort函数位于algorithm头文件中,是C++自带的排序函数
sort(first,last,[cmp]) First和last分别是起始地址和终止地址,左闭右开区间,cmp是自定义比较函数可写可不写
bool cmp(int a,int b)
{
return b<a;//这边是把大的排在前面
}
sort(a,a+n,cmp);
//不写cmp函数是默认是return a<b也就是升序排列,你想要降序排列就a>b
[NOIP2017]图书管理员
图书馆中每本书都有一个图书编码,可以用于快速检索图书,这个图书编码是一个正整数。
每位借书的读者手中有一个需求码,这个需求码也是一个正整数。如果一本书的图书编码恰好以读者的需求码结尾,那么这本书就是这位读者所需要的。
小 D 刚刚当上图书馆的管理员,她知道图书馆里所有书的图书编码,她请你帮她写一个程序,对于每一位读者,求出他所需要的书中图书编码最小的那本书,如果没有他需要的书,请输出-1。
输入描述:
输入的第一行,包含两个正整数 n 和 q,以一个空格分开,分别代表图书馆里书的数量和读者的数量。 接下来的 n 行,每行包含一个正整数,代表图书馆里某本书的图书编码。 接下来的 q 行,每行包含两个正整数,以一个空格分开,第一个正整数代表图书馆里读者的需求码的长度,第二个正整数代表读者的需求码。
输出描述:
输出有 q 行,每行包含一个整数,如果存在第 i 个读者所需要的书,则在第 i 行输出第 i 个读者所需要的书中图书编码最小的那本书的图书编码,否则输出-1。
输入
5 5
2123
1123
23
24
24
2 23
3 123
3 124
2 12
2 12
输出
23
1123
-1
-1
-1
对于 100%的数据,1≤n ≤1,000,1 ≤ q ≤ 1,000,所有的图书编码和需求码均不超过 10,000,000。
本题只需要注意取数据后几位就是对该数据进行求余%pow(10,i)
i表示取余多少位,因为要对每个借书的人进行枚举,对于每个人又要对所有图书进行枚举
所以时间复杂度是O(n*q)为1e6,用O(n^2)会超时,就要进行优化,对图书进行排序,在找到答案时直接进行return可以优化
#include <bits/stdc++.h>
#define endl '\n'
using namespace std;
const int N=1e3+5;
int n,q,book[N];
void check(int l,int c){
for(int i=0;i<n;i++){
int tmp=pow(10,l);//求余取多少位
if(book[i]%tmp==c){
cout<<book[i]<<endl;
return;
}
}
cout<<-1<<endl;
return;
}
int main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
cin>>n>>q;
for(int i=0;i<n;i++) cin>>book[i];
sort(book,book+n);//排序
while(q--){
int len,code;
cin>>len>>code;
check(len,code);
}
return 0;
}
P8722 [2020 省 AB3] 日期识别
题目描述
小蓝要处理非常多的数据, 其中有一些数据是日期。
在小蓝处理的日期中有两种常用的形式:英文形式和数字形式。
英文形式采用每个月的英文的前三个字母作为月份标识,后面跟两位数字表示日期,月份标识第一个字母大写,后两个字母小写, 日期小于 1010 时要补前导 00。11 月到 1212 月英文的前三个字母分别是 Jan
、Feb
、Mar
、Apr
、May
、Jun
、Jul
、Aug
、Sep
、Oct
、Nov
、Dec
。
数字形式直接用两个整数表达,中间用一个空格分隔,两个整数都不写前 导 0
。其中月份用 11 至 1212 分别表示 11 月到 1212 月。
输入一个日期的英文形式, 请输出它的数字形式。
输入格式
输入一个日期的英文形式。
输出格式
输出一行包含两个整数,分别表示日期的月和日。
输入输出样例
输入
Feb08
输出
2 8
输入
Oct18
输出
10 18
直接写个map映射通过substr分割字符串即可
#include <bits/stdc++.h>
#define PII pair<string,int>
using namespace std;
map<string,int> mp;
int main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
PII a[]={{"Jan",1},{"Feb",2},{"Mar",3},{"Apr",4},{"May",5},{"Jun",6},{"Jul",7},
{"Aug",8},{"Sep",9},{"Oct",10},{"Nov",11},{"Dec",12}};
for(int i=0;i<12;i++) mp.insert(a[i]);
string s,mon;
cin>>s;
int day=(s[3]-'0')*10+s[4]-'0';
mon=s.substr(0,3);
cout<<mp[mon]<<' '<<day;
return 0;
}