牛客小白月赛5 : A D F G H I J
发布日期:2021-06-30 16:05:50
浏览次数:2
分类:技术文章
本文共 3436 字,大约阅读时间需要 11 分钟。
比赛感想:
前面五个题目 A G H I J ,基本上是1A,只有 I 题数组全部开了long long 爆了一次内存 当时排名20+ 后面开始做D,一看题目就知道结果是5的个数 但是,一个这么简单的题,让我写错了,让我写错了,让我写错了 而且我当时还怀疑数据有问题,犯了不应该的错误,以此为戒 主要错误出自于下面的kaven函数:计算n中含有多少个因数5, 比如25是2个因数5 ,30是1个因数5 下面的代码有明显错误,我却不进行测试,还吐槽数据有问题(真是有病!) 贴出我错误的sb代码:77名并不是很理想,本可以更好,况且大佬们都没打这种比赛。
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)
经典容斥原理题目。#includeusing 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<
D 阶乘(factorial)
结果就是有多少个5 这就很简单了#includeusing 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#includeusing 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了,果然样例出奇迹#includeusing namespace std;int main(){ long long n; while(scanf("%lld",&n)==1){ printf("%lld\n",n-n/3); }}
H 最大公约数(lcm)
水题#includeusing 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 才过,线段树估计也悬#includeusing 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)
简单题#includeusing 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("0:0\n"); } } else{ int c,d; c=a; d=c%10*10+c/10; if(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); } }}
转载地址:https://kaven.blog.csdn.net/article/details/81160331 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
能坚持,总会有不一样的收获!
[***.219.124.196]2024年05月02日 14时01分42秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
(6)CMake入门笔记--CMake官网教程
2019-05-01
(7)CMake入门笔记--CMake官网教程
2019-05-01
(8)CMake入门笔记--CMake语法
2019-05-01
(9)CMake入门笔记--同时生成动态库与静态库
2019-05-01
beyond compare 4 的30天试用期已过-解决方法
2019-05-01
面试海量数据问题
2019-05-01
TensorFlow图优化(一)-CSE(公共子表达式消除)
2019-05-01
TensorFlow图优化(二)-Remapper,layout
2019-05-01
TensorFlow btc allocator
2019-05-01
3D点云图实验
2019-05-01
linux设备驱动的实现与理解
2019-05-01
python遇到‘\u’开头的unicode编码
2019-05-01
RedHat Linux网络配置
2019-05-01
Linux下如何退出图形界面?
2019-05-01
关于C语言中的结构体对齐
2019-05-01
数据恢复过程中需要注意的一些问题
2019-05-01
const int *p,const * int p,int const *p
2019-05-01
解析大端模式和小端模式
2019-05-01
C++ 使用delete删除指针后应该做的工作
2019-05-01
内存区划分、内存分配、常量存储区、堆、栈、自由存储区、全局区[C++][内存管理]...
2019-05-01