【题解】2023牛客寒假算法基础集训营4
创始人
2024-05-22 03:16:11
0

目录

  • A 清楚姐姐学信息论
    • 思路
  • B. 清楚姐姐学构造
    • 思路
  • C. 清楚姐姐学01背包(Easy Version)
    • 思路
  • D. 清楚姐姐学01背包(Hard Version)
    • 思路
  • E. 清楚姐姐打怪升级
    • 思路
  • F. 清楚姐姐学树状数组
    • 思路
  • G. 清楚姐姐逛街(Easy Version)
    • 思路
  • L. 清楚姐姐的三角形I
    • 思路
  • M. 清楚姐姐的三角形II
    • 思路

A 清楚姐姐学信息论

思路

tag:签到
进制是效率最高的进制,越靠近e进制效率越高。
证明如下:
在这里插入图片描述

如果有一个nr进制数,则表示这个数一共需要n*r张牌
(成本),一共可以表示r^n个数(回报),那么关于成本的式子
即:r*log(r,m)
m是常量,对r/lnr求导,发现其在x=e为极值点,则直接输出。

int x,y;
void solve()
{cin>>x>>y;if(x>y)swap(x,y);if(x==2&&y==3)cout<<3<

B. 清楚姐姐学构造

思路

tag 数学,构造
构造 ai=aja_i=a_jai​=aj​,bi=−bjb_i=-b_jbi​=−bj​。
由题可知 ai+bi≡cia_i+b_i\equiv c_iai​+bi​≡ci​,aj+bj≡cja_j+b_j\equiv c_jaj​+bj​≡cj​。
则2ai≡ci+cj2a_i\equiv c_i+c_j2ai​≡ci​+cj​
分情况讨论:

  1. 如果ci+cjc_i+c_jci​+cj​为偶数,则直接赋值ai=(ci+cj)/2a_i=(c_i+c_j)/2ai​=(ci​+cj​)/2
  2. 如果ci+cjc_i+c_jci​+cj​为奇数,如果m!=2m != 2m!=2则赋值ai=(ci+cj+m)/2a_i=(c_i+c_j+m)/2ai​=(ci​+cj​+m)/2。否则NO
const int N=1e5+10,mod=1e9+7;
int c[N];
int a[N],b[N];
int n,m;
void solve()
{cin>>n>>m;rep(i,0,n-1)cin>>c[i];rep(i,0,n-1){int t=n-i-1;int x=(c[i]+c[t])%m;if(x%2==0)x/=2;else{if(m==2){NO;return;}x=(x+m)/2;}a[i]=x,a[t]=x;b[i]=((c[i]-a[i])%m+m)%m;b[t]=((c[t]-a[t])%m+m)%m;}YES;for(int i=0;i

C. 清楚姐姐学01背包(Easy Version)

思路

tag: 01背包,简单题
问每个物品价值增加多少可以保证出现在01背包中。
所以我们先算出不要物品i时,的最大价值,然后用maxv+1-当前价值就是最后结果

const int N=110;
int w[N],v[N];
int n,m;
int f[N];
int a[N];
void solve()
{cin>>n>>m;rep(i,1,n)cin>>v[i]>>w[i];rep(i,1,n)dwn(j,m,v[i])f[j]=max(f[j],f[j-v[i]]+w[i]);int maxv=f[m];rep(k,1,n){rep(i,1,m)f[i]=0;rep(i,1,n){if(i==k)continue;dwn(j,m,v[i])f[j]=max(f[j],f[j-v[i]]+w[i]);}if(maxv>f[m])a[k]=0;else a[k]=maxv+1-f[m-v[k]]-w[k];}rep(i,1,n)cout<

D. 清楚姐姐学01背包(Hard Version)

思路

tag 01背包前后缀优化
没有办法进行O(n^3),所以我们想办法将其进行优化。
f1[i][j]存背包内存放前i个物品,背包容量是j的最优解
f2[i][j]存背包内存放后i个物品,背包容量是j的最优解
思路是:必不选的最大价值-必选的价值+1


const int N=5010;
int w[N],v[N];
int f1[N][N],f2[N][N];
int a[N];
int n,m;
void solve()
{cin>>n>>m;rep(i,1,n)cin>>v[i]>>w[i];rep(i,1,n){rep(j,0,v[i]-1)f1[i][j]=f1[i-1][j];rep(j,v[i],m)f1[i][j]=max(f1[i-1][j],f1[i-1][j-v[i]]+w[i]);}dwn(i,n,1){rep(j,0,v[i]-1)f2[i][j]=f2[i+1][j];rep(j,v[i],m)f2[i][j]=max(f2[i+1][j],f2[i+1][j-v[i]]+w[i]);}rep(i,1,n){int res=0;rep(j,0,m-v[i])//必选i res=max(res,f1[i-1][j]+f2[i+1][m-v[i]-j]);res+=w[i];int sum=0;rep(j,0,m)//必不选i sum=max(sum,f1[i-1][j]+f2[i+1][m-j]);a[i]=max(0ll,sum-res+1);}rep(i,1,n)cout<io;int _;_=1;//cin>>_;while(_--)solve();
}

E. 清楚姐姐打怪升级

思路

tag: 数学(二分)
枚举攻击次数。推数学公式即可

const int N=1e5+10;
int n,t,a;
int h[N],v[N];
void solve()
{cin>>n>>t>>a;rep(i,1,n)cin>>h[i]>>v[i];int res=0;rep(i,1,n){if(h[i]<=a)res++;else{if(a<=v[i]*t){cout<<-1<

F. 清楚姐姐学树状数组

思路

tag: 树状数组,树的遍历

/*悲观看待成功,乐观看待失败。 author:leimingze 
*/#include
using namespace std;
const double pi = acos(-1);
const double eps=1e-7;
const int base=131;
#define YES cout<<"YES"<
#define rep(i,x,n) for(int i=x;i<=n;i++)
#define dwn(i,n,x) for(int i=n;i>=x;i--)
#define ll_INF 0x7f7f7f7f7f7f7f7f
#define INF 0x3f3f3f3f
#define io ios_base::sync_with_stdio(false), cin.tie(nullptr), cout.tie(nullptr)
int Mod(int a,int mod){return (a%mod+mod)%mod;}
int lowbit(int x){return x&-x;}//最低位1及其后面的0构成的数值
int qmi(int a, int k, int p){int res = 1 % p;while (k){if (k & 1) res = Mod(res * a , p);a = Mod(a * a , p);k >>= 1;}return res;}
int inv(int a,int mod){return qmi(a,mod-2,mod);}
int lcm(int a,int b){return a*b/__gcd(a,b);}
int n,k,q;
int l,m,r;
int sz(int x)//包括x在内的x子树的节点个数 
{return (lowbit(x)<<1)-1;
} 
bool is_left_child(int x)//判断x是否为其父节点的左孩子,lowbit(x)的前一位是0则是 
{return !(x&(lowbit(x)<<1));
}
int fa(int x)//求父亲节点 
{return is_left_child(x)?x+lowbit(x):x-lowbit(x);//如果是左孩子则其父节点是x-lowbit(x),否则x+lowbit(x) 
} 
int lch(int x)//求左孩子,把x的最低位1置0,把x的最低位1的下一位置为1 得到 左孩子 
{return x^lowbit(x)^(lowbit(x)>>1);
} 
int rch(int x)
{return x^(lowbit(x)>>1);//把x的最低位1的下一位置为1 得到右孩子 	
} 
int VLR(int x)
{int rt=n;int pos=1;while(rt!=x){pos++;if(xpos+=sz(lch(rt));rt=rch(rt);}}return pos;
}
int LRD(int x)
{if(x==n)return n;int rt=x;int pos=sz(rt);while(rt!=n){if(rt==rch(fa(rt)))pos+=sz(lch(fa(rt)));rt=fa(rt);}return pos;
}
void solve()
{cin>>k>>q;n=1ll<int x;cin>>x;cout<io;int _;_=1;//cin>>_;while(_--)solve();
}

G. 清楚姐姐逛街(Easy Version)

思路

tag:搜索,暴力
先预处理zngg到达每个点的时间,然后qcjj按照地标走

const int N=1010;
int n,m;
int startx,starty;
int q;
char g[N][N];
int dist[N][N];
int dx[4]={-1,0,1,0};
int dy[4]={0,1,0,-1};
PII get(char c,int x,int y)
{if(c=='L')if(g[x][y-1]!='#')return {x,y-1};if(c=='R')if(g[x][y+1]!='#')return {x,y+1};if(c=='U')if(g[x-1][y]!='#')return {x-1,y};if(c=='D')if(g[x+1][y]!='#')return {x+1,y};return {x,y};
}
void bfs()
{queueq;q.push({startx,starty});dist[startx][starty]=0;while(q.size()){auto t=q.front();q.pop();for(int i=0;i<4;i++){int a=dx[i]+t.x,b=dy[i]+t.y;if(a<0||a>=n||b<0||b>=m)continue;if(g[a][b]=='#')continue;if(dist[a][b]!=0x3f3f3f3f)continue;dist[a][b]=dist[t.x][t.y]+1;q.push({a,b});}}
}
int find(int x,int y)
{int cnt=1;int res=ll_INF;while(cnt<=n*m){auto t=get(g[x][y],x,y);int a=t.x,b=t.y;if(a==x&&b==y){if(dist[a][b]==0x3f3f3f3f)return -1;}if(dist[a][b]<=cnt)res=min(res,max(dist[a][b],cnt));cnt++;x=a,y=b;}return res;
}
void solve()
{cin>>n>>m>>startx>>starty>>q;rep(i,0,n-1)rep(j,0,m-1)cin>>g[i][j],dist[i][j]=0x3f3f3f3f;bfs();while(q--){int x,y;cin>>x>>y;cout<

L. 清楚姐姐的三角形I

思路

tag:签到

int va,vb,vc;
void solve()
{cin>>va>>vb>>vc;int a=vb+vc-va;int b=va+vc-vb;int c=va+vb-vc;if(a%2||b%2||c%2)NO;else if(a+b>c&&a+c>b&&b+c>a&&abs(a-b)YES;cout<

M. 清楚姐姐的三角形II

思路

tag:诈骗,签到

const int N=1e5+10;
int a[N];
int n;
void solve()
{cin>>n;a[1]=a[2]=1;a[3]=2;for(int i=4;i<=n;i+=3){a[i]=a[i-3];a[i+1]=a[i-2];a[i+2]=a[i-1];}rep(i,1,n)cout<

相关内容

热门资讯

安卓子系统windows11,... 你知道吗?最近科技圈可是炸开了锅,因为安卓子系统在Windows 11上的兼容性成了大家热议的话题。...
电脑里怎么下载安卓系统,电脑端... 你有没有想过,你的电脑里也能装上安卓系统呢?没错,就是那个让你手机不离手的安卓!今天,就让我来带你一...
索尼相机魔改安卓系统,魔改系统... 你知道吗?最近在摄影圈里掀起了一股热潮,那就是索尼相机魔改安卓系统。这可不是一般的改装,而是让这些专...
安卓系统哪家的最流畅,安卓系统... 你有没有想过,为什么你的手机有时候像蜗牛一样慢吞吞的,而别人的手机却能像风一样快?这背后,其实就是安...
安卓最新系统4.42,深度解析... 你有没有发现,你的安卓手机最近是不是有点儿不一样了?没错,就是那个一直在默默更新的安卓最新系统4.4...
android和安卓什么系统最... 你有没有想过,你的安卓手机到底是用的是什么系统呢?是不是有时候觉得手机卡顿,运行缓慢,其实跟这个系统...
平板装安卓xp系统好,探索复古... 你有没有想过,把安卓系统装到平板上,再配上XP系统,这会是怎样一番景象呢?想象一边享受着安卓的便捷,...
投影仪装安卓系统,开启智能投影... 你有没有想过,家里的老式投影仪也能焕发第二春呢?没错,就是那个曾经陪你熬夜看电影的“老伙计”,现在它...
安卓系统无线车载carplay... 你有没有想过,开车的时候也能享受到苹果设备的便利呢?没错,就是那个让你在日常生活中离不开的iOS系统...
谷歌安卓8系统包,系统包解析与... 你有没有发现,手机更新换代的速度简直就像坐上了火箭呢?这不,最近谷歌又发布了安卓8系统包,听说这个新...
微软平板下软件安卓系统,开启全... 你有没有想过,在微软平板上也能畅享安卓系统的乐趣呢?没错,这就是今天我要跟你分享的神奇故事。想象你手...
coloros是基于安卓系统吗... 你有没有想过,手机里的那个色彩斑斓的界面,背后其实有着一个有趣的故事呢?没错,我要说的就是Color...
安卓神盾系统应用市场,一站式智... 你有没有发现,手机里的安卓神盾系统应用市场最近可是火得一塌糊涂啊!这不,我就来给你好好扒一扒,看看这...
黑莓平板安卓系统升级,解锁无限... 亲爱的读者们,你是否还记得那个曾经风靡一时的黑莓手机?那个标志性的全键盘,那个独特的黑莓体验,如今它...
安卓文件系统采用华为,探索高效... 你知道吗?最近安卓系统在文件管理上可是有了大动作呢!华为这个科技巨头,竟然悄悄地给安卓文件系统来了个...
深度系统能用安卓app,探索智... 你知道吗?现在科技的发展真是让人惊叹不已!今天,我要给你揭秘一个超级酷炫的话题——深度系统能用安卓a...
安卓系统的分区类型,深度解析存... 你有没有发现,你的安卓手机里藏着不少秘密?没错,就是那些神秘的分区类型。今天,就让我带你一探究竟,揭...
安卓系统铠无法兑换,揭秘无法兑... 最近是不是有很多小伙伴在玩安卓系统的游戏,突然发现了一个让人头疼的问题——铠无法兑换!别急,今天就来...
汽车安卓系统崩溃怎么刷,一键刷... 亲爱的车主朋友们,你是否曾遇到过汽车安卓系统崩溃的尴尬时刻?手机系统崩溃还能重启,但汽车系统崩溃了,...
miui系统可以刷安卓p系统吗... 亲爱的手机控们,你是否对MIUI系统情有独钟,同时又对安卓P系统的新鲜功能垂涎欲滴?今天,就让我带你...