牛客小白月赛5 : A D F G H I J_牛客小白月赛24_ITKaven的博客-程序员秘密

技术标签: 树状数组  牛客网  容斥  ACM  

比赛感想:

77名并不是很理想,本可以更好,况且大佬们都没打这种比赛。

这里写图片描述
前面五个题目 A G H I J ,基本上是1A,只有 I 题数组全部开了long long 爆了一次内存
当时排名20+
后面开始做D,一看题目就知道结果是5的个数
但是,一个这么简单的题,让我写错了,让我写错了,让我写错了
而且我当时还怀疑数据有问题,犯了不应该的错误,以此为戒
主要错误出自于下面的kaven函数:计算n中含有多少个因数5, 比如25是2个因数5 ,30是1个因数5
下面的代码有明显错误,我却不进行测试,还吐槽数据有问题(真是有病!)
贴出我错误的sb代码:

int kaven(int n){
    
     
    int sum=1;
    for(int i=1;;i++){
    
         
        sum*=5;
        if(sum==n) return i;
        else if(sum>n) return i-1;
    }
}

D题打乱了我的节奏后,以至于后面做 F 题的时候没有安心推规律,导致F题也没过掉
以至于后面一个多小时没有过题。

下面是这次比赛较容易的七个题 A D F G H I J

A 无关(relationship)
经典容斥原理题目。

#include<bits/stdc++.h>
using namespace std;

typedef long long ll;
const int maxn=25;

int k;
ll ans[maxn];

ll kaven(ll a){
    
	
	if(a==0) return 0;
	ll num=a;
	for(int i=1;i<(1<<k);i++){
    
		
		int cnt=0;
		ll mul=1;
		bool isok=true;
		for(int j=0;j<k;j++){
    
			
			if(i&(1<<j)){
    
				
				cnt++;
				if(a/mul<ans[j]){
    
					
					isok=false;
					break;
				}
				mul*=ans[j]; 
			}
		}
		if(isok){
    
			
			if(cnt%2) num-=a/mul;
			else num+=a/mul;
		}
	}
	return num;
}

int main(){
    
	
	ll l,r;
	scanf("%lld%lld%d",&l,&r,&k);
	for(int i=0;i<k;i++) scanf("%lld",&ans[i]);
	printf("%lld\n",kaven(r)-kaven(l-1));
} 

D 阶乘(factorial)
结果就是有多少个5
这就很简单了

#include<bits/stdc++.h>
using namespace std;
 
typedef long long ll;
 
inline int kaven(int n,int mul){
    
     
    int cnt=0;
    while(n%mul==0) cnt++,n/=mul;
    return cnt;
}
 
int main(){
    
     
    int n;
    scanf("%d",&n);
    ll a;
    a=0;
    for(int i=5;i<=n;i+=5){
    
         
        a+=(ll)(n-i+1)*kaven(i,5);
    }
    printf("%lld\n",a);
}

F 圆(circle)
下面图片摘自题解
这里写图片描述
上面题解结果计算有点问题
F=E-V+2=C(n,4)+n*(n-1)+2
因为圆外还有一个区域,要减掉,因为题目是求圆内的区域个数
所以答案是:C(n,4)+n*(n-1)+1

#include<bits/stdc++.h>
using namespace std;

typedef long long ll;

int main(){
    
	
    ll n;
    while(scanf("%lld",&n)==1){
    
    	
        printf("%lld\n",1+n*(n-1)/2+n*(n-1)*(n-2)*(n-3)/24);
    }
    return 0;
}

G 异或(xor)
开始题目意思没看懂,我就去看样例,发现鱼为偶数条的时候不能吃
题目看不懂,就只能碰碰运气了,看样例猜结论了
这是一个斐波拉契数列
1 1 2 3 5 8 13 21 34
奇 奇 偶 奇 奇 偶 奇 奇 偶
天数是三的倍数时,鱼的数量为偶数,即不能吃
所以有n -n/3 天能吃
交上去就A了,果然样例出奇迹

#include<cstdio>
using namespace std;

int main(){
    
	
	long long n;
	while(scanf("%lld",&n)==1){
    
		
		printf("%lld\n",n-n/3);
	}
}

H 最大公约数(lcm)
水题

#include<bits/stdc++.h>
using namespace std;

typedef unsigned long long ll;

inline ll gcd(ll a,ll b){
    
	
	return b==0?a:gcd(b,a%b);
}

int main(){
    
	
	ll n,m;
	scanf("%llu%llu",&n,&m);
	printf("%llu",n/gcd(n,m)*m);
} 

I 区间 (interval)
经典树状数组区间修改和区间查询题,用线段树的话,内存应该会爆吧,我用树状数组把数组全部开long long内存就爆了,后面把 ans[] 改成 int 才过,线段树估计也悬

#include<bits/stdc++.h>
using namespace std;

typedef long long ll;
const int maxn=1000000+100;

ll bit[maxn][2];
int ans[maxn];

int n,m;

inline int lowbit(int x){
    
	
	return x&(-x);
}

inline void Add(int x,ll v,int ind){
    
	
	while(x<=n){
    
		
		bit[x][ind]+=v;
		x+=lowbit(x); 
	}
}

inline ll getSum(int x,int ind){
    
	
	ll sum=0;
	while(x>0){
    
		
		sum+=bit[x][ind];
		x-=lowbit(x);
	}
	return sum;
}

int main(){
    
	
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++){
    
		
		scanf("%lld",&ans[i]);
	}
	for(int i=1;i<=m;i++){
    
		
		int q,l,r,p;
		scanf("%d%d%d%d",&q,&l,&r,&p);
		if(q==1){
    
			
			p*=-1;
			Add(l,p,0);
			Add(r+1,-p,0);
			Add(l,(ll)l*p,1);
			Add(r+1,(ll)(-r-1)*p,1);
		}
		else{
    
			
			Add(l,p,0);
			Add(r+1,-p,0);
			Add(l,(ll)l*p,1);
			Add(r+1,(ll)(-r-1)*p,1);
		}
	}
	int l,r;
	scanf("%d%d",&l,&r);
	ll tmp=(r+1)*getSum(r,0)-getSum(r,1);
	tmp-=l*getSum(l-1,0)-getSum(l-1,1);
	for(int i=l;i<=r;i++) tmp+=(ll)ans[i];
	printf("%lld\n",tmp); 
} 

J 时间(time)
简单题

#include<bits/stdc++.h>
using namespace std;


int main(){
    
	
	int a,b;
	scanf("%d:%d",&a,&b);
	if(a==0){
    
		
		int c,d;
		c=0,d=0;
		if(d<b) printf("%d:%d\n",c,d);
		else{
    
			
			printf("%d:%d\n",23,32);
		}
		printf("1:10");
	}
	else if(a==23){
    
		
		int c,d;
		c=23,d=32;
		if(d<b) printf("%d:%d\n",c,d);
		else{
    
			
			printf("22:22\n");
		}
		c=23,d=32;
		if(d>b) printf("%d:%d\n",c,d);
		else{
    
			
			printf("0:0\n");
		}
	}
	else{
    
		
		int c,d;
		c=a;
		d=c%10*10+c/10;
		if(d<b) printf("%d:%d\n",c,d);
		else{
    
			c--;
			d=c%10*10+c/10;
			while(d>=60) c--,d=c%10*10+c/10;
			printf("%d:%d\n",c,d);
		}
		c=a;
		d=c%10*10+c/10;
		if(d>b&&d<60) printf("%d:%d\n",c,d);
		else{
    
			c++;
			d=c%10*10+c/10;
			while(d>=60) c++,d=c%10*10+c/10;
			printf("%d:%d\n",c,d);
		}
	}
} 
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_37960603/article/details/81160331

智能推荐

新手学python有前途吗_学python有前途吗_python程序员现状_weixin_39518678的博客-程序员秘密

Python可以做什么,现在学习有前途吗?这个问题问得好。Python首先是一门编程语言,和java一样,是一门面向展开全部 Python前景好,学好非常有前途、有出息、有竞争,虽然有竞争说明非常热门。一般培训出来在一线综上所述,一句话,学python肯定有用,当下转行,人工智能领域首选。推荐公众号∶人工智能学术前沿。跨行零首先我得说这个学校是比较专业的。在回答这个问题以前,先分析下Python的...

VsCode 插件整理之C#_c# vscode 插件_天马3798的博客-程序员秘密

在VsCode 中编写C#代码的常用插件整理一、C# FixFormat代码格式化工具1.安装命令ext install csharpfixformat2.使用方法快捷点Ctrl+Ait+i或者右键点击‘CSharp:Fix Format’3.更多配置参考官网:https://marketplace.visualstudio.com/items?itemName=L

Linux中python3.6的源码编译安装_sura_1988的博客-程序员秘密

1、官网下在源码安装包(python3.6)https://www.python.org/ftp/python/3.6.6/Python-3.6.6.tgz2、解压安装包tar zxf Python-3.6.6.tgz安装编译过程中需要的依赖包:yum install gcc zlib zlib-devel openssl-devel readline readline-devel -...

halcon和matlab接口,Halcon一日一练:图像设备介绍_海盗船舵工-8381的博客-程序员秘密

Halcon在设计之初就提供了完整的图像采集方案,适应了多种图像设备采集图像,以及各种不同环境的采集方案。通常情况下,图像的采集应该是所有机器视觉项目首要解决的任务,不幸的是,需要解决图像采集的问题,对应装备的种类具有特殊性,以及非标准化的硬件设备,比如,USB相机或IEEE1394相机,他们提供的物理接口及设备驱动都完全不一样。为了让我们专注于机器视觉实际的问题,Halcon提供了大量的图像采集...

十月百度,阿里巴巴,迅雷搜狗最新面试七十题(更新至10.17)_weixin_34024034的博客-程序员秘密

http://blog.csdn.net/v_july_v/article/details/6855788引言当即早已进入10月份,十一过后,招聘,笔试,面试,求职渐趋火热。而在这一系列过程背后浮出的各大IT公司的笔试/面试题则蕴含着诸多思想与设计,细细把玩,思考一番亦能有不少收获。 上个月,本博客着重整理九月腾讯,创新工场,淘宝等公司最新面试十三题,此次重点整理百度,阿里...

线性差分方程及其通解的一般求法_线性差分方程求解_豆汁泡纳豆的博客-程序员秘密

本文介绍了线性差分方程的通解,从特征方程以及延迟算子两个方面介绍了相关概念。并且以AR(2)模型为例,详细介绍了2元线性差分方程的通解情况,另外有若干例题。最后还给出了此类问题矩阵形式,但才疏学浅未能求解。

随便推点

Parallels 16.5 发布:支持在 M1 Mac 上原生模拟 Arm Windows,性能提升 30%_米奇^吖的博客-程序员秘密

Vidmore DVD Monster for mac是Mac平台上一款很不错的DVD翻录软件,Vidmore DVD Monster mac版支持200多种视频/音频格式,例如MP4,AVI、FLV、MKV、WMV和MOV,以及iPhone、iPad、三星、HTC和更多设备支持的格式,您还可以快速将DVD视频转换为4K UHD和1080p视频,那么如何使用Vidmore DVD Monster for mac修剪和拆分视频文件?这里准备了教程,赶紧来看看吧!Vidmore DVD Monster fo

数学基础-概率论_CNMFSLJ的博客-程序员秘密

来源:[]Tips:朴素贝叶斯朴素贝叶斯的朴素指的就是一个假设——各特征之间相互独立。这个假设使得朴素贝叶斯算法变得很简单。

android 启动黑屏解决方法_zzcchunter的博客-程序员秘密

第一步定义一个style,这个style的目的是在启动窗口显示想要的内容(windowBackground)&amp;lt;style name=&quot;WelcomeStyle&quot; parent=&quot;AppTheme.NoActionBar&quot;&amp;gt; &amp;lt;item name=&quot;android:windowBackground&quot;&amp;gt;@color/white&amp;lt;/item&amp;gt; &amp;

Android之Intent全面解析及用法_uni- app i.putextra(intent.extra_stream,uri.parse(_nullobject0x01的博客-程序员秘密

Intent对Android的核心和灵魂,是各组件之间的桥梁。四大组件分别为Activity 、Service、BroadcastReceiver、ContentProvider。 而这四种组件是独立的,它们之间可以互相调用,协调工作,最终组成一个真正的Android应用。Intent的中文意思为“意图”,在Android中可以理解为想要做什么,What do want to do? 所以什么时候

最通俗易懂的一致性哈希算法原理_一致性哈希 通俗_活在梦里丶的博客-程序员秘密

再讨论一致性哈希之前,我们先来回顾一下缓存的演化历史:当我们的系统还是一个非常小的时候,对于用户的请求我们直接访问数据库就好了。当访问量到了一定数量的时候,我们使用缓存服务器,缓存一部分热数据来减轻数据库的压力,这便是最原始的阶段。

16位模式/32位模式下PUSH指令探究——《x86汇编语言:从实模式到保护模式》读书笔记16_车子 chezi的博客-程序员秘密

一、Intel 32 位处理器的工作模式 如上图所示,Intel 32 位处理器有3种工作模式。 (1)实模式:工作方式相当于一个8086 (2)保护模式:提供支持多任务环境的工作方式,建立保护机制 (3)虚拟8086模式:这种方式可以使用户在保护模式下运行8086程序(比如cmd打开的console窗口,就是工作在虚拟8086模式) 有几点需要特别说明: (1)保护模式可分为16

推荐文章

热门文章

相关标签