寒假训练——vj题解
- B - B
M 算日期
M 是一位数学高手,今天他迎来了 Kita 的挑战。Kita 想让 BM 算出这几年内有多少个闰年。
BM 觉得这问题实在太简单了,于是 Kita 加大了难度。
他先给出第一个年份,再给出一个整数。Kita 要 BM 进行加法运算后得到第二个年份,然后算出这两个年份之间有多少个闰年。
然而,BM 对于大于 9999
的年份十分恐惧,于是他耗尽力气,不仅将年份大于 9999
的部分删除了,并且利用多余的部分使这个年份更小了。
例如,如果 Kita 给出的第一个年份为 9997
,整数为 3
,进行加法运算后得到的年份为 10000
,大于 9999
的部分为 1
年,所以得到的第二个年份为 9999−1=9998
,BM 最终得到的年份区间就是 [9997,9998]
。
在进行了如上操作后,BM 筋疲力尽,甚至没有力气确定自己最终的年份区间是什么。为了守护他的数学高手的称号,请您帮助他算出最终的答案。
简单的模拟
点击查看代码
#include <bits/stdc++.h>
using namespace std;
bool isLeapYear(int year) {
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
return true;
} else {
return false;
}
}
int main ()
{
int n,a,b;
int ans=0;
int res=0;
int sum=0;
cin>>n;
for(int i=1;i<=n;i++){
cin>>a>>b;
if(b<0)
sum=a-abs(b);
else
sum=a+b;
if(sum>=10000)
{
res=sum-9999;
sum=9999-res;
if(sum>=a)
{
for(int i=a;i<=sum;i++){
if(isLeapYear(i))
ans++;
}
cout<<ans<<endl;
ans=0;
}else
{
for(int i=a;i>=sum;i--){
if(isLeapYear(i))
ans++;
}
cout<<ans<<endl;
ans=0;
}
}else
{
if(sum>=a)
{
for(int i=a;i<=sum;i++){
if(isLeapYear(i))
ans++;
}
cout<<ans<<endl;
ans=0;
}
else if(sum<a)
{
for(int i=a;i>=sum;i--){
if(isLeapYear(i))
ans++;
}
cout<<ans<<endl;
ans=0;
}
}
}
return 0;
}
* E - E
BM 充饥
到了年末,BM 的积蓄所剩无几,但他又很想吃 KFC,请您帮助他画 "KFC" 充饥吧!
签到题,注意对齐和\这个符号需要两次
点击查看代码
#include <bits/stdc++.h>
using namespace std;
int main ()
{
string a;
cin>>a;
cout<<" __ _____"<<endl;
cout<<"| | ___/ ____\\____"<<endl;
cout<<"| |/ /\\ __\\/ ___\\"<<endl;
cout<<"| < | | \\ \\___"<<endl;
cout<<"|__|_ \\ |__| \\___ >"<<endl;
cout<<" \\/ \\/"<<endl;
}
* H - H
sueh- Draw Progress
According to scientific research, in the waiting process, if the progress bar can be used to show the progress, the waiting person will be more patient.
Therefore, Hsueh- needs you to help him draw a progress bar in command line.
The specific progress bar style can be obtained by observing the sample.
后面那个数除前面那个数,一共是前面那个数的总数“-”为第一个数-第二个数,先输出第二个数相同的#
点击查看代码
#include <bits/stdc++.h>
using namespace std;
int main ()
{
int n;
double sum;
cin>>n;
int a,b;
for(int i=1;i<=n;i++){
cin>>a>>b;
sum=1.0*b/a;
cout<<"[";
for(int i=1;i<=b;i++){
cout<<"#";
}
for(int i=1;i<=a-b;i++)
cout<<"-";
cout<<"]";
cout<<" "<<(int)(sum*100)<<"%"<<endl;
}
}
* I - I
众所周知 bm 学姐喜欢旅游。这一天他来到了著名的杭师大景点勤园 13-406。该景点中有四个著名的观景台分为 A,B,C,D。
如果只去过上述一个观景台,输出 "Oh dear!!"(没有引号)。
如果去过两个,输出 "BaoBao is good!!"(没有引号)。
如果去过三个,输出 "Bao Bao is a SupEr man///!"(没有引号)。
如果全都去过,输出 "Oh my God!!!!!!!!!!!!!!!!!!!!!"(没有引号)。
如果一个都没去过,输出 "Bao Bao is so Zhai......"(没有引号)。
依旧是模拟,考虑全部情况
点击查看代码
#include <bits/stdc++.h>
using namespace std;
int solve (int x)
{
int sum =0 ;
while(x!=0)
{
sum+=x%10;
x=x/10;
}
if(sum==6||sum>=16)
return 1;
else
return 0;
}
int main ()
{
int sum=0;
int a,b,c,d;
cin>> a >> b >>c >>d;
sum+=solve(a)+solve(b)+
solve(c)+solve(d);
if(sum==0)
{
cout<<"Bao Bao is so Zhai......";
}else if(sum==1)
{
cout<<"Oh dear!!";
}else if(sum==2)
{
cout<<"BaoBao is good!!";
}else if(sum==3)
{
cout<<"Bao Bao is a SupEr man///!";
}else if(sum==4)
{
cout<<"Oh my God!!!!!!!!!!!!!!!!!!!!!";
}
return 0;
}
* J -J
大扫除
你是一个住在大豪宅里的富二代「聘请的老青结清洁工」。
你需要给这座高 n
层楼的豪宅清理垃圾。
已知字符 "." 表示没有垃圾,其他任何字符都表示垃圾,每种字符表示一种垃圾。
要求计算整个豪宅每层楼垃圾种类的总和。
这段代码首先读取输入的测试用例数量 T。然后,对于每个测试用例,它会读取楼层数 n,并依次读取每层楼的垃圾情况。对于每层楼,它会将垃圾字符加入到一个无序集合 trashSet 中,确保只统计每层楼的垃圾种类数。然后,将 trashSet 的大小加到 totalTrashTypes 中,并清空 trashSet。最后,输出 totalTrashTypes。
点击查看代码
#include <iostream>
#include <unordered_set>
using namespace std;
int countTrashTypes(int n) {
int totalTrashTypes = 0;
unordered_set<char> trashSet;
for (int i = 0; i < n; i++) {
string floor;
cin >> floor;
for (char c : floor) {
if (c != '.') {
trashSet.insert(c);
}
}
totalTrashTypes += trashSet.size();
trashSet.clear();
}
return totalTrashTypes;
}
int main() {
int T;
cin >> T;
for (int i = 0; i < T; i++) {
int n;
cin >> n;
int totalTrashTypes = countTrashTypes(n);
cout << totalTrashTypes << endl;
}
return 0;
}
* D -D
Palindrome Hard Problem
个问题可以使用动态规划来解决。我们可以定义一个二维数组dp,其中dp[i][j]表示从第i个字符串到第j个字符串能够形成的回文串的最大数量。
首先,我们可以初始化dp[i][i]为1,因为单个字符串本身就是一个回文串。
然后,我们可以遍历字符串的长度l,从2开始到字符串的长度。对于每个长度l,我们遍历字符串的起始位置i,计算dp[i][i+l-1]的值。
对于dp[i][i+l-1],我们可以考虑两种情况:
如果第i个字符和第i+l-1个字符相等,那么dp[i][i+l-1]的值可以为dp[i+1][i+l-2] + 2。这是因为如果第i+1个字符到第i+l-2个字符能够形成回文串,并且第i个字符和第i+l-1个字符相等,那么就可以将这两个字符加入到回文串中,所以回文串的长度加2。
如果第i个字符和第i+l-1个字符不相等,那么dp[i][i+l-1]的值可以为max(dp[i+1][i+l-1], dp[i][i+l-2])。这是因为我们可以选择舍弃第i个字符或者舍弃第i+l-1个字符,来使得回文串的数量最大化。
最后,dp[0][n-1]就是我们所求的终极串能够分割出的回文串的最大数量。
点击查看代码
#include <iostream>
#include <vector>
#include <string>
using namespace std;
int countPalindromes(int n, vector<string>& strings) {
int m = strings[0].length();
vector<vector<int>> dp(n, vector<int>(n, 0));
for (int i = 0; i < n; i++) {
dp[i][i] = 1;
}
for (int l = 2; l <= m; l++) {
for (int i = 0; i < n - l + 1; i++) {
int j = i + l - 1;
if (strings[i] == strings[j]) {
dp[i][j] = dp[i + 1][j - 1] + 2;
} else {
dp[i][j] = max(dp[i + 1][j], dp[i][j - 1]);
}
}
}
return dp[0][n - 1];
}
int main() {
int n;
cin >> n;
vector<string> strings(n);
for (int i = 0; i < n; i++) {
cin >> strings[i];
}
int result = countPalindromes(n, strings);
cout << result << endl;
return 0;
}
* K - K
words Find Kth Element
Hello, guys. I am Kwords. I prepared a problem for the contest invited by Hsueh-.
Due to I was very boring, I generate n
arrays, labeled from 1
to n
. And then I will give q
queries.
In each queries:
First, I will give a interger m
, and then m
different intergers.
You need to merge the arrays pointed to by these m
labels which I given.
Then, I will give a interger k
.
You need to answer me, what is the k
-th
smallest number in the combined array.
It is attention that, each query is independent. It means that the array merging operation of a single query will not affect other queries.
点击查看代码
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main() {
int n;
cin >> n;
vector<vector<int>> arrays(n);
for (int i = 0; i < n; i++) {
int m;
cin >> m;
arrays[i].resize(m);
for (int j = 0; j < m; j++) {
cin >> arrays[i][j];
}
}
int q;
cin >> q;
for (int i = 0; i < q; i++) {
int querySize;
cin >> querySize;
vector<int> indices(querySize);
for (int j = 0; j < querySize; j++) {
cin >> indices[j];
}
int k;
cin >> k;
vector<int> mergedArray;
for (int j = 0; j < querySize; j++) {
mergedArray.insert(mergedArray.end(), arrays[indices[j] - 1].begin(), arrays[indices[j] - 1].end());
}
sort(mergedArray.begin(), mergedArray.end());
cout << mergedArray[k - 1] << endl;
}
return 0;
}
寒假训练——vj题解的更多相关文章
- FJUT2017寒假训练二题解
A题 题意:让你找出唯一的一个四位数,满足对话时的要求. 思路:因为是4位数,可以直接从1000-9999遍历一遍,判断是否有唯一的数能满足所有条件,如果不是唯一的或者没有满足条件的数就输出Not s ...
- HRBUST - 2347 - 递归画图 - vj大一上寒假训练2.11
其他题可由本题变形得到. 思路:利用坐标dfs搜索. 注意:1,初始化.2,坐标实时更新(x,y) 代码: #include<iostream> #include<cstdio> ...
- C - Reduced ID Numbers 寒假训练
T. Chur teaches various groups of students at university U. Every U-student has a unique Student Ide ...
- FZU ICPC 2020 寒假训练 6 —— 字符串处理
P1603 斯诺登的密码 题目描述 2013年X月X日,俄罗斯办理了斯诺登的护照,于是他混迹于一架开往委内瑞拉的飞机.但是,这件事情太不周密了,因为FBI的间谍早已获悉他的具体位置--但这不是最重要的 ...
- FZU ICPC 2020 寒假训练 5 —— 排序
P1177 [模板]快速排序 题目描述 利用快速排序算法将读入的 N 个数从小到大排序后输出.快速排序是信息学竞赛的必备算法之一.对于快速排序不是很了解的同学可以自行上网查询相关资料,掌握后独立完成. ...
- FZU ICPC 2020 寒假训练 4 —— 模拟(二)
P1056 排座椅 题目描述 上课的时候总会有一些同学和前后左右的人交头接耳,这是令小学班主任十分头疼的一件事情.不过,班主任小雪发现了一些有趣的现象,当同学们的座次确定下来之后,只有有限的 D 对同 ...
- FZU ICPC 2020 寒假训练 4 —— 模拟(一)
P1042 乒乓球 题目背景 国际乒联现在主席沙拉拉自从上任以来就立志于推行一系列改革,以推动乒乓球运动在全球的普及.其中11分制改革引起了很大的争议,有一部分球员因为无法适应新规则只能选择退役.华华 ...
- FZU ICPC 2020 寒假训练 3
P1308 统计单词数 题目描述 一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中出现的次数.现在,请你编程实现这一功能,具体要求是:给定一 ...
- 寒假训练第九场 Brocard Point of a Triangle
题意:求布洛卡点坐标 思路:直接利用布洛卡点的性质.http://pan.baidu.com/s/1eQiP76E #include<cstdio> #include<cstring ...
- FJUT寒假作业涨姿势题解
题意非常简单易懂,对于涨姿势0,数据非常小,比较容易想到的是直接循环暴力解题完成任务.把数据放入数组arr,循环i,j控制所有区间算和.结果记入vis. 到了涨姿势1,2,3,我们观察数据变化,发现数 ...
随机推荐
- mysql忘记密码找回的方法
mysql忘记密码找回的方法: 在找回之前需要对 --skip-networking 参数进行了解 --skip-grant-tables: 关闭mysql验证模块 同时还需要关闭远程连接(避免他人连 ...
- 7.18考试总结(NOIP模拟19)[u·v·w]
我们不是狼,我们只是长着獠牙的羊...... 前言 我真 TM 爱死 \(\frac{1}{4}\) 了. 老实说,这套题是真恶心,第一题还有一点思路,到了后面是一点都搞不定了. 总的来说,主要原因是 ...
- 基于ReAct机制的AI Agent
当前,在各个大厂纷纷卷LLM的情况下,各自都借助自己的LLM推出了自己的AI Agent,比如字节的Coze,百度的千帆等,还有开源的Dify. 你是否想知道其中的原理?是否想过自己如何实现一套AI ...
- Apache 服务搭建
Apache 一.了解apache Apache(或httpd)是Internet上使用最多的Web服务器技术之一,使用的传输协议是http(Hypertext Transfer Protocol), ...
- python-使用pyecharts绘制各省份985学校数量图
1.环境 代码运行环境:python3.7 相关的库:pyecharts 1.7.1 代码编辑器:visual studio code 2.目的 通过使用pyecharts库,来绘制全国各省985高校 ...
- nfs笔记整理
NFS---共享存储系统 #network file system 网络文件系统 #NFS主要使用在局域网下,让不同的主机之间可以共享文件.或者目录数据.主要用于linux系统上实现文件共享的一种 ...
- == 和 equals 的区别是什么
== : 它的作用是判断两个对象的地址是不是相等.即,判断两个对象是不是同一个对象.(基本数据类型 == 比较的是值,引用数据类型 == 比较的是内存地址) equals() : 它的作用也是判断两个 ...
- 判断URL是否编码,编码后的sign对签名和验签都有影响,导致验签不通过
判断URL是否编码,编码后的sign对签名和验签都有影响,导致验签不通过如果含有 + %符号无法判断, 否则判断不准或报错 Exception in thread "main" j ...
- SpringBoot指标监控功能
SpringBoot指标监控功能 随时查看SpringBoot运行状态,将状态以josn格式返回 添加Actuator功能 Spring Boot Actuator可以帮助程序员监控和管理Spring ...
- Springboot3.0+spring6.0+JDK17+配置jsp和打war包
由于某些缘故,公司的产品需要升级,但并不希望花费大量时间重写前端代码(原来的就不是前后分离的).所以虽然spring和springboot都升级为最新的版本,但是依然还是需要支持jsp,并继续用打包为 ...