牛客寒假算法集训6-总结
1.C++内存四区2.算法-排序-快速排序3.算法-排序-归并排序4.c++重载5.算法-二分6.算法—前缀和7.算法—差分8.算法-双指针9.c++引用10.c++函数默认参数及占位参数11.c++函数模板12.c++类和对象-封装13.struct和class的区别14.成员属性设置为私有15.C++类和对象-对象特性(1)16.C++类和对象-对象特性(2)17.N皇后18.动态规划dp-01背包问题19.C++类和对象-对象特性(4)20.C++类和对象-对象特性(3)21.C++友元22.C++运算符重载23.C++继承24.C++多态25.C++类模板26.C++vector容器27.C++string容器28.C++deque容器29.算法-树状数组30.算法线段树31.算法-bfs32.算法-贪心33.算法-Flood Fill34.数据结构-链表35.数据结构-栈36.数据结构-队列37.P2678 跳石头38.5132139.54440.3213241.牛客寒假算法集训1-总结42.牛客寒假算法集训2-总结43.牛客寒假算法集训3-总结44.数论-质数45.博弈论46.第十四届蓝桥杯省赛C++题解47.Trie树48.并查集49.数据结构-堆50.哈希表51.拓扑排序52.Dijkstra53.spfa54.数论-约数55.数论-欧拉函数56.图的存储和遍历57.牛客寒假算法集训4-总结58.牛客寒假算法集训5-总结
59.牛客寒假算法集训6-总结
60.Bellman_ford61.Floyd62.编辑距离63.数位dpA
思路:
分解质因数当指数为1并且cnt==3时满足条件
时间复杂度:
o(n)
AC代码:
#include <iostream>
using namespace std;
int l,r,cnt;
bool k;
int c[100];
void divide(int n)
{
int t=n;cnt=0;
if(k) return;
for(int i=2;i<=n/i;i++)
if(n%i==0)
{
int s=0;
while(n%i==0)
{
n/=i;
s++;
}
if(s==1) cnt++;
}
if(n>1) cnt++;
if(cnt==3&&!k) {cout<<t;k=true;}
}
int main()
{
cin>>l>>r;
for(int i=l;i<=r;i++) divide(i);
if(!k) cout<<-1;
return 0;
}
B
思路:
先排序再二分
时间复杂度:
o(nlogn)
AC代码:
#include <bits/stdc++.h>
using namespace std;
const int N=45;
typedef long long ll;
ll n,t,l=-1,r=-1;
ll res=1e9;
int main()
{
cin>>n;
vector<ll> a(n),b(n);
for(int i=0;i<n;i++) cin>>a[i];
for(int i=0;i<n;i++) cin>>b[i];
sort(a.begin(),a.end());
for(int i=0;i<n;i++)
{
auto x = lower_bound(a.begin(), a.end(), b[i]);
int y = x - a.begin();
if (x == a.end())
{
if(b[i]-a[y-1]<res)
{
res=b[i]-a[y-1];
l=y-1,r=i;
}
}
else
{
if(a[y]-b[i]<res)
{
res=a[y]-b[i];
l=y,r=i;
}
if ( b[i] - a[y - 1] < res && y>0 )
res = b[i] - a[y - 1], l = y - 1,r = i;
}
}
swap(a[l],a[r]);
for(int i=0;i<n;i++) cout<<a[i]<<' ';
return 0;
}
C
思路:
打表
AC代码:
#include <iostream>
#include <algorithm>
#include <map>
#include <tuple>
using namespace std;
typedef long long ll;
const int N=46;
ll q,n;
ll a[N];
int main()
{
a[1]=1,a[2]=1;
for(int i=3;i<=45;i++) a[i]=a[i-1]+a[i-2];
cin>>q;
map<ll,tuple<int,int,int>>mp;
for(int i=0;i<46;i++)
for(int j=0;j<46;j++)
for(int k=0;k<46;k++)
mp[a[i]+a[j]+a[k]]={i,j,k};
while(q--)
{
cin>>n;
if(mp.count(n))
{
auto [o,b,c]=mp[n];
cout<<a[o]<<' '<<a[b]<<' '<<a[c]<<endl;
}
else cout<<-1<<endl;
}
return 0;
}
D
思路:
签到题
时间复杂度:
...
AC代码:
#include <iostream>
using namespace std;
double p;
int main()
{
cin>>p;
cout<<p*p*(1-p)*(1-p)*(1-p)+p*p*p*(1-p)*(1-p)<<endl;
return 0;
}
E
思路:
模拟
AC代码:
#include <iostream>
#include <cstring>
#include <algorithm>
#include <cmath>
using namespace std;
string a;
int cnt1,cnt2;
string b;
bool k;
long long sum;
int main()
{
cin>>a>>b;
int t=a.length()-3;
for(int i=2;i<a.length();i++)
{
sum+=pow(10,t)*(a[i]-'0');
t--;
}
for(int i=0;i<b.length();i++)
{
if(b[i]=='R') cnt1++;
else cnt2++;
if(cnt1==sum/2+1) {cout<<"kou!"<<endl<<cnt1+cnt2;k=true; break;}
if(cnt2==sum/2+1) {cout<<"yukari!"<<endl<<cnt1+cnt2;k=true; break;}
}
if(!k) cout<<"to be continued."<<endl<<cnt1+cnt2;
return 0;
}
I
思路:
贪心
AC代码:
void solve()
{
ll n,m;cin >> n >> m;
create_vec(a,n);
create_vec(b,m);
ll mxa,mxb,mna,mnb,curmn,curmx;
mxa=mxb=-INF; mna=mnb=INF;
curmn=curmx=0;
FORLL(i,0,n-1){
curmn+=a[i];
curmx+=a[i];
if(curmn>0) curmn=0;
if(curmx<0) curmx=0;
mna=min(mna,curmn);
mxa=max(mxa,curmx);
}
curmn=curmx=0;
FORLL(i,0,m-1){
curmn+=b[i];
curmx+=b[i];
if(curmn>0) curmn=0;
if(curmx<0) curmx=0;
mnb=min(mnb,curmn);
mxb=max(mxb,curmx);
}
curmn=INF; curmx=-INF;
FORLL(i,0,n-1){
curmn=min(curmn,a[i]);
curmx=max(curmx,a[i]);
}
if(curmx<=0) mxa=min(mxa,curmx);
if(curmn>=0) mna=max(mna,curmn);
curmn=INF; curmx=-INF;
FORLL(i,0,m-1){
curmn=min(curmn,b[i]);
curmx=max(curmx,b[i]);
}
if(curmx<=0) mxb=min(mxb,curmx);
if(curmn>=0) mnb=max(mnb,curmn);
cout << max({mna*mnb,mna*mxb,mxa*mnb,mxa*mxb}) << endl;
}
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析