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

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

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

相关文章

Mysql删除几亿条数据表中的部分数据的方法实现

《Mysql删除几亿条数据表中的部分数据的方法实现》在MySQL中删除一个大表中的数据时,需要特别注意操作的性能和对系统的影响,本文主要介绍了Mysql删除几亿条数据表中的部分数据的方法实现,具有一定... 目录1、需求2、方案1. 使用 DELETE 语句分批删除2. 使用 INPLACE ALTER T

poj 2976 分数规划二分贪心(部分对总体的贡献度) poj 3111

poj 2976: 题意: 在n场考试中,每场考试共有b题,答对的题目有a题。 允许去掉k场考试,求能达到的最高正确率是多少。 解析: 假设已知准确率为x,则每场考试对于准确率的贡献值为: a - b * x,将贡献值大的排序排在前面舍弃掉后k个。 然后二分x就行了。 代码: #include <iostream>#include <cstdio>#incl

C++ | Leetcode C++题解之第393题UTF-8编码验证

题目: 题解: class Solution {public:static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num &

C语言 | Leetcode C语言题解之第393题UTF-8编码验证

题目: 题解: static const int MASK1 = 1 << 7;static const int MASK2 = (1 << 7) + (1 << 6);bool isValid(int num) {return (num & MASK2) == MASK1;}int getBytes(int num) {if ((num & MASK1) == 0) {return

每日一题|牛客竞赛|四舍五入|字符串+贪心+模拟

每日一题|四舍五入 四舍五入 心有猛虎,细嗅蔷薇。你好朋友,这里是锅巴的C\C++学习笔记,常言道,不积跬步无以至千里,希望有朝一日我们积累的滴水可以击穿顽石。 四舍五入 题目: 牛牛发明了一种新的四舍五入应用于整数,对个位四舍五入,规则如下 12345->12350 12399->12400 输入描述: 输入一个整数n(0<=n<=109 ) 输出描述: 输出一个整数

C - Word Ladder题解

C - Word Ladder 题解 解题思路: 先输入两个字符串S 和t 然后在S和T中寻找有多少个字符不同的个数(也就是需要变换多少次) 开始替换时: tips: 字符串下标以0开始 我们定义两个变量a和b,用于记录当前遍历到的字符 首先是判断:如果这时a已经==b了,那么就跳过,不用管; 如果a大于b的话:那么我们就让s中的第i项替换成b,接着就直接输出S就行了。 这样

笔记整理—内核!启动!—kernel部分(2)从汇编阶段到start_kernel

kernel起始与ENTRY(stext),和uboot一样,都是从汇编阶段开始的,因为对于kernel而言,还没进行栈的维护,所以无法使用c语言。_HEAD定义了后面代码属于段名为.head .text的段。         内核起始部分代码被解压代码调用,前面关于uboot的文章中有提到过(eg:zImage)。uboot启动是无条件的,只要代码的位置对,上电就工作,kern

C语言程序设计(数据类型、运算符与表达式)

一、C的数据类型 C语言提供的数据类型: 二、常量和变量 2.1常量和符号常量 在程序运行过程中,其值不能被改变的量称为常量。 常量区分为不同的类型: 程序中用#define(预处理器指令)命令行定义变量将代表常量,用一个标识符代表一个常量,称为符合常量。 2.2变量 变量代表内存中具有特定属性的一个存储单元,用来存放数据,在程序运行期间,这些值是可以 改变的。 变

【秋招笔试】9.07米哈游秋招改编题-三语言题解

🍭 大家好这里是 春秋招笔试突围,一起备战大厂笔试 💻 ACM金牌团队🏅️ | 多次AK大厂笔试 | 大厂实习经历 ✨ 本系列打算持续跟新 春秋招笔试题 👏 感谢大家的订阅➕ 和 喜欢💗 和 手里的小花花🌸 ✨ 笔试合集传送们 -> 🧷春秋招笔试合集 🍒 本专栏已收集 100+ 套笔试题,笔试真题 会在第一时间跟新 🍄 题面描述等均已改编,如果和你笔试题看到的题面描述

C语言程序设计(选择结构程序设计)

一、关系运算符和关系表达式 1.1关系运算符及其优先次序 ①<(小于) ②<=(小于或等于) ③>(大于) ④>=(大于或等于 ) ⑤==(等于) ⑥!=(不等于) 说明: 前4个优先级相同,后2个优先级相同,关系运算符的优先级低于算术运算符,关系运算符的优先级高于赋值运算符 1.2关系表达式 用关系运算符将两个表达式(可以是算术表达式或关系表达式,逻辑表达式,赋值表达式,字符