2022牛客寒假算法基础集训营1
文章目录
- 牛牛看云(转换)
- 解析
- 代码
- Baby's first attempt on CPU(贪心)
- 解析
- 代码
- 中位数切分(思维)
- 解析
- 代码
- 牛牛做数论(数论)
- 解析
- 代码
- 九小时九个人九扇门(动态规划)
- 解析
- 代码
- B站与各唱各的(概率论+逆元)
- 解析
- 代码
- 总结
牛牛看云(转换)
链接
题目描述
就像罗夏墨迹测试一样,同一片形状的云在不同人的眼中会看起来像各种各样不同的东西。
例如,现在天上飘过了一片长条状的云彩,hina说这片云长得像是薯条,moca说这片云长得像宾堡豆沙面包(5枚装),kasumi说这片云在闪闪发光,kokoro说这片云怎么看上去不开心呢,牛牛说这片云长得就像是:
现在给出整数序列a,请你帮牛牛求出这个式子的值。
输入描述:
输出描述:
输出一个整数,表示该式子的值。
示例1
输入
4
500 501 500 499
输出
8
解析
首先分析时间复杂度,如果我们直接根据题目遍历序列长度进行计算,时间复杂度大约是106∗106{10^6*10^6}106∗106,毫无疑问一定会超时,那么怎么办呢,我们发现如果按值遍历,那么只需要103∗103{10^3*10^3}103∗103
代码
#include<iostream>
#include<algorithm>
using namespace std;
long long a[10086];
int main(){long long n,x,y;cin>>n;for(int i=0;i<n;i++) cin>>x,a[x]++;long long ans=0;for(int i=0;i<=1000;i++){for(int j=i;j<=1000;j++){x=a[i],y=a[j];int k=abs(i+j-1000);if(i!=j) ans+=x*y*k;else ans+=(x*(x+1))/2*k;}}cout<<ans;return 0;
}
Baby’s first attempt on CPU(贪心)
题目
解析
简单贪心。
根据题目,我们只需要判断我们当前的位置距离要读的位置中间是否相差3个距离,如果有则不改变,如果没有则差多少补多少,这里有一个贪心就是我们可以把要补的距离插入到我们当前个数的前面一个,这样可以使后面的要访问时,我们前面加了距离的选择是最优的情况。我们可以另开一个数组记录他们变化后的下标。
代码
#include<iostream>
using namespace std;
int a[108][108];
long long sum[108];
int main(){int n;cin>>n;int ans=0;for(int i=1;i<=n;i++){sum[i]=sum[i-1]+1;for(int j=1;j<=3;j++){cin>>a[i][j];if(a[i][j]==1){int k=i-j;if(sum[i]-sum[k]<=3){int m=3-(sum[i]-sum[k])+1;ans+=m;sum[i]+=m;}}}}cout<<ans;return 0;
}
中位数切分(思维)
题目
解析
我们发现所有的数只有分为两个情况,大于等于m的数,和小于m的数。我们将大于等于m的数记为1,小于m的数记为0,如下有这一串序列,我们来观察它的特性:
110011110011{110011110011}110011110011
我们发现,对于00要使它能够成为中位数段,必须在此段中含有三个及三个以上的1,即对于n个0必须至少有n+1个1才能满足中位数段。
然后,我们再仔细来看,上面的0一共有四个,1一共有8个,所以一定能够构造出中位数段,那么怎么才能构造出最多的呢?
我们发现对于上面的情况,我们只要找出0附近对应0个数加一的1时是最优情况,答案就是4。但是像这样写一人很复杂,我们继续来看:
110000111111{110000111111}110000111111
上面的0一共有四个,1一共有8个,答案也是4,喔噻,你就会惊奇的发现答案是一样的,明明都把0分成两组,按道理来说需要的1也更多呀,这是怎么回事呢?
因为每分出来一组0,我们所需要的1也是增加一个,然而多出来的组数也是1个,两两抵消,答案自然是一样的,所以只需要将1的个数减去0的个数就好啦!
代码
#include<iostream>
#include<stdio.h>
#include<algorithm>
using namespace std;
int a[500000];
int main(){int t;cin>>t;while(t--){int n,m;cin>>n>>m;int ans=0;int minn=0,maxx=0;for(int i=1;i<=n;i++){cin>>a[i];if(a[i]>=m) maxx++;else minn++;}if(maxx-minn>0) cout<<maxx-minn<<endl;else cout<<-1<<endl;}return 0;
}
牛牛做数论(数论)
题目
解析
首先要知道欧拉函数的结论,不知道就好好学数论,然后打表找到规律
代码
#include<iostream>
using namespace std;
bool h(int n){for(int i=2;i*i<=n;i++)if(n%i==0) return false;return true;
}
int main(){int t;cin>>t;while(t--){int n;cin>>n;long long ans=1,i=0,j;if(n==1){cout<<-1<<endl;continue;}for(i=2;;i++){if(!h(i)) continue;if(ans*i>n) break;ans*=i;}while(!h(n)) n--;cout<<ans<<" "<<n<<endl;}return 0;
}
九小时九个人九扇门(动态规划)
题目
解析
这道题是01背包,关键是在于一个数的数字根等于这个数%9然后再将它转换成01背包问题就好啦
代码
#include<iostream>
using namespace std;
int a[100086];
int dp[100086][10];
const int MOD = 998244353;
int main(){int n;cin>>n;for(int i=1;i<=n;i++) cin>>a[i],a[i]%=9;for(int i=1;i<=n;i++){for(int j=0;j<9;j++){int k=(a[i]+j)%9;dp[i][k]=dp[i-1][k];dp[i][k]+=dp[i-1][j];dp[i][k]%=MOD;}dp[i][a[i]]++;}for(int j=1;j<=9;j++) cout<<dp[n][j%9]<<" ";return 0;
}
B站与各唱各的(概率论+逆元)
题目
解析
大致如上
逆元需要自己学
代码
#include<iostream>
#include<math.h>
using namespace std;
const int MOD = 1e9+7;
#define LL long longLL pow(LL a, LL b, LL p){//a的b次方求余p LL x = 1;while(b){if(b & 1) x = (x * a) % p;a = (a * a) % p;b >>= 1;}return x%MOD;
}int main(){int t;cin>>t;while(t--){long long n,m;cin>>n>>m;long long ans=1;n=pow(2,n,MOD);ans=m*(n-2)%MOD*pow(n,MOD-2,MOD)%MOD;cout<<ans<<endl;
}return 0;
}
总结
数论、动规知识薄弱,以及平时思维题目明显练习不够,不能继续摆烂了(手动哭泣)
2022牛客寒假算法基础集训营1相关推荐
- 2022牛客寒假算法基础集训营6 签到题5题(附基础集训营4-6签到题总结)
1.I-A+B问题 模拟,类似于高精度,竖式运算 #include<bits/stdc++.h> using namespace std; typedef long long LL; in ...
- 2022牛客寒假算法基础集训营3 签到题7题(附基础集训营1-3签到题总结)
1.A-智乃的Hello XXXX 签到 #include<bits/stdc++.h> using namespace std; int main(){cout<<" ...
- 2022牛客寒假算法基础集训营
2022牛客寒假算法基础集训营1 C-Baby's first attempt on CPU D-牛牛做数论 已知欧拉函数 ϕ ( x ) \phi(x) ϕ(x)是满足 1 ≤ y ≤ x 1\le ...
- 2022牛客寒假算法基础集训营1 L E J H F C D A I (9/13)
2022牛客寒假算法基础集训营1 L E J H F C D A I (9/13) L 牛牛学走路 思路: 模拟,用一个 M A X MAX MAX存储. 参考代码: #include<bits ...
- 2022牛客寒假算法基础集训营1 ——H 牛牛看云
链接:登录-专业IT笔试面试备考平台_牛客网 来源:牛客网 就像罗夏墨迹测试一样,同一片形状的云在不同人的眼中会看起来像各种各样不同的东西. 例如,现在天上飘过了一片长条状的云彩,hina说这片云长得 ...
- 2022牛客寒假算法基础集训营4 签到题7题
1.E-真假签到题 不难发现,或者随便枚举一下,可以得到f(n)=n的结论 #include<bits/stdc++.h> typedef long long LL; using name ...
- 2022牛客寒假算法基础集训营2 签到题7题
1.C 小沙的杀球 如果你能够杀球但不杀球,虽然回复了体力,但你后续可能会没有机会继续杀球,并且杀球次数相同,那么回复的体力是相同的,所以在同等条件下,我们应该尽可能多的杀球. 不开long long ...
- 2022牛客寒假算法基础集训营1 签到题7题
1.L.牛牛学走路 恭喜你 签到成功 #include<bits/stdc++.h> using namespace std; int main(){int T; cin>>T ...
- [nk] 2022牛客寒假算法基础集训营1 补题|题解
目录 前言 L.牛牛学走路 MyCode OtherCode J.小朋友做游戏 MyCode A.九小时九个人九扇门 MyCode F. 中位数切分 MyCode 前言 根据难度系数补题,大概会补 A ...
- 2022牛客寒假算法基础集训营5 E.复苏小孩 详解
题目描述 获得鬼手后,九峰成功让鬼眼,无头鬼影,鬼手三者形成了奇妙的平衡,短时间内不用担心厉鬼复苏,且可以使用厉鬼的力量. 但想要让三者保持平衡,必须按照一定的规律轮流使用各部分的力量,于是九峰向神秘 ...
最新文章
- siesta在Linux运行,请教,为什么siesta编译中没报错,然而运行的时候跑不起来呢...
- OPEN ERP相关财务的基本概念
- Linux C编程--进程间通信(IPC)5--System V IPC 机制3--共享内存
- junit4 javaee 5.0 jpa SSH 单元测试问题集锦
- javascript图片轮播(完全自己手写代码)
- VMware支持客户构建多云未来
- 基于分割的PTD渐进三角网加密滤波(SBF)算法
- gif 动态加载_用 python 实现切割视频,加入水印,压缩并转成 gif !
- 导弹拦截(数据加强版)
- 黑苹果E3-1290 v2(ivy bridge架构)安装成功案例分享
- Flutter 竖线 垂直分割线
- 云虚拟主机bch 和 云服务器bcc,虚拟主机bch和云服务器bcc
- 4K、高清、无水印视频素材库
- Ubuntu IDEA返回上一次位置快捷键失效问题解决
- 【报错】WebSocket connection to ‘ws://xxx.xxx.x.xxxx:8080/ws‘failed:
- 企业发放奖金根据利润提成
- 约瑟夫问题(丢手绢问题)
- 小代码3 魔方矩阵
- 使用图片服务器https://sm.ms
- apt update时出现Duplicate sources.list entry http://mirrors.tuna.tsinghua.edu.cn/ubuntu xenial Release
热门文章
- 从 IT 的角度思考 BIM(一):面向对象
- java sql date类_java.util.Date和java.sql.Date 一点区别
- JavaScript:九九乘法表
- EXCEL VBA窗口快捷键冲突查找原因
- PyTorch中的torch.max()和torch.maximum()的用法详解
- XPath之电影天堂数据爬取
- 2003系统服务器不设置密码,服务器2003怎么设置密码
- php 二维数组根据某个键值倒叙、升序排序
- R语言 重命名指定列
- BPI 流程优化和BPR流程重组