2022牛客寒假算法基础集训营1 L E J H F C D A I (9/13)

L 牛牛学走路

思路: 模拟,用一个 M A X MAX MAX存储。

  • 参考代码:
#include<bits/stdc++.h>
using namespace std;
#define mp make_pair
#define int long long
#define re register int
#define pb emplace_back
#define lowbit(x) (x&-x)
#define fer(i,a,b) for(re i = a ; i <= b ; i ++)
#define der(i,a,b) for(re i = a ; i >= b ; i --)
#define snow ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
int gcd(int a,int b){return b?gcd(b,a%b):a;}
int lcm(int a,int b){return a*b/gcd(a,b);}
typedef pair<int,int>PII;
typedef pair<int,string>PIS;
signed main(){int t;cin>>t;while(t--){double MA=0;int n;cin>>n;string s;cin>>s;int x=0,y=0;int x1=x;int y1=y;for(int i=0;i<s.size();i++){if(s[i]=='L')y1--;else if(s[i]=='R')y1++;else if(s[i]=='U')x1--;else if(s[i]=='D')x1++;MA=max(MA,sqrt((double)(x-x1)*(x-x1)+(double)(y-y1)*(y-y1)));}printf("%.10lf\n",MA);}return 0;
}

E 炸鸡块君的高中回忆

思路: 非常简单的推公式,不能暴力因为数据范围很大。需要特判 n = 1 , m = 1 n=1,m=1 n=1,m=1和 n ! = 1 , m = 1 n!=1,m=1 n!=1,m=1的情况。贪心做法,一直让一个人带着最多 ( m − 1 ) (m-1) (m−1)个人进去,直到所有人全部进入校园。

  • 参考代码:
#include<bits/stdc++.h>
using namespace std;
#define mp make_pair
#define int long long
#define re register int
#define pb emplace_back
#define lowbit(x) (x&-x)
#define fer(i,a,b) for(re i = a ; i <= b ; i ++)
#define der(i,a,b) for(re i = a ; i >= b ; i --)
#define snow ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
int gcd(int a,int b){return b?gcd(b,a%b):a;}
int lcm(int a,int b){return a*b/gcd(a,b);}
typedef pair<int,int>PII;
typedef pair<int,string>PIS;
signed main(){int t;cin>>t;while(t--){int n,m;cin>>n>>m;if(m==1&&n==1){cout<<1<<endl;continue;}if(m==1&&n!=1){cout<<"-1"<<endl;continue;}int dai=m-1;int g=n-m;//除掉最后一次,需要带多少人。int x=(g+dai-1)/dai;cout<<x*2+1<<endl;}return 0;
}

J 朋友做游戏

思路: 双指针模拟,贪心。

  • 参考代码:
#include<bits/stdc++.h>
using namespace std;
#define mp make_pair
#define int long long
#define re register int
#define pb emplace_back
#define lowbit(x) (x&-x)
#define fer(i,a,b) for(re i = a ; i <= b ; i ++)
#define der(i,a,b) for(re i = a ; i >= b ; i --)
#define snow ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
int gcd(int a,int b){return b?gcd(b,a%b):a;}
int lcm(int a,int b){return a*b/gcd(a,b);}
typedef pair<int,int>PII;
typedef pair<int,string>PIS;
const int N=1e4+10;
int a[N],b[N];
bool cmp(int a,int b){return a>b;
}
signed main(){int t;cin>>t;while(t--){int x,y,n;cin>>x>>y>>n;for(int i=1;i<=x;i++)cin>>a[i];for(int i=1;i<=y;i++)cin>>b[i];sort(a+1,a+1+x,cmp);sort(b+1,b+1+y,cmp);for(int i=1;i<=x;i++)a[i]+=a[i-1];for(int i=1;i<=y;i++)b[i]+=b[i-1];int ans=-1;for(int i=1;i<=n;i++){if(i>=1&&i<=x&&n-i<=y&&i>=n-i){ans=max(ans,a[i]+b[n-i]);}}cout<<ans<<endl;}return 0;
}

H 牛牛看云

思路: 本题虽然 n n n很大,具有迷惑性,但是 a a a的范围很小最多只有 1000 1000 1000,所以可以通过记录 0 0 0~ 1000 1000 1000中各个数出现的次数,跑一遍 1 e 6 1e6 1e6的复杂度。当然也可以使用二分来做,时间复杂度 O ( n l o g n ) O(nlogn) O(nlogn)。

  • 二分参考代码:
#include<bits/stdc++.h>
using namespace std;
#define mp make_pair
#define int long long
#define re register int
#define pb emplace_back
#define lowbit(x) (x&-x)
#define fer(i,a,b) for(re i = a ; i <= b ; i ++)
#define der(i,a,b) for(re i = a ; i >= b ; i --)
#define snow ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
int gcd(int a,int b){return b?gcd(b,a%b):a;}
int lcm(int a,int b){return a*b/gcd(a,b);}
typedef pair<int,int>PII;
typedef pair<int,string>PIS;
const int N=1e6+10;
int a[N];
int s[N];
signed main(){int n;cin>>n;for(int i=1;i<=n;i++){cin>>a[i];}sort(a+1,a+1+n);for(int i=1;i<=n;i++){s[i]=a[i]+s[i-1];}int res=0;for(int i=1;i<=n;i++){int x=1000-a[i];int l=i,r=n;while(l<r){int mid=l+r>>1;if(a[mid]>=x)r=mid;else l=mid+1;}int sum=l-i;if(l>i)res+=1000*sum-(s[l-1]-s[i-1]+(sum)*a[i]);int sum2=n-l+1;res+=(s[n]-s[l-1]+(sum2)*a[i])-sum2*1000;}cout<<res<<endl;return 0;
}
  • 映射+暴力参考代码:
#include<bits/stdc++.h>
using namespace std;
#define mp make_pair
#define int long long
#define re register int
#define pb emplace_back
#define lowbit(x) (x&-x)
#define fer(i,a,b) for(re i = a ; i <= b ; i ++)
#define der(i,a,b) for(re i = a ; i >= b ; i --)
#define snow ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
int gcd(int a,int b){return b?gcd(b,a%b):a;}
int lcm(int a,int b){return a*b/gcd(a,b);}
typedef pair<int,int>PII;
typedef pair<int,string>PIS;
const int N=1010;
int a[N];
signed main(){int n;cin>>n;for(int i=1;i<=n;i++){//映射int x;cin>>x;a[x]++;}int sum=0;for(int i=0;i<=1000;i++)//1e6暴力for(int j=i;j<=1000;j++){int dapei=0;if(i==j)dapei=a[i]+(a[i]*(a[i]-1))/2;else dapei=a[i]*a[j];sum+=dapei*abs(1000-(i+j));}cout<<sum<<endl;return 0;
}

F 中位数切分

思路: 结论题, 1 1 1个小于 m m m的数需要至少 2 2 2个大于等于 m m m的数来维护, 2 2 2个小于 m m m的数需要至少 3 3 3个大于等于 m m m的数来维护,以此推类,但 0 0 0个小于 m m m的数不需要维护。因为要求最多段,所以一旦遇到小于 m m m的数花最小代价去维护它即可。剩余的不用维护的皆可单独成段。

  • 参考代码:
#include<bits/stdc++.h>
using namespace std;
#define mp make_pair
#define int long long
#define re register int
#define pb emplace_back
#define lowbit(x) (x&-x)
#define fer(i,a,b) for(re i = a ; i <= b ; i ++)
#define der(i,a,b) for(re i = a ; i >= b ; i --)
#define snow ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
int gcd(int a,int b){return b?gcd(b,a%b):a;}
int lcm(int a,int b){return a*b/gcd(a,b);}
typedef pair<int,int>PII;
typedef pair<int,string>PIS;
const int N=1e5+10;
int a[N];
signed main(){int t;cin>>t;while(t--){int n,m;cin>>n>>m;int sum=0;//统计>=m的数量for(int i=1;i<=n;i++){cin>>a[i];if(a[i]>=m)sum++;}if(n%2==0){if(sum<=n/2){cout<<"-1"<<endl;continue;}}else{int mid=(n+1)/2;if(sum<mid){cout<<"-1"<<endl;continue;}}int res=n;sum=n-sum;//现在的sum的小于m的数量if(sum)//如果至少一个小于msum+=sum+1;//花费m+1个大于等于m的维护他res-=sum;//剩下单独成段if(sum)//如果至少有一个小于m的说明维护他的那个也算一段,否则没有维护的话不算单独一段。res++;cout<<res<<endl;}return 0;
}

C Baby’s first attempt on CPU

思路: 阅读理解,模拟+贪心。我们只需要依次执行下来,哪里缺空格补哪里,并且需要考虑补了空格之后对接下去两行的影响。因为我们最多会影响三行。

  • 参考代码:
#include<bits/stdc++.h>
using namespace std;
#define mp make_pair
#define int long long
#define re register int
#define pb emplace_back
#define lowbit(x) (x&-x)
#define fer(i,a,b) for(re i = a ; i <= b ; i ++)
#define der(i,a,b) for(re i = a ; i >= b ; i --)
#define snow ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
int gcd(int a,int b){return b?gcd(b,a%b):a;}
int lcm(int a,int b){return a*b/gcd(a,b);}
typedef pair<int,int>PII;
typedef pair<int,string>PIS;
const int N=110;
struct node{int a,b,c;
}nodes[N];
signed main(){int n;cin>>n;for(int i=1;i<=n;i++){cin>>nodes[i].a>>nodes[i].b>>nodes[i].c;}int res=0;for(int i=1;i<=n;i++){if(nodes[i].a==1){res+=3;nodes[i].a=nodes[i].b=nodes[i].c=0;nodes[i+1].b=nodes[i+1].c=0;nodes[i+2].c=0;}else if(nodes[i].b==1){res+=2;nodes[i].b=nodes[i].c=0;nodes[i+1].c=nodes[i+1].b=0;nodes[i+2].c=0;}else if(nodes[i].c==1){res+=1;nodes[i].c=0;if(nodes[i+1].b==1){nodes[i+1].b=0;nodes[i+1].c=1;}else if(nodes[i+1].c==1){nodes[i+1].c=0;}nodes[i+2].c=0;}}cout<<res<<endl;return 0;
}

D 牛牛做数论

思路: 比较好看出来的数学题,除了 n n n等于 1 1 1的情况,其余的 n n n的最小 X o Xo Xo为不超过 n n n的所有素数连积,最大 X o Xo Xo为不超过 n n n的最大素数。由于素数的连积小于 1 e 9 1e9 1e9只需要 10 10 10个数所以打表即可。求不超过n的最大素数只需要暴力即可,因为 1 e 9 1e9 1e9内最大两个数的间隔是282。

  • 参考代码:
#include<bits/stdc++.h>
using namespace std;
#define mp make_pair
#define int long long
#define re register int
#define pb emplace_back
#define lowbit(x) (x&-x)
#define fer(i,a,b) for(re i = a ; i <= b ; i ++)
#define der(i,a,b) for(re i = a ; i >= b ; i --)
#define snow ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
int gcd(int a,int b){return b?gcd(b,a%b):a;}
int lcm(int a,int b){return a*b/gcd(a,b);}
typedef pair<int,int>PII;
typedef pair<int,string>PIS;
int prime[15]={0,2,3,5,7,11,13,17,19,23,29};
int get_prime(int x){for(int i=2;i*i<=x;i++){if(x%i==0)return false;}return true;
}
signed main(){int t;cin>>t;while(t--){int n;cin>>n;if(n==1){cout<<"-1"<<endl;continue;}int l,r;int sum=1;for(int i=1;i<=10;i++){if(sum*prime[i]<=n)sum=sum*prime[i];}l=sum;for(int i=n;i>=1;i--){if(get_prime(i)){r=i;break;}}cout<<l<<' '<<r<<endl;}return 0;
}

A 九小时九个人九扇门

思路: 简单 D P DP DP 01 01 01背包的变形。一个非常有用的结论:任何一个数 m o d 9 mod9 mod9即使其数字根。注意: m o d = 0 mod=0 mod=0的话数字根为 9 9 9,然后 1 e 5 1e5 1e5个人就变成了 1 1 1~ 9 9 9的值,然后进行01背包,选或者不选。然后算出最后的方案数。

  • 参考代码:
#include<bits/stdc++.h>
using namespace std;
#define mp make_pair
#define int long long
#define re register int
#define pb emplace_back
#define lowbit(x) (x&-x)
#define fer(i,a,b) for(re i = a ; i <= b ; i ++)
#define der(i,a,b) for(re i = a ; i >= b ; i --)
#define snow ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
int gcd(int a,int b){return b?gcd(b,a%b):a;}
int lcm(int a,int b){return a*b/gcd(a,b);}
typedef pair<int,int>PII;
typedef pair<int,string>PIS;
const int N=1e5+10;
const int mod=998244353;
int a[N];
int f[N][10];
int get(int x){if(x%9==0)return 9;else return x%9;
}
signed main(){//DPint n;cin>>n;for(int i=1;i<=n;i++){cin>>a[i];a[i]=get(a[i]);}f[0][0]=1;//注意入口,都不选的情况下也是一种方案。for(int i=1;i<=n;i++){for(int j=0;j<=9;j++){f[i][j]=(f[i][j]+f[i-1][j])%mod;int temp=get(j+a[i]);f[i][temp]=(f[i][temp]+f[i-1][j])%mod;}}for(int i=1;i<=9;i++)cout<<f[n][i]<<' ';cout<<endl;return 0;
}

I B站与各唱各的

思路:

  • 参考代码:
#include<bits/stdc++.h>
using namespace std;
#define mp make_pair
#define int long long
#define re register int
#define pb emplace_back
#define lowbit(x) (x&-x)
#define fer(i,a,b) for(re i = a ; i <= b ; i ++)
#define der(i,a,b) for(re i = a ; i >= b ; i --)
#define snow ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
int gcd(int a,int b){return b?gcd(b,a%b):a;}
int lcm(int a,int b){return a*b/gcd(a,b);}
typedef pair<int,int>PII;
typedef pair<int,string>PIS;
const int mod=1e9+7;
int qmi(int a,int b){int res=1;while(b){if(b&1)res=(res*a)%mod;a=(a*a)%mod;b>>=1;}return res;
}
signed main(){int t;cin>>t;while(t--){int n,m;cin>>n>>m;int fenzi=qmi(2,n)-2;int fenmu=qmi(2,n);fenmu=qmi(fenmu,mod-2);cout<<(m*fenzi%mod*fenmu%mod)<<endl;}return 0;
}

2022牛客寒假算法基础集训营1 L E J H F C D A I (9/13)相关推荐

  1. 2022牛客寒假算法基础集训营6 签到题5题(附基础集训营4-6签到题总结)

    1.I-A+B问题 模拟,类似于高精度,竖式运算 #include<bits/stdc++.h> using namespace std; typedef long long LL; in ...

  2. 2022牛客寒假算法基础集训营3 签到题7题(附基础集训营1-3签到题总结)

    1.A-智乃的Hello XXXX 签到 #include<bits/stdc++.h> using namespace std; int main(){cout<<" ...

  3. 2022牛客寒假算法基础集训营

    2022牛客寒假算法基础集训营1 C-Baby's first attempt on CPU D-牛牛做数论 已知欧拉函数 ϕ ( x ) \phi(x) ϕ(x)是满足 1 ≤ y ≤ x 1\le ...

  4. 2022牛客寒假算法基础集训营1 ——H 牛牛看云

    链接:登录-专业IT笔试面试备考平台_牛客网 来源:牛客网 就像罗夏墨迹测试一样,同一片形状的云在不同人的眼中会看起来像各种各样不同的东西. 例如,现在天上飘过了一片长条状的云彩,hina说这片云长得 ...

  5. 2022牛客寒假算法基础集训营4 签到题7题

    1.E-真假签到题 不难发现,或者随便枚举一下,可以得到f(n)=n的结论 #include<bits/stdc++.h> typedef long long LL; using name ...

  6. 2022牛客寒假算法基础集训营2 签到题7题

    1.C 小沙的杀球 如果你能够杀球但不杀球,虽然回复了体力,但你后续可能会没有机会继续杀球,并且杀球次数相同,那么回复的体力是相同的,所以在同等条件下,我们应该尽可能多的杀球. 不开long long ...

  7. 2022牛客寒假算法基础集训营1 签到题7题

    1.L.牛牛学走路 恭喜你 签到成功 #include<bits/stdc++.h> using namespace std; int main(){int T; cin>>T ...

  8. [nk] 2022牛客寒假算法基础集训营1 补题|题解

    目录 前言 L.牛牛学走路 MyCode OtherCode J.小朋友做游戏 MyCode A.九小时九个人九扇门 MyCode F. 中位数切分 MyCode 前言 根据难度系数补题,大概会补 A ...

  9. 2022牛客寒假算法基础集训营5 E.复苏小孩 详解

    题目描述 获得鬼手后,九峰成功让鬼眼,无头鬼影,鬼手三者形成了奇妙的平衡,短时间内不用担心厉鬼复苏,且可以使用厉鬼的力量. 但想要让三者保持平衡,必须按照一定的规律轮流使用各部分的力量,于是九峰向神秘 ...

最新文章

  1. Linux下利用phpize安装php扩展
  2. mysql 查询实体_mysql – 如何优化实体框架查询
  3. AC日记——行程长度编码 openjudge 1.7 32
  4. SpringBoot+Echarts实现一次ajax请求返回并显示多个饼状图
  5. 【十二省联考2019】皮配【分部dp】
  6. 排序算法之--归并排序(好玩的一个算法o。o)快速入门
  7. Windows 下命令行修改文件夹的控制权限 Cacls
  8. 天津大学计算机专硕_(55)东北林业大学2020计算机与软件考研数据速览
  9. Oracle之唯一性约束(UNIQUEConstraint)用法详解
  10. HttpClient FormUrlEncodedContent System.UriFormatException: 无效的 URI: URI 字符串太长问题解决方案
  11. yzl的VSCode使用指南
  12. WP_支持XP的Windows Phone开发环境搭建:“文字+视频”教程(五)
  13. 单元测试用例 php,PHP 单元测试(PHPUnit)(2)
  14. 零基础入门学习Python 011列表:一个打了激素的数组2
  15. linux 文件大小写敏感,大小写敏感的问题
  16. 目前我见过的最强的OCR识别软件
  17. RuntimeError: Expected 4-dimensional input for 4-dimensional weight, but got 3-dimensional input
  18. 佟年计算机天才不会打游戏,亲爱的热爱的:Gun神带佟年开黑,网友:甜蜜游戏时间...
  19. Nature综述:手把手教你分析菌群数据
  20. FLEXnet Licensing Error Codes

热门文章

  1. Android 之onFinishInflate
  2. Python--使用selenium通过chromedriver调用谷歌浏览器
  3. 常见的网络攻击攻防方法
  4. 如何快速的搭建一个个人博客网站
  5. mac系统升级及安装搜狗输入法
  6. Dubbo之@Reference 和 ReferenceBean
  7. EnableWindow(FALSE)导致对话框置底?
  8. Cesium-Clock
  9. Spring Cloud+Vue、Element-Ui、日常ip-config 君子:洪君
  10. Vue:pros绑定