浙江中医药大学第十二届大学生程序设计竞赛 部分题解

本文主要是介绍浙江中医药大学第十二届大学生程序设计竞赛 部分题解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Problem A. Jhadgre的C语言程序

helle 直接复制

Problem B. Wpremig的AH之战

博弈问题还没有学,待补

Problem C. Wpremig的三角形

没看这题,这题人出的也少,待补

Problem D. Jhadgre的梯子

链接:https://ac.nowcoder.com/acm/contest/333/D
来源:牛客网
 

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld

题目描述

陶陶摘了这么多年苹果,Jhadgre他也很想摘苹果。

这天Jhadgre趁着陶陶还没起床,决定先去把苹果摘了,现在Jhadgre知道树上有N个苹果以及每个苹果离地面的高度,当然机智的Jhadgre不会像陶陶一样只带一个30厘米的板凳,聪明的Jhadgre决定带一架梯子!这样就可以摘到所有苹果了。

现在Jhadgre告诉你他把手伸直的时候能够到达的最大高度,请你帮他算一下他需要带一架至少多高的梯子才能摘到所有苹果。假设他碰到苹果苹果就会掉下来。

输入描述:

第一行两个个整数N,L(1<=N,L<=100000)表示有N个苹果和Jhadgre把手伸直的时候能够到达的最大高度L。
接下去N个正整数a1,a2,...an,表示每个苹果离地面的高度。(1<=ai<=2147484649)

输出描述:

输出Jhadgre需要带的梯子的高度。若不需要梯子Jhadgre就能摘到所有苹果则输出0.

示例1

输入

复制

5 50
10 20 30 40 100

输出

复制

50

水题,注意long long  就行

#include<cstdio>
#include<iostream>
#include<fstream>
#include<algorithm>
#include<functional>
#include<cstring>
#include<string>
#include<cstdlib>
#include<iomanip>
#include<numeric>
#include<cctype>
#include<cmath>
#include<ctime>
#include<queue>
#include<stack>
#include<list>
#include<set>
#include<map>
using namespace std;
#define N 100000+5
#define rep(i,n) for(int i=0;i<n;i++)
#define sd(n) scanf("%d",&n)
#define sll(n) scanf("%lld",&n)
#define pd(n) scanf("%d\n",n)
#define pll(n) scanf("%lld\n",n)
#define MAX 26
typedef long long ll;
const ll mod=1e6;
ll a[N];
bool vis[N];
char c[]={'6','7','8','9','T','J','Q','K','A'};
int main(){ll n,l;cin>>n>>l;ll ans = l;for (int i = 0 ; i < n ; ++i){ll x;cin>>x;if (x >ans)ans = x;}cout<<ans-l<<endl;return 0;
}

 

Problem E. Jhadgre的合唱队形

不会,好像是树状数组+一些东西,待补

Problem F. Jhadgre的伤心地

链接:https://ac.nowcoder.com/acm/contest/333/F
来源:牛客网
 

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld

题目描述

Jhadgre为了他的女神,准备了一场盛大的告白,可惜却被女神毫不留情的拒绝。于是Jhadgre决定离开这个伤心之地。但是钱都被Jhadgre拿去准备告白了,剩下的钱并不够他买车票,只够他坐公交车。

Jhadgre所在城市的所有公交车站总体来说都在一条直线上,在这里有两种公交车,一种是全城公交,这种公交车在城市的任何一站都可以上下车,付了车费后,从当前站开始,最多可以向后坐5站(即从第i站上车,可以选择在第i+1,i+2,i+3,i+4,i+5站下车)。还有一种是区间公交,也就是可以在第X站上车,直到第Y站(X<Y),中途每一站都可以下车但不可以上车。所有公交车的上车费都是2元。

现在Jhadgre为了最快的逃离这个伤心地,他决定不管上哪种公交车,只要上去了,就一定坐到底再下车,中途不会下车,并且他现在所在的地点为第1站,他认为要到第N站以后的站,他才算彻底逃离这个伤心地。

现在Jhadgre想知道他手里的钱够不够逃离这个伤心地,你可以帮他计算一下他最少需要花多少钱才能离开这个伤心地吗?

输入描述:

只包含一组数据。
第一行一个整数N,意义如题(10<=N<=100)
接下去一行中共N个整数a1,a2,a3...aN,由空格隔开,ai表示第i站的区间公交能到达第ai站,保证(i<ai)

输出描述:

Jhadgre最少需要花的钱

示例1

输入

复制

10
7 11 4 5 6 7 8 9 10 11

输出

复制

4

说明

以下给出两种乘车方案:(1) Jhadgre在第1站选择上全城公交,到达第6站,付2元钱,接着在第6站选择上全城公交,到达第11站,共付4元钱。(2) Jhadgre在第1站选择上区间公交,到达第7站,付2元钱,接着在第7站选择上全城公交,到达第12站,共付4元钱。

 

分析:这题一开始以为是DP,但后面的状态不好由前面所推出,所以直接递归就可以,从前面往后推(f【i】——》f【a【i】】或f【i+5】),推出哪一个先到就ok了

         

 
#include<cstdio>
#include<iostream>
#include<fstream>
#include<algorithm>
#include<functional>
#include<cstring>
#include<string>
#include<cstdlib>
#include<iomanip>
#include<numeric>
#include<cctype>
#include<cmath>
#include<ctime>
#include<queue>
#include<stack>
#include<list>
#include<set>
#include<map>
using namespace std;
#define N 100000+5
#define rep(i,n) for(int i=0;i<n;i++)
#define sd(n) scanf("%d",&n)
#define sll(n) scanf("%lld",&n)
#define pd(n) scanf("%d\n",n)
#define pll(n) scanf("%lld\n",n)
#define MAX 26
typedef long long ll;
const ll mod=1e6;
ll a[N];
bool vis[N];
ll n;
char c[]={'6','7','8','9','T','J','Q','K','A'};
int f(int x)
{if(x>n) return 0;return min(f(a[x]),f(x+5))+2;}
int main(){cin>>n;for(int i=1;i<=n;i++){cin>>a[i];}cout<<f(1)<<endl;return 0;
}

Problem G. Wpremig的称球问题

 

这题在我看完所有题的都不会的情况下,尝试写了写,多谢百度的公式,

需要写一个大数,但我又犯了不认真看题的毛病了,输出Yes我输出YES了 哎

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.InputMismatchException;
import java.util.Scanner;
import java.util.StringTokenizer;public class Main {static Scanner in = new Scanner(System.in);public static void main(String args[])throws IOException  {while(in.hasNext()){int n=in.nextInt();int m=in.nextInt();if(n<=2){System.out.println("NO");continue;}BigDecimal x=new BigDecimal(n);BigDecimal a=new BigDecimal(3);BigDecimal b=new BigDecimal(2);BigDecimal bd = new BigDecimal(3);bd = bd.pow(m); bd=bd.subtract(a);bd=bd.divide(b);if(bd.compareTo(x)>=0){System.out.println("YES");}elseSystem.out.println("NO");}}}

一种不需要大数的写法:我们最后比较次数,我们发现3^15=14 348 907,超过了数据范围了,所以我们只要枚举次数即可

#include<bits/stdc++.h>
using namespace std;
int n,m,ans1,ans2;
int main()
{while(scanf("%d%d",&n,&m)!=-1){if(n==2) {cout<<"No"<<endl;continue;}   long long k=3;int j=1;for(j=2;j<=15;j++){k=k*3;if((k-3)/2>=n) break;}if(j<=m) cout<<"Yes"<<endl;else cout<<"No"<<endl;}return 0;}

Problem H. Jhadgre的回家之路

链接:https://ac.nowcoder.com/acm/contest/333/H
来源:牛客网
 

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld

题目描述

Jhadgre作为一个热(xiang)爱(dang)学(xian)习(yu)的好同学,每天都在掰着手指头等周末。

今天终于到了周五,等到下午六点他就又可以在寝室做两天咸鱼了。但是Jhadgre上午上完课把钥匙丢在了教室,被Wpremig捡到了,所以他必须先去Wpremig手里取得钥匙才能回寝室。

于是机智的Wpremig为了方便Jhadgre拿钥匙,他去配了好多把Jhadgre的钥匙,分别放在不同的地方 (厉害了小老弟)。

现在Jhadgre想要尽快的回到寝室中,他需要取得任意一把钥匙才能够回寝室,请你帮他计算出回寝室的最短路程。

学校可以背看做是一个n * n的网格,其中一些路有障碍,钥匙和家所在的地方也可以看做是道路,可以通过。Jhadgre可以在任意一条道路中选择上下左右四个方向移动,一次移动算作一步。

输入描述:

多组数据,T<=50,对于每组数据有:
第一行有两个整数n,m。
接下去n行每行m个字符,代表学校地图。
其中, '.'表示道路,'#'表示障碍物,'L'表示Jhadgre所在的位置,'W'表示钥匙的位置,'Q'表示寝室的位置。题目保证最少有一条路可以拿到钥匙并且回到寝室。

输出描述:

Jhadgre回寝室需要走的最少步数。

示例1

输入

复制

8 10
W....#.#W#
..#..#...#
...Q##.#.#
##........
..##.#..##
..........
##..#...##
###..L....

输出

复制

17

分析:

L->W->Q,一开始想遍历bfs全部Q->L和Q->W,但是超时,然后优化了一下,一L和Q为起点两次bfs全部的图,得到每一次到达w的距离,枚举全部比较即可

#include<bits/stdc++.h>
using namespace std;
int n,m,ans1,ans2;
char mapp[2005][2005];
int vis[2005][2005]={0};
int dx[4]={-1,1,0,0},dy[4]={0,0,1,-1};
int dis1[2005][2005];
int dis2[2005][2005];
struct node
{int x,y,step;
}a,b;
int bfs1(int x1,int y1)
{memset(vis,0,sizeof(vis));queue<node>q;a.x=x1;a.y=y1;vis[a.x][a.y]=1;a.step=0;q.push(a);int i=0;while(!q.empty()){a=q.front();q.pop();for(int i=0;i<4;i++){b.x=a.x+dx[i];b.y=a.y+dy[i];if(b.x>=0&&b.x<n&&b.y>=0&&b.y<m&&mapp[b.x][b.y]!='#'&&!vis[b.x][b.y]){vis[b.x][b.y]=1;dis1[b.x][b.y]=a.step+1;b.step=a.step+1;q.push(b);}}}return 0;}
int bfs2(int x1,int y1)
{memset(vis,0,sizeof(vis));queue<node>q;a.x=x1;a.y=y1;vis[a.x][a.y]=1;a.step=0;q.push(a);while(!q.empty()){a=q.front();q.pop();for(int i=0;i<4;i++){b.x=a.x+dx[i];b.y=a.y+dy[i];if(b.x>=0&&b.x<n&&b.y>=0&&b.y<m&&mapp[b.x][b.y]!='#'&&!vis[b.x][b.y]){vis[b.x][b.y]=1;b.step=a.step+1;dis2[b.x][b.y]=b.step;q.push(b);}}}return 0;}vector<node>v;
int main()
{int i,j;while(scanf("%d%d",&n,&m)!=EOF){int x,y;int sx1,sy1,sx2,sy2;for(i=0;i<n;i++){scanf("%s",&mapp[i]);for(int j=0;j<m;j++){if(mapp[i][j]=='L'){sx1=i;sy1=j;}else if(mapp[i][j]=='Q'){sx2=i;sy2=j;}else if(mapp[i][j]=='W'){node t;t.x=i;t.y=j;v.push_back(t);}}}int minn3=1e9;;memset(dis1,0,sizeof(dis1));memset(dis2,0,sizeof(dis2));bfs1(sx1,sy1);bfs2(sx2,sy2);for(int i=0;i<v.size();i++){minn3=min(dis1[v[i].x][v[i].y]+dis2[v[i].x][v[i].y],minn3);}v.clear();cout<<minn3<<endl;}return 0;}

Problem I. Jhadgre的小饼干

链接:https://ac.nowcoder.com/acm/contest/333/I
来源:牛客网
 

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld

题目描述

最近Jhadgre拿到了一个系列表情包,他很高兴,于是他给每个关系好的女性好友都送了一盒饼干外带这一套表情包。

 

结果让他惊呆了,竟然真的有女孩子答应他........再来一盒(不然你以为?)

当然也有人回复一些其他的消息...唯独没有答应做他女朋友的人。

Jhadgre很伤心,但是作为一个有原则的人,既然答应了送别人小饼干,那就必须要给!

所有人的回复都由大写字母,小写字母与','组成,占一行,Jhadgre认为只要其中包含了连续的10个小写字母"zailaiyihe"就意味着这个人想要再来一盒。

现在Jhadgre准备给每一个想要“再来一盒”的人买一盒小饼干,他想知道总共需要买几盒小饼干?

输入描述:

第一行一个整数N,表示有N个人回复(1<=N<=1000)
接下去N行每行都是一个人的回复,由大写字母,小写字母与','组成。
(数据保证每行字符不超过1000个)

输出描述:

一个整数表示Jhadgre需要买几盒小饼干

示例1

输入

复制

3
Bu,xing
wokeyizailaiyihe
no

输出

复制

1

水题

#include<cstdio>
#include<iostream>
#include<fstream>
#include<algorithm>
#include<functional>
#include<cstring>
#include<string>
#include<cstdlib>
#include<iomanip>
#include<numeric>
#include<cctype>
#include<cmath>
#include<ctime>
#include<queue>
#include<stack>
#include<list>
#include<set>
#include<map>
using namespace std;
#define N 100000+5
#define rep(i,n) for(int i=0;i<n;i++)
#define sd(n) scanf("%d",&n)
#define sll(n) scanf("%lld",&n)
#define pd(n) scanf("%d\n",n)
#define pll(n) scanf("%lld\n",n)
#define MAX 26
typedef long long ll;
const ll mod=1e6;
ll a[N];
bool vis[N];
char c[]={'6','7','8','9','T','J','Q','K','A'};
int main(){ll n;cin>>n;int m=0;while(n--){string s;cin>>s;if(s.find("zailaiyihe")!=-1){m++;}}cout<<m<<endl;return 0;
}

Problem J. Jhadgre爬楼梯

链接:https://ac.nowcoder.com/acm/contest/333/J
来源:牛客网
 

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld

题目描述

继上次Jhadgre在楼梯上跳台阶玩了很久之后,他获得了一个很强(la)力(ji)的能力,那就是上楼梯的时候可以跨任意偶数级台阶....

今天上完课,Jhadgre又开始了他的跳台阶之旅,现在他想知道跳到第N级台阶有多少种方案数。

P.S.Jhadgre从楼梯外也就是第0级开始跳,并且依旧可以选择跳一级

输入描述:

多组数据(<=100组),每组数据包含一个整数N(2<=N<=10000)

输出描述:

对于每组数据包含一个整数表示跳到第N级台阶的方案数(答案对100000007取模)

示例1

输入

复制

3
4 

输出

复制

3
6

分析:递归题,不过我一开始看错题了,以为它可以跳到任意偶数位置,然后就自闭了,后来发现他是跨越偶数阶台阶,

递归就行,每一个位置可以由他的前一个,和前面相差偶数个位置得来。

 
#include<cstdio>
#include<iostream>
#include<fstream>
#include<algorithm>
#include<functional>
#include<cstring>
#include<string>
#include<cstdlib>
#include<iomanip>
#include<numeric>
#include<cctype>
#include<cmath>
#include<ctime>
#include<queue>
#include<stack>
#include<list>
#include<set>
#include<map>
using namespace std;
#define N 100000+5
#define rep(i,n) for(int i=0;i<n;i++)
#define sd(n) scanf("%d",&n)
#define sll(n) scanf("%lld",&n)
#define pd(n) scanf("%d\n",n)
#define pll(n) scanf("%lld\n",n)
#define MAX 26
typedef long long ll;
const ll mod=100000007;
ll a[N];
bool vis[N];
int dp[N];
int main(){int n;dp[0]=1;for(int i=1;i<=10005;i++) {dp[i]=(dp[i]+dp[i-1])%mod;for(int j=i-2;j>=0;j-=2)dp[i]=(dp[i]+dp[j])%mod;}while(scanf("%d",&n)!=-1){cout<<dp[n]<<endl;}return 0;
}

Problem K. Jhadgre的&pi;

BBP公式,待补

Problem L. Wpremig's Niuniu

没读懂,待补

Problem M. Wpremig和Jhadgre的藏宝图

不会,待补

 

这篇关于浙江中医药大学第十二届大学生程序设计竞赛 部分题解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/379518

相关文章

Javascript高级程序设计(第四版)--学习记录之变量、内存

原始值与引用值 原始值:简单的数据即基础数据类型,按值访问。 引用值:由多个值构成的对象即复杂数据类型,按引用访问。 动态属性 对于引用值而言,可以随时添加、修改和删除其属性和方法。 let person = new Object();person.name = 'Jason';person.age = 42;console.log(person.name,person.age);//'J

大学湖北中医药大学法医学试题及答案,分享几个实用搜题和学习工具 #微信#学习方法#职场发展

今天分享拥有拍照搜题、文字搜题、语音搜题、多重搜题等搜题模式,可以快速查找问题解析,加深对题目答案的理解。 1.快练题 这是一个网站 找题的网站海量题库,在线搜题,快速刷题~为您提供百万优质题库,直接搜索题库名称,支持多种刷题模式:顺序练习、语音听题、本地搜题、顺序阅读、模拟考试、组卷考试、赶快下载吧! 2.彩虹搜题 这是个老公众号了 支持手写输入,截图搜题,详细步骤,解题必备

LeetCode11. 盛最多水的容器题解

LeetCode11. 盛最多水的容器题解 题目链接: https://leetcode.cn/problems/container-with-most-water 示例 思路 暴力解法 定住一个柱子不动,然后用其他柱子与其围住面积,取最大值。 代码如下: public int maxArea1(int[] height) {int n = height.length;int

android一键分享功能部分实现

为什么叫做部分实现呢,其实是我只实现一部分的分享。如新浪微博,那还有没去实现的是微信分享。还有一部分奇怪的问题:我QQ分享跟QQ空间的分享功能,我都没配置key那些都是原本集成就有的key也可以实现分享,谁清楚的麻烦详解下。 实现分享功能我们可以去www.mob.com这个网站集成。免费的,而且还有短信验证功能。等这分享研究完后就研究下短信验证功能。 开始实现步骤(新浪分享,以下是本人自己实现

【计算机组成原理】部分题目汇总

计算机组成原理 部分题目汇总 一. 简答题 RISC和CICS 简要说明,比较异同 RISC(精简指令集)注重简单快速的指令执行,使用少量通用寄存器,固定长度指令,优化硬件性能,依赖软件(如编译器)来提升效率。 CISC(复杂指令集)包含多样复杂的指令,能一条指令完成多步操作,采用变长指令,减少指令数但可能增加执行时间,倾向于硬件直接支持复杂功能减轻软件负担。 两者均追求高性能,但RISC

LeetCode:经典题之141、142 题解及延伸

系列目录 88.合并两个有序数组 52.螺旋数组 567.字符串的排列 643.子数组最大平均数 150.逆波兰表达式 61.旋转链表 160.相交链表 83.删除排序链表中的重复元素 389.找不同 1491.去掉最低工资和最高工资后的工资平均值 896.单调序列 206.反转链表 92.反转链表II 141.环形链表 142.环型链表 目录 系列目录141. 环形链表常量因子 1

C语言 | Leetcode C语言题解之第188题买卖股票的最佳时机IV

题目: 题解: int maxProfit(int k, int* prices, int pricesSize) {int n = pricesSize;if (n == 0) {return 0;}k = fmin(k, n / 2);int buy[k + 1], sell[k + 1];memset(buy, 0, sizeof(buy));memset(sell, 0, size

6月21日训练 (东北林业大学)(个人题解)

前言:   这次训练是大一大二一起参加的训练,总体来说难度是有的,我和队友在比赛时间内就写出了四道题,之后陆陆续续又补了了三道题,还有一道题看了学长题解后感觉有点超出我的能力范围了,就留给以后的自己吧。话不多说,上正文。 正文:   Problem:A 幸运数字: #include <bits/stdc++.h>using namespace std;int sum,ans;in

LeetCode:经典题之389 题解与延伸

系列目录 88.合并两个有序数组 52.螺旋数组 567.字符串的排列 643.子数组最大平均数 150.逆波兰表达式 61.旋转链表 160.相交链表 83.删除排序链表中的重复元素 389.找不同 1491.去掉最低工资和最高工资后的工资平均值 896.单调序列 206.反转链表 92.反转链表II 141.环形链表 142.环型链表 目录 系列目录389.找不同哈希表

大学生自救数据结构与算法(py实现)——01递归

目录 目录 递归 基本概念 工作原理 基本要素 优点 缺点 实现技巧 实例解析:计算阶乘 斐波那契数列 高效的斐波那契数列 python中的最大递归深度 二分查找 基本原理 性能分析 优化与变体 线性递归  元素序列的递归求和 二路递归 二路递归的基本概念 典型应用 工作原理 多重递归  示例:计算卡特兰数(Catalan Number) 尾递