【题解】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<

相关内容

热门资讯

安卓系统应用数据目录,揭秘系统... 你有没有想过,你的安卓手机里那些应用,它们的数据都藏在哪个角落呢?今天,就让我带你一探究竟,揭开安卓...
kindle 安卓 系统 刷机... 亲爱的读者们,你是不是也和我一样,对电子阅读设备情有独钟?尤其是那款小巧便携的Kindle,简直是阅...
平板 win 安卓 双系统,... 你有没有想过,拥有一台既能运行Windows系统,又能流畅使用安卓应用的多功能平板电脑,是不是能让你...
电脑安卓和苹果系统,电脑操作系... 你有没有发现,现在无论是工作还是娱乐,电脑已经成了我们生活中不可或缺的好伙伴呢!而在这众多电脑中,安...
手机安卓系统下载5.0,引领智... 你有没有发现,最近手机界又掀起了一股热潮?没错,就是安卓系统5.0的下载。这可是安卓家族里的一大亮点...
小森生活系统安卓,打造绿色生态... 你知道吗?最近在手机应用市场上,有个叫做“小森生活系统安卓”的新玩意儿火得一塌糊涂。它就像一个神奇的...
王者荣耀安卓系统更换,畅享全新... 最近是不是发现你的王者荣耀游戏体验有点不对劲?别急,让我来给你揭秘一下安卓系统更换背后的那些事儿!一...
ios系统数据如何导入安卓系统... 你是不是也有过这样的经历:手机里存满了珍贵的照片、视频和联系人,突然有一天,你决定换一台安卓手机,却...
王者荣耀启动安卓系统,畅享指尖... 你知道吗?最近王者荣耀可是大动作连连,竟然宣布要启动安卓系统了!这消息一出,瞬间在游戏圈引起了不小的...
安卓始终显示系统栏,安卓系统栏... 你是不是也遇到了这个问题?手机屏幕上那个讨厌的系统栏,有时候它就像一个顽皮的小鬼,总是赖在你的屏幕上...
苹果系统可以装在安卓,探索跨平... 你知道吗?最近在科技圈里可是掀起了一股热潮呢!那就是——苹果系统竟然可以装在安卓设备上!是不是听起来...
安卓系统双清目的,安卓系统双清... 你知道吗?最近在安卓系统圈子里,有个话题可是热得不得了,那就是“双清”。别小看这个“双清”,它可是关...
安卓系统台电平板,畅享智能生活... 你有没有发现,最近身边的朋友都开始讨论起一款叫做台电的安卓系统平板电脑呢?这可不是随便说说,这款平板...
三菱安卓系统,智能科技与驾驶体... 亲爱的读者,你是否曾好奇过,那些在我们生活中默默无闻的汽车品牌,它们是如何将科技与驾驶体验完美结合的...
安卓系统为什么好,引领智能生活... 你有没有发现,身边的朋友、同事,甚至家人,几乎人手一台安卓手机?这可不是偶然现象哦!安卓系统,这个来...
安卓如何改键盘系统,Andro... 你是不是也和我一样,对安卓手机的键盘系统有点儿不满意?想要换一个更顺手的键盘,但又不知道怎么操作?别...
怎么升级安卓14系统,解锁安卓... 你有没有发现,你的安卓手机最近是不是有点儿慢吞吞的?别急,别急,升级到安卓14系统,让你的手机焕发新...
安卓手机如何系统内录,轻松生成... 你有没有想过,有时候想要记录下手机里的精彩瞬间,却发现没有合适的工具?别急,今天就来教你怎么在安卓手...
最绚丽的安卓系统,最绚丽版本全... 哇,你知道吗?在安卓的世界里,有一款系统,它就像是一颗璀璨的明珠,闪耀着最绚丽的色彩。它就是——最绚...
小米系统安卓通知权限,深度解析... 亲爱的手机控们,你是否曾为手机通知栏里乱糟糟的信息而烦恼?又或者,你是否好奇过,为什么有些应用总是能...