郑州轻工业大学第三次周赛题目总结

2023-12-30 04:40

本文主要是介绍郑州轻工业大学第三次周赛题目总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目总链接:

http://acm.zzuli.edu.cn/contest.php?cid=1403

问题 A: 这个题目很简单的,快来做啊

题目链接:

http://acm.zzuli.edu.cn/problem.php?id=2553

题面:

在这里插入图片描述

题意:

一个整数T,代表样例个数(1<=T<=100)。每个样例包含一个n(1<=n<=10000),代表n次比赛,之后n行,每一行有两个数,分别是A和k,代表这次比赛做出了A道题,其中k道题被hack。输出T行,每行输出n次比赛AC题目的总量。

思路:

这道题目就是一个将每次比赛A的数值与hack的数值的差值进行累加,但是需要注意是所给数据的范围,所以我们要使用long long 型而不用int 型。

参考代码:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
int main()
{long long  T;scanf("%lld",&T);while(T--)//T组输入{long long  n,a,b,c,sum=0;scanf("%lld",&n);while(n--){scanf("%lld%lld",&a,&b);c=a-b;//A的数值与hack的数值之差为ac的题目量sum=sum+c;//将其每次都相加}printf("%lld",sum);if(T!=0) printf("\n");}return 0;
}

问题 B: 最古老的树

题目链接:

http://acm.zzuli.edu.cn/problem.php?id=2554

题面:

在这里插入图片描述

题意:

一个n(0<n<=1000),代表盘点的树的数目, 接下来n个数字y,代表每棵树的年龄(0<y<=9500,y是整数)。输出次数出现最多的树龄,如果出现次数最多的树龄不止一个,就输出树龄小的那个。

思路:

这道题目的基本考察我们通过双重for循环来记数,同时用if 来判断出现次数的是哪一个,这道题目我们需要注意的是要特判出现次数相同的情况。因为题目要求当出现次数最多不止一个时,输出树龄较小的。使用要对此进行判断。

参考代码:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
int main()
{int n,b,i,j,ans=0,m=-1;int a[10000];scanf("%d",&n);for(i=0;i<n;i++){scanf("%d",&a[i]);}for(i=0;i<n;i++){ans=0;for(j=0;j<n;j++){if(a[i]==a[j]){ans++;//记录每种树龄出现的次数}}if(ans>m)//对树龄出现的次数的大小进行判断{m=ans;b=a[i];}else if(ans==m)//特判两个出现次数相同的情况{if(a[i]<b){b=a[i];//将输出值赋值为树龄较小的那个}}}printf("%d",b);
}

问题 C: Kokoa的咖啡聚会

题目链接:

http://acm.zzuli.edu.cn/problem.php?id=2555

题面:

在这里插入图片描述

题意:

多组输入,每组样例第一行包含三个正整数x,y和z(1<=x,y,z<=100000)——Mocca、Latte和Macchiato想喝咖啡的数量,第二行包含三个正整数a,b和c(1<=a,b,c<=100000)——Kokoa家里的摩卡、拿铁、玛奇朵的数量。然后mocca只喝摩卡,latte除了玛奇朵不喝,其他都喝,macchiato什么咖啡都喝。如果给出的三种咖啡数量能让所有人都心满意足,则输出"YES",否则输出"NO"

思路:

这道题目我们是想让所有人都心满意足,所以我们肯定是先让有要求的先选,所以这道题目肯定是mocca先选摩卡去喝,然后latte在选择,最后才是macchiato去选择,我们就可以通过if嵌套来实现,先判断mocca的量是否足够,然后减去mocca选择的,继续判断latte需要的量是否满足。就这样子一步一步进行判断。

参考代码:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
int main()
{long long x,y,z,d,e;while(scanf("%lld%lld%lld",&x,&y,&z)!=EOF){long long a,b,c,d,e;scanf("%lld%lld%lld",&a,&b,&c);d=a+b;e=a+b+c;if(a>=x)//判断是否满足mocca的需求{d=d-x;//减去mocca选走的数目if(d>=y)//判断剩下的是否满足latte的需求{e=e-x-y;//减去前面两次选走的数目if(e>=z)//判断最后剩下的是否满足Macchiato的需求{printf("YES\n");}else printf("NO\n");}else printf("NO\n");}else{printf("NO\n");}}
}

问题 D: 讨厌的数字

题目链接:

http://acm.zzuli.edu.cn/problem.php?id=2556

题面:

在这里插入图片描述

题意:

第一行为整数T,代表有T组测试数据。 每组测试数据第一行两个整数N,K。第二行为K个整数A[i],代表讨厌的数字。数据范围:0 < T <= 100, 0 <= N <= 100000, 0 <= K <= 10, 0 <= A[i] <= 9。每组测试数据,输出最小值M,如果M不存在输出"-1"。

思路:

这道题目只要需要判断的情况就两种,一种是存在的情况,一种是不存在的情况,不存在的情况有为是当k为10时,然后之后输入的10个数字分别为0,1,2,3,4,5,6,7,8,9,时的时候是一定不存在一个数大于n并且没有讨厌的数字的情况,另外就是一定存在一个数字M大于n。
注:1.bool 函数:这个函数是定义在C++中的(部分编译器C语言中也有,具体看编译器支不支持),我们想使用这个函数的时候需要使用C++的头文件来使用,这个函数的特殊性是因为这个函数只能返回错误或者正确,当返回错误时就相当与返回0,而返回正确的时候就是返回非0的数字。

参考代码:

#include<bits/stdc++.h>//C++中的几乎万能头文件,能力很强大
using namespace std;
#define maxn 100005
int a[maxn],k,n;
int vis[maxn];//在头文件之下的就是定义的变量属于全局变量,全局变量是可以被本程序所有对象或函数引用
bool s_ans(int x)//bool 类型的函数是在C++中的,这个函数只返回ture or flase ,如果正确就是返回非0的数字,如果错误就是返回0.所以下面的0可以换成flase,1可以换成ture也没有问题。
{int ans;while(x){ans=x%10;//得到x这个数字的每一位x/=10;//不断自除使得while循环可以停止,这就是一个简单的求一个数字的各位的套路for(int i=0; i<k; i++){if(ans==a[i])//判断这位数字是否存在与讨厌数相等的位数return 0;//如果存在就返回0,就相当与返回错误}}return 1;//如果没有出现一次讨厌数就返回1,相当于返回正确
}
int main()
{int t;scanf("%d",&t);while(t--)//t组输入{memset(vis,0,sizeof(vis));//对vis这个数组进行清0int x,a_s=0;scanf("%d %d",&n,&k);for(int i=0; i<k; i++){scanf("%d",&a[i]);if(vis[a[i]]==0){vis[a[i]]=1;//标记0到k-1中的数字哪些输入过a_s++;//计算总共标记了几个不相同的讨厌数}}if(a_s==10||n!=0&&a_s==9&&vis[0]==0)//当不相同的讨厌数为10时,就是为0,1,2,3,4,5,6,7,8,9,这时候不可能存在一个M满足大于n,因为每个数字都是讨厌数了.还有一种特殊情况就是当你1到9都讨厌的时候并且n不为0,你也一定不会存在应该数字不包含讨厌数大于n的情况,所以要进行特判。{printf("-1\n");//这时候就输出-1continue;}for(int i=n;; i++){if(s_ans(i))//利用函数来判断是否满足不包含讨厌数{printf("%d\n",i);//如果不包含就输出break;//一旦出现就是最小的一个数大于n,这时候就可以跳出for循环}}}return 0;
}

问题 E: 拼字母

题目链接:

http://acm.zzuli.edu.cn/problem.php?id=2557

题面:

在这里插入图片描述

题意:

第一行为整数T,代表有T组测试数据。 每组测试数据为26个整数a[i],分别代表字母的数量。a[0]代表字母"a"的数量,a[1]代表字母"b"的数量,以此类推。数据范围:0 < T <= 100, 0 <= a[i] <= 1e9。然后输入最多可以组成多少个hello, world。输出组成的组数。

思路:

这道题目基本思路就是判断hello, world中的各个字母的数目,来判断他能不能组成一个hello, world,最后选择出现次数的为基准为确定可以组成的hello, world的组数。

参考代码:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
#include<algorithm>
using namespace std;
int main()
{int t;long long int a[100000];scanf("%d",&t);while(t--){long long i,k;long long b[100000];for(i=1;i<=26;i++){scanf("%lld",&a[i]);}k=0;b[0]=a[4];//存储字母d的数目b[1]=a[5];//存储字母e的数目b[2]=a[8];//存储字母h的数目b[3]=a[12];//存储字母l的数目b[4]=a[15];//存储字母o的数目b[5]=a[18];//存储字母r的数目b[6]=a[23];//存储字母w的数目b[3]=b[3]/3;//组成一个hello, world需要3个字母lb[4]=b[4]/2;//组成一个hello, world需要两个osort(b,b+7);//对其组成可以组成hello, world的字母数目进行从小到大排序printf("%d",b[0]);//输出最小值就是可以组成最多的组数if(t!=0) printf("\n");}
}

问题 G: 数字的乘积

题目链接:

http://acm.zzuli.edu.cn/problem.php?id=2559

题面:

在这里插入图片描述

题意:

第一行为整数T,代表有T组测试数据。每组测试数据两个整数N和M。数据范围: 0 < T <= 100, 0 <= N, M <= 1e18。每组测试数据,输出N和M的乘积(结果对 1e18+7 取余.

思路:

这道题目根据N,M的范围确定肯定不能暴力解决,这时我们就需要(a+b)%mod==(a%mod+b%mod)%mod来使得数字不会爆掉long long 形,我们通过类似快速幂的方法。
注:这里引入一个快速幂的方法https://blog.csdn.net/yangzijiangac/article/details/96430488?utm_source=app
具体解释可以参考这个博客

参考代码:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
const long long mod=1000000000000000000+7;
long long quick_add(long long  a,long long  b,long long  mod)//定义一个快速加的函数
{long long  ans=0;while(b)//{if(b%2==1)//当b为奇数时,则需要单独加那个数字ans=(ans+a)%mod;a=(a+a)%mod;//b为偶数时则直接加。b=b/2;//加的次数减半}//最后这样b都会为1,所以最后的数值一定会存储在ans中return ans;
}
int main()
{int t;scanf("%d",&t);while(t--){long long a,b;scanf("%lld %lld",&a,&b);long long ans=quick_add(a,b,mod);printf("%lld\n",ans);}
}

问题 H: 阶乘的位数

题目链接:

http://acm.zzuli.edu.cn/problem.php?id=2560

题面:

在这里插入图片描述

题意:

输入一个t,代表t组输入,然后每组输入一个N和B,算出N的阶乘,在B进制下的位数。

思路:

这道题目显然不能有简单的阶乘去处理,因为到30的阶乘的时候long long 就会爆掉,我们不需要计算他在n的阶乘时的确定数值,只需要知道位数,我们就可以使用log ,在十进制的时候我们可以使用log10来计算这个数字的位数,而如果要计算他在b进制下的位数,则就可以使用logk()来计算而n的阶乘的位数就可以表示为logk(1)+logk(2)…这样子,就不会使得数据爆掉。这时候就可以顺利的计算n的阶乘在b进制下的位数。

参考代码:

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
int main()
{int t;scanf("%d",&t);while(t--){int n,k,sum;double ans=0;scanf("%d %d",&n,&k);for(int i=1;i<=n;i++){ans+=log(i)/log(k);}ans+=1;//因为是对b取log,我们需要+1.我们可以想8对10取log的结果是小于1的,而8这个数字是一位,所以需要加一个1再强制转换为整型sum=ans;//将小数强制转换为整数printf("%d\n",sum);}
}

这篇关于郑州轻工业大学第三次周赛题目总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

git使用的说明总结

Git使用说明 下载安装(下载地址) macOS: Git - Downloading macOS Windows: Git - Downloading Windows Linux/Unix: Git (git-scm.com) 创建新仓库 本地创建新仓库:创建新文件夹,进入文件夹目录,执行指令 git init ,用以创建新的git 克隆仓库 执行指令用以创建一个本地仓库的

计算机毕业设计 大学志愿填报系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点赞 👍 收藏 ⭐评论 📝 🍅 文末获取源码联系 👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~Java毕业设计项目~热门选题推荐《1000套》 目录 1.技术选型 2.开发工具 3.功能

二分最大匹配总结

HDU 2444  黑白染色 ,二分图判定 const int maxn = 208 ;vector<int> g[maxn] ;int n ;bool vis[maxn] ;int match[maxn] ;;int color[maxn] ;int setcolor(int u , int c){color[u] = c ;for(vector<int>::iter

整数Hash散列总结

方法:    step1  :线性探测  step2 散列   当 h(k)位置已经存储有元素的时候,依次探查(h(k)+i) mod S, i=1,2,3…,直到找到空的存储单元为止。其中,S为 数组长度。 HDU 1496   a*x1^2+b*x2^2+c*x3^2+d*x4^2=0 。 x在 [-100,100] 解的个数  const int MaxN = 3000

状态dp总结

zoj 3631  N 个数中选若干数和(只能选一次)<=M 的最大值 const int Max_N = 38 ;int a[1<<16] , b[1<<16] , x[Max_N] , e[Max_N] ;void GetNum(int g[] , int n , int s[] , int &m){ int i , j , t ;m = 0 ;for(i = 0 ;

题目1254:N皇后问题

题目1254:N皇后问题 时间限制:1 秒 内存限制:128 兆 特殊判题:否 题目描述: N皇后问题,即在N*N的方格棋盘内放置了N个皇后,使得它们不相互攻击(即任意2个皇后不允许处在同一排,同一列,也不允许处在同一斜线上。因为皇后可以直走,横走和斜走如下图)。 你的任务是,对于给定的N,求出有多少种合法的放置方法。输出N皇后问题所有不同的摆放情况个数。 输入

题目1380:lucky number

题目1380:lucky number 时间限制:3 秒 内存限制:3 兆 特殊判题:否 提交:2839 解决:300 题目描述: 每个人有自己的lucky number,小A也一样。不过他的lucky number定义不一样。他认为一个序列中某些数出现的次数为n的话,都是他的lucky number。但是,现在这个序列很大,他无法快速找到所有lucky number。既然

go基础知识归纳总结

无缓冲的 channel 和有缓冲的 channel 的区别? 在 Go 语言中,channel 是用来在 goroutines 之间传递数据的主要机制。它们有两种类型:无缓冲的 channel 和有缓冲的 channel。 无缓冲的 channel 行为:无缓冲的 channel 是一种同步的通信方式,发送和接收必须同时发生。如果一个 goroutine 试图通过无缓冲 channel