牛客小白月赛5 H J I D G A F

2024-04-01 18:38
文章标签 牛客 小白月赛

本文主要是介绍牛客小白月赛5 H J I D G A F,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

https://www.nowcoder.com/acm/contest/135#question

 

以下题目都需要注意会不会爆long long 会不会c++输入输出超时以及 “   ~   ”

求a和b的最小公倍数,a*b/gcd(a,b)

#include<bits/stdc++.h>
using namespace std;
long long a[1111111];
unsigned long gcd(unsigned long a,unsigned long b)
{if(b==0)return a;else return gcd(b,a%b);
}
int main(){unsigned long a,b;while(cin>>a>>b){unsigned long c=gcd(max(a,b),min(a,b));unsigned long ans=b/c;   //要先除 否则a*b会爆范围ans=ans*a;cout<<ans<<endl;}return 0;
}

 

J

模拟一下!

#include<bits/stdc++.h>
using namespace std;
int main(){int a,b;char s;while(cin>>a>>s>>b){int hour=a;int mint=b;int ans1;int ans2;int ans3;int ans4;while(1){mint--;if(mint<0){mint=59;hour--;if(hour<0)hour=23;}if(mint/10==hour%10&&mint%10==hour/10){ans1=hour;ans2=mint;break;}}hour=a;mint=b;while(1){mint++;if(mint>=60){mint=0;hour++;if(hour==24){hour=0;}}if(mint/10==hour%10&&mint%10==hour/10){ans3=hour;ans4=mint;break;}}cout<<ans1<<":"<<ans2<<endl<<ans3<<":"<<ans4<<endl;}return 0;
}

 

I

因为主要求一次和,且操作是给一段区间加上某个数(其实我们可以把减法看成加法)

那么我们可以不动原数组,我们已开始假设都为0,每次在l-r之间加上一个p

我们就可以在这个全是0的数组里的l位置加上p,r+1位置减去p。

最终我们求和的时候,求一下第二个数组的前缀和,这样这个前缀和的数组就是最终对每一个位置的改变量,再加上原来的数即可。

例如  0 0 0 0 0 0 0 0

我们在1-5 加上5 那么我们操作完就是  0 5 0 0 0 0 -5 0    我们再求一个前缀和 就是 0 5 5 5 5 5 0 0    ok!

 

#include<bits/stdc++.h>
using namespace std;
long long a[1111111];
long long b[1111111];
int main(){int n,m;while(cin>>n>>m){for(int i=1;i<=n;i++)scanf("%lld",&a[i]);memset(b,0,sizeof(b));int op,l,r;long long pp;while(m--){scanf("%d%d%d%lld",&op,&l,&r,&pp);if(op!=1){b[l]+=pp;b[r+1]-=pp;}else {b[l]+=-pp;b[r+1]+=pp;}}for(int i=2;i<=n;i++)b[i]+=b[i-1];scanf("%d%d",&l,&r);long long ans=0;for(int i=l;i<=r;i++)ans+=a[i]+b[i];printf("%lld\n",ans);}
}

 

D

思路就是将所有的乘数换成若干个质数相乘的形式,输出其中2的数量和5的数量去最小就是末尾0的数量。

当然显然肯定是5的数量比较小。。。。我的代码写烦了。

那么我们可以从5开始枚举到n,每次都加5.  计算其中因子5有多少个 再乘上在s中这个数出现了多少次即可

#include<bits/stdc++.h>
using namespace std;
int main(){long long n;while(cin>>n){long long jler=0;long long jlten=0;long long lss=5;while(lss<=n){long long jl1=0;long long zs=lss;while(zs%5==0){zs/=5;jl1++;}zs=lss;jlten+=jl1*(n-lss+1);lss+=5;}lss=2;while(lss<=n){long long jl1=0;long long zs=lss;while(zs%2==0){zs/=2;jl1++;}zs=lss;jler+=jl1*(n-lss+1);lss+=2;}long long ans=min(jler,jlten);cout<<ans<<endl;}
}

 

G

找规律,看鱼的数量是斐波那契数列,且偶数个鱼就不能吃

只要找f(1)-f(n)中偶数的数量即可。斐波那契数列 的规律是 奇数 奇数 偶数 奇数 奇数 偶数,2奇数1偶数这么排列。

#include<bits/stdc++.h>
using namespace std;
int main(){long long n;while(~scanf("%lld",&n)){long long ans=n-n/3;printf("%lld\n",ans);}return 0;
}

 

A

容斥。

若一个集合A内所有的元素都不是正整数N的因数,则称N与集合A无关。

  给出一个含有k个元素的集合A={a1,a2,a3,...,ak},求区间[L,R]内与A无关的正整数的个数。

  保证A内的元素都是素数

用a1,a2.。。。。ak分别筛一遍l-r加到答案上

用a1*a2,a1*a3.。。。。。。分别筛一遍l-r 减到答案上。

也就是奇加偶减。。。

用状压 实现

#include<bits/stdc++.h>
using namespace std;
long long le,ri;
int n;
long long zs[22];
long long find(long long x)
{if(x<0)return 0;long long st=ri-ri%x;if(st<le)return 0;long long sm;if((st-le+1)%x==0)sm=(st-le+1)/x;else sm=(st-le+1)/x+1;return sm;
}
int main(){long long n;while(~scanf("%lld%lld%lld",&le,&ri,&n)){for(int i=0;i<n;i++)scanf("%lld",&zs[i]);long long ans=0;bool er[22];for(long long i=0;i<(1<<n);i++){long long lss=i;int js=0;int js1=0;long long cs=1;int f=1;while(lss){if(lss%2==1){cs*=zs[js1];if(cs>ri){f=0;break;}js++;}lss/=2;js1++;}if(f==0)continue;if(js%2==1)ans+=find(cs);else ans-=find(cs);}ans=-ans;printf("%lld\n",ans);}
}

 

F

将题目给的几个样例输入到某个神奇的求数列规律的网站里,就能得到通项公式了。

#include<bits/stdc++.h>
using namespace std;
int main(){long long n;while(~scanf("%lld",&n)){long long ans=1+n*(n-1)/2+n*(n-1)*(n-2)*(n-3)/24;printf("%lld\n",ans);}
}

 

这篇关于牛客小白月赛5 H J I D G A F的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

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

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

牛客小白月赛100部分题解

比赛地址:牛客小白月赛100_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJ A.ACM中的A题 #include<bits/stdc++.h>using namespace std;#define ll long long#define ull = unsigned long longvoid solve() {ll a,b,c;cin>>a>>b>

牛客小白月赛100(A,B,C,D,E,F三元环计数)

比赛链接 官方讲解 这场比较简单,ABC都很签到,D是个不太裸需要预处理的 B F S BFS BFS 搜索,E是调和级数暴力枚举,F是三元环计数。三元环考的比较少,没见过可能会偏难。 A ACM中的A题 思路: 就是枚举每个边变成原来的两倍,然后看看两短边之和是否大于第三边即可。 不能只给最短边乘 2 2 2,比如 1 4 8 这组数据,也不能只给第二短边乘 2 2 2,比

笔试强训,[NOIP2002普及组]过河卒牛客.游游的水果大礼包牛客.买卖股票的最好时机(二)二叉树非递归前序遍历

目录 [NOIP2002普及组]过河卒 牛客.游游的水果大礼包 牛客.买卖股票的最好时机(二) 二叉树非递归前序遍历 [NOIP2002普及组]过河卒 题里面给的提示很有用,那个马的关系,后面就注意,dp需要作为long的类型。 import java.util.Scanner;// 注意类名必须为 Main, 不要有任何 package xxx 信息publ

每日OJ_牛客_求和(递归深搜)

目录 牛客_求和(递归深搜) 解析代码 牛客_求和(递归深搜) 求和_好未来笔试题_牛客网 解析代码         递归中每次累加一个新的数,如果累加和大于等于目标,结束递归。此时如果累加和正好等于目标,则打印组合。向上回退搜索其它组合。此题本身就是一个搜索的过程,找到所有的组合。 #include <iostream>#include <cmath>#in

牛客《剑指Offer》 -- 数值的整数次方

题目描述 给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。 思路 特别注意负数的情况,出现负数,将其转化为正数然后求倒数。 class Solution {public:double Power(double base, int exponent) {double total = 1;bool flag = false

牛客网《剑指Offer》 二进制中1的个数

题目描述 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。 思路 负数用补码,其实就是求一个数据在计算机中是存储是怎么样子的。用位运算,就能很好实现。 class Solution {public:int NumberOf1(int n) {int count = 0;int flag = 1;while (flag != 0) {if ((n & f

牛客网《剑指Offer》 矩形覆盖

题目描述 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形。请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? class Solution {public:int rectCover(int number) {if(number==0) return 0;if(number==1) return 1;if(number==2) return 2;retu

牛客《剑指Offer》 变态跳台阶

题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级……它也可以跳上n级。求该青蛙跳上一个n级的台阶总共有多少种跳法。 思路 根据 普通的跳台阶可以总结出 f(n) = f(n-1) + f(n-2) +f(n-3) + 。。。。+ f(1) +1 不妨设 f(0) = 1 , 则易得 class Solution {public:int jumpFloorII(int n

牛客《剑指Offer》 跳台阶

题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级。求该青蛙跳上一个n级的台阶总共有多少种跳法。 思路 递归思想,n阶梯子走法等于n-1 加上n-2的。 class Solution {public:int jumpFloor(int number) {if(number==1) return 1;if(number==2) return 2;return jumpFl