今日总结2024/3/21

今日复习了基本的排序算法,以及自定义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 月英文的前三个字母分别是 JanFebMarAprMayJunJulAugSepOctNovDec

数字形式直接用两个整数表达,中间用一个空格分隔,两个整数都不写前 导 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;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值