2.23学习总结

news/2024/11/29 12:43:49/

铅球杯https://www.luogu.com.cn/problem/B3911

题目描述

蓝边铅球组织了“铅球杯”数据标注大赛。为了实现 Au 大满贯的宏大征途,LeAuingZ 报名参加了比赛。

蓝边铅球给出了 �N 个 int 类型变量的名字及其值,并要求 LeAuingZ 对 �k 句话进行数据标注。每句话由大小写英文字母、空格、半角逗号、半角句号和 {} 组成。在 {} 之间的,为 �N 个变量名中的一个,LeAuingZ 需要将每一句话中全部的 {变量名} 替换为变量的值并输出。

例如,有 �=3,�=4a=3,b=4,对于句子 We know a is {a}, b is {b}.,替换后将得到 We know a is 3, b is 4.

LeAuingZ 觉得这个任务很无聊,决定编写一个程序来快速获得 Au。

输入格式

输入共 �+�+1N+k+1 行。

输入的第一行为两个整数 �,�N,k。

接下来 �N 行,每行一个小写英文字符串、一个整数,分别代表变量名和变量的值。

接下来 �k 行,每行一个需要标注的句子。

输出格式

输出 �k 行,每行一个标注好的句子。

输入输出样例

输入 #1复制

5 2
abc 1
a 2
b 3
c 4
d 5
We have {a} apples.
We {d}onot have pencils.

输出 #1复制

We have 2 apples.
We 5onot have pencils.

说明/提示

  • 对于 20%20% 的测试数据,�=1k=1。

  • 对于另外 30%30% 的测试数据,1≤�≤261≤N≤26,变量名长度均为 11。

  • 对于 100%100% 的测试数据,1≤�≤50001≤N≤5000,1≤�≤201≤k≤20。变量名仅含英文小写字母,变量名长度不超过 2020,变量的值在 int 范围内,标注前句子长度不超过 5×1045×104,保证 {} 成对合法出现。每句话由大小写英文字母、空格、半角逗号、半角句号和 {} 组成。

#include <bits/stdc++.h>
using namespace std;
#define lowbit(x) x&(-x)
#define int long long
#define INF 0x3f3f3f3f3f3f3f3finline int read()
{int x=0,f=1;char ch=getchar();while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}while (ch>='0'&&ch<='9'){x=x*10+ch-48;ch=getchar();}return x*f;
} int n,m,p;
map<string,int>mp;
string s;signed main(){n=read(),m=read();for (int i=1 ; i<=n; ++i){cin>>s>>p;mp[s]=p;}for (int i=1 ; i<=m+1 ; ++i){getline(cin,s);if (i==1) continue;for (int j=0; j<s.size() ; ++j){if (s[j]!='{') cout<<s[j];else{string s1="";int k=j+1;j++;while (s[k]!='}'){s1+=s[k];k++;j++;}cout<<mp[s1];}}cout<<endl;}
}
进制转换https://www.luogu.com.cn/problem/B3849

题目描述

小美刚刚学习了十六进制,她觉得很有趣,想到是不是还有更大的进制呢?在十六进制中,用 A 表示 1010、F 表示 1515。如果扩展到用 Z 表示 3535,岂不是可以表示 3636 进制数了嘛!

所以,你需要帮助她写一个程序,完成十进制转 �R 进制(2≤�≤362≤R≤36)的工作。

输入格式

输入两行,第一行包含一个正整数 �N,第二行包含一个正整数 �R,保证 1≤�≤1061≤N≤106。

输出格式

输出一行,为 �N 的 �R 进制表示。

输入输出样例

输入 #1复制

123
25

输出 #1复制

4N

#include <bits/stdc++.h>
using namespace std;
#define lowbit(x) x&(-x)
#define int long long
#define INF 0x3f3f3f3f3f3f3f3finline int read()
{int x=0,f=1;char ch=getchar();while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}while (ch>='0'&&ch<='9'){x=x*10+ch-48;ch=getchar();}return x*f;
} int n,m,a[200],cnt;signed main(){n=read(),m=read();while (n>0){a[cnt]=n%m;n/=m;cnt++;}for (int i=cnt-1; i>=0 ; --i){if (a[i]>=10) cout<<char(65+a[i]-10);else cout<<a[i];}
}

硬币翻转https://www.luogu.com.cn/problem/P2708

题目描述

有很多个硬币摆在一行,有正面朝上的,也有背面朝上的。正面朝上的用 11 表示,背面朝上的用 00 表示。

现在要求从这行的第一个硬币开始,将从第一个硬币开始的前若干个硬币同时翻面,求如果要将所有硬币翻到正面朝上,最少要进行这样的操作多少次?

输入格式

一个字符串,由 00 和 11 组成,表示硬币的初始状态。

输出格式

一个整数,表示要翻转的最少次数。

输入输出样例

输入 #1复制

10

输出 #1复制

2

说明/提示

样例解释

  • 第 11 次翻转:把第一个硬币翻到反面,字符串为 0000;

  • 第 22 次翻转:把第一、二个硬币一起翻到正面,字符串为 1111,翻转完成,输出 22。

数据范围

记 �n 表示硬币的总个数,

  • 对于 20%20% 的数据,1≤�≤101≤n≤10;

  • 对于 50%50% 的数据,1≤�≤1041≤n≤104;

  • 对于 100%100% 的数据,1≤�≤1061≤n≤106。

#include <bits/stdc++.h>
using namespace std;
#define lowbit(x) x&(-x)
#define int long long
#define INF 0x3f3f3f3f3f3f3f3finline int read()
{int x=0,f=1;char ch=getchar();while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}while (ch>='0'&&ch<='9'){x=x*10+ch-48;ch=getchar();}return x*f;
} string s;
int len,cnt;signed main(){cin>>s;len=s.size();for (int i=0; i<len-1 ; ++i)if (s[i]!=s[i+1]) cnt++;if (s[len-1] == '0') cnt++;cout<<cnt;
}

学生分组https://www.luogu.com.cn/problem/P1109

题目描述

有 �n 组学生,给出初始时每组中的学生个数,再给出每组学生人数的上界 �R 和下界 � (�≤�)L (L≤R),每次你可以在某组中选出一个学生把他安排到另外一组中,问最少要多少次才可以使 �N 组学生的人数都在 [�,�][L,R] 中。

输入格式

第一行一个整数 �n,表示学生组数;

第二行 �n 个整数,表示每组的学生个数;

第三行两个整数 �,�L,R,表示下界和上界。

输出格式

一个数,表示最少的交换次数,如果不能满足题目条件输出 −1−1。

输入输出样例

输入 #1复制

2
10 20
10 15

输出 #1复制

5

说明/提示

数据范围及约定

对于全部数据,保证 1≤�≤501≤n≤50。

#include <bits/stdc++.h>
using namespace std;
#define lowbit(x) x&(-x)
#define int long long
#define INF 0x3f3f3f3f3f3f3f3finline int read()
{int x=0,f=1;char ch=getchar();while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}while (ch>='0'&&ch<='9'){x=x*10+ch-48;ch=getchar();}return x*f;
} int a[55],sum;signed main(){int n=read();for (int i=1;i<=n;++i){a[i]=read();sum+=a[i];}int l=read(),r=read();if (sum < l*n || sum>r*n){cout<<-1;return 0;}int l1=0,r1=0;for (int i=1;i<=n ; ++i){if (a[i] < l) l1+=l-a[i];if (a[i] > r) r1+=a[i] -r;}cout<<max(l1,r1);
}
A/B Problemhttps://www.luogu.com.cn/problem/P1480
题目描述
输入两个整数 �,�a,b,输出它们的商。
输入格式
两行,第一行是被除数,第二行是除数。
输出格式
一行,商的整数部分。
输入输出样例
输入 #1复制
10
2
输出 #1复制
5
说明/提示
0≤�≤1050000≤a≤105000,1≤�≤1091≤b≤109。
#include <bits/stdc++.h>
using namespace std;
#define lowbit(x) x&(-x)
#define int long long
#define INF 0x3f3f3f3f3f3f3f3finline int read()
{int x=0,f=1;char ch=getchar();while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}while (ch>='0'&&ch<='9'){x=x*10+ch-48;ch=getchar();}return x*f;
} char a[10000];
int c[10000],b,x;//  1515
//    15
//   101signed main(){cin>>a>>b;int len=strlen(a);for (int i=0; i<len ; ++i){a[i]-='0';}for (int i=0; i<len ; ++i){c[i]=(x*10 + a[i]) /b;x=(x*10 +a[i]) %b;}int l=0;while ( c[l]== 0 && l<len) l++;for (int i=l ; i<len ; ++i){cout<<c[i];}if (a[0]==0) cout<<0;
}

买礼物https://www.luogu.com.cn/problem/P1194

题目描述

又到了一年一度的明明生日了,明明想要买 �B 样东西,巧的是,这 �B 样东西价格都是 �A 元。

但是,商店老板说最近有促销活动,也就是:

如果你买了第 �I 样东西,再买第 �J 样,那么就可以只花 ��,�KI,J​ 元,更巧的是,��,�KI,J​ 竟然等于 ��,�KJ,I​。

现在明明想知道,他最少要花多少钱。

输入格式

第一行两个整数,�,�A,B。

接下来 �B 行,每行 �B 个数,第 �I 行第 �J 个为 ��,�KI,J​。

我们保证 ��,�=��,�KI,J​=KJ,I​ 并且 ��,�=0KI,I​=0。

特别的,如果 ��,�=0KI,J​=0,那么表示这两样东西之间不会导致优惠。

注意 ��,�KI,J​ 可能大于 �A。

输出格式

一个整数,为最小要花的钱数。

输入输出样例

输入 #1复制

1 1
0

输出 #1复制

1

输入 #2复制

3 3
0 2 4
2 0 2
4 2 0

输出 #2复制

7

说明/提示

样例解释 22。

先买第 22 样东西,花费 33 元,接下来因为优惠,买 1,31,3 样都只要 22 元,共 77 元。

(同时满足多个“优惠”的时候,聪明的明明当然不会选择用 44 元买剩下那件,而选择用 22 元。)

数据规模

对于 30%30% 的数据,1≤�≤101≤B≤10。

对于 100%100% 的数据,1≤�≤500,0≤�,��,�≤10001≤B≤500,0≤A,KI,J​≤1000。

2018.7.25新添数据一组

#include <bits/stdc++.h>
using namespace std;
#define lowbit(x) x&(-x)
#define int long long
#define INF 0x3f3f3f3f3f3f3f3finline int read()
{int x=0,f=1;char ch=getchar();while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}while (ch>='0'&&ch<='9'){x=x*10+ch-48;ch=getchar();}return x*f;
} const int N=1e5+5;struct edge{int from;int to;int w;
}e[250008];bool cmp(const edge& a,const edge& b){return a.w<b.w;
}int a,b,tot,f[10000];int find(int x){return f[x]==x?x:f[x]=find(f[x]);
}void unionn(int i,int j){f[find(i)]=find(j);
}signed main(){a=read(),b=read();
//	for (int i=1; i<=b; ++ i){
//		e[++tot].from=0;
//		e[tot].to=i;
//		e[tot].w=a;
//	}for (int i=1; i<=b; ++ i){for (int j=1; j<=b; ++ j){int m=read();if (m!=0){e[++tot].from=i;e[tot].to=j;e[tot].w=m;}}}sort(e+1,e+1+tot,cmp);int sum=0,cnt=0;for (int i=1;i<=b; ++i){f[i]=i;}for (int i=1; i<=tot; ++i){if (find(e[i].from) != find(e[i].to)){unionn(e[i].from,e[i].to);sum+=e[i].w;cnt++;}if (cnt==b-1) break;}if (b==1) cout<<a;else cout<<sum+a;
}

http://www.ppmy.cn/news/1360238.html

相关文章

解析 Go 编程语言数据类型:bool、整数、浮点数和字符串详细介绍

数据类型 数据类型是编程中的重要概念。数据类型指定了变量值的大小和类型。Go是静态类型的&#xff0c;这意味着一旦变量类型被定义&#xff0c;它只能存储该类型的数据。 基本数据类型 Go 有三种基本数据类型&#xff1a; bool&#xff1a;表示布尔值&#xff0c;要么是t…

MySQL中的高级查询

通过条件查询可以查询到符合条件的数据&#xff0c;但如同要实现对字段的值进行计算、根据一个或多个字段对查询结果进行分组等操作时&#xff0c;就需要使用更高级的查询&#xff0c;MySQL提供了聚合函数、分组查询、排序查询、限量查询、内置函数以实现更复杂的查询需求。接下…

9-5 E. DS图—图非0面积

题目描述 编程计算由"1"围成的下列图形的面积。面积计算方法是统计"1"所围成的闭合曲线中"0"点的数目。如图所示&#xff0c;在10*10的二维数组中&#xff0c;"1"围住了15个点&#xff0c;因此面积为15。 提示&#xff1a;queue 输入 …

PostgreSQL与MySQL,谁更胜一筹

前言 PostgreSQL与MySQL都是优秀的开源数据库。在日常学习中&#xff0c;新手可能接触最多的是MySql,但是实际工作中&#xff0c;两者的应用场景其实都很广。我之前的做过上网流量销售业务&#xff0c;用的是MySQL,现在接触广告业务&#xff0c;用的是pg数据库&#xff0c;每天…

计算任意两个日期之间天数 Matlab

tdatetime(today);%get今天日期t12002-04-01;mdatenum(t1-t1) %做差后是hour,转化为天数参考 matlab日期函数

寒假学习总结

目录 一、引言 寒假时间学习大致进度 二、学习内容概述 三、学习成果与收获 学习成果具体展现&#xff1a; 1.深搜广搜 2.栈 3.队列 4.链表 5.动态规划 6.并查集 7.记忆化搜索 8.二叉树 9.图 10.堆 11.寒假部分收录完成题目&#xff08;少数没有收录&#xff09…

《剑指Offer》笔记题解思路技巧优化_Part_6

《剑指Offer》笔记&题解&思路&技巧&优化_Part_6 &#x1f60d;&#x1f60d;&#x1f60d; 相知&#x1f64c;&#x1f64c;&#x1f64c; 相识&#x1f622;&#x1f622;&#x1f622; 开始刷题&#x1f7e1;1.LCR 168. 丑数—— 丑数&#x1f7e2;2. LCR 16…

信息学奥赛一本通1209:分数求和

1209&#xff1a;分数求和 时间限制: 1000 ms 内存限制: 65536 KB 提交数: 19111 通过数: 10647 【题目描述】 输入n个分数并对他们求和&#xff0c;并用最简形式表示。所谓最简形式是指&#xff1a;分子分母的最大公约数为11&#xff1b;若最终结果的分母为11&am…