【LGR-191-Div.4】洛谷入门赛 #24
【LGR-191-Div.4】洛谷入门赛 #24
\(A\) luogu B3984 [语言月赛 202406] 编程学习 AC
-
\(\left\lceil\frac{y-x}{2}\right\rceil\) 即为所求,搞不懂为什么 \(10^{18}\) 就把
long double
放过去,担心精度的话做法同 [ABC345B] Integer Division Returns ,代码写的做法是后者。点击查看代码
int main() { ll x,y; cin>>x>>y; cout<<(y-x+1)/2<<endl; return 0; }
\(B\) luogu B3985 [语言月赛 202406] 气球 AC
-
条件语句。
点击查看代码
int main() { int x,i; for(i=1;i<=3;i++) { cin>>x; if(x==1) { cout<<"B"; } if(x==2) { cout<<"Y"; } if(x==3) { cout<<"R"; } } return 0; }
\(C\) luogu B3986 [语言月赛 202406] 小 Z 的 Z 矩阵 AC
-
循环语句。
点击查看代码
int main() { int n,i,j; cin>>n; for(i=1;i<=n;i++) { if(i==1||i==n) { for(j=1;j<=n;j++) { cout<<"Z"; } } else { for(j=1;j<=n;j++) { if(j==n-i+1) { cout<<"Z"; } else { cout<<"-"; } } } cout<<endl; } return 0; }
\(D\) luogu B3987 [语言月赛 202406] 朋友数列 AC
-
由于 \(|a_{i}|,|b_{i}| \le 10^{9}\) ,而 \(a_{i}+b_{i}\) 取极大或极小值可能无法满足 \(|b_{i}| \le 10^{9}\) 的条件,故折中取 \(a_{i}+b_{i}=0\) 即可,即 \(b_{i}=-a_{i}\) 。
点击查看代码
int main() { ll n,x,i; cin>>n; for(i=1;i<=n;i++) { cin>>x; cout<<-x<<" "; } return 0; }
\(E\) luogu B3988 [语言月赛 202406] 天然气计价 AC
-
条件语句,同 luogu B2047 分段函数 | luogu B2048 计算邮资 。
-
对应每一个新的月份均重新计算当前总费用,减去上个月及之前的即为所求。
点击查看代码
int main() { double x,y,sum=0,last=0; for(int i=1;i<=12;i++) { cin>>x; sum+=x; y=0; if(0<=sum&&sum<=310) { y=sum*3; } else { if(sum<=520) { y=(sum-310)*3.3+310*3; } else { y=(sum-520)*4.2+310*3+210*3.3; } } printf("%.1lf\n",y-last); last=y; } return 0; }
\(F\) luogu B3989 [语言月赛 202406] 优惠券
-
从贪心的角度分析,我们可能需要尽可能多地使用优惠券,这就需要我们尽可能多地获得优惠券。
-
将 \(a\) 升序排序后,枚举获得的优惠券张数 \(i\) ,同时这些优惠券一定来自前 \(i\) 杯奶茶。
-
最终,有 \(\min\limits_{i=1}^{n} \{ \sum\limits_{j=1}^{n}a_{i}-\min(i,\sum\limits_{j=i+1}^{n}a_{j}) \}\) 极为所求。
点击查看代码
int a[1010],sum[1010]; int main() { int n,ans=0x7f7f7f7f,i; cin>>n; for(i=1;i<=n;i++) { cin>>a[i]; sum[i]=sum[i-1]+a[i]; } for(i=1;i<=n;i++) { ans=min(ans,sum[n]-min(i,sum[n]-sum[i])); } cout<<ans<<endl; return 0; }
\(G\) luogu B3990 [语言月赛 202406] 通配符匹配
-
枚举左端点,暴力比较即可。
点击查看代码
char s[1010],t[1010]; int main() { int lens,lent,sum=0,l,r,i; cin>>(s+1)>>(t+1); lens=strlen(s+1); lent=strlen(t+1); for(l=1,r=lent;r<=lens;l++,r++) { sum=0; for(i=1;i<=lent;i++) { sum+=(s[l+i-1]==t[i]||s[l+i-1]=='?'||t[i]=='?'); } if(sum==lent) { cout<<l<<" "<<r<<endl; } } return 0; }
\(H\) luogu B3991 [语言月赛 202406] 数组交换 AC
-
加强版: luogu B3977 [语言月赛 202405] 更好的交换
-
不是很理解入门赛本月出上月的题的弱化,上月的题是去年春测的题的弱化是什么意思。
-
类似 luogu P9117 [春季测试 2023] 涂色游戏 ,记录两个数组分别存储第 \(i\) 行/列当前元素是原本哪一行/列的元素即可。
点击查看代码
int a[1010][1010],p[1010],q[1010]; int main() { int n,m,pd,x,y,i,j; cin>>n>>m; for(i=1;i<=n;i++) { p[i]=q[i]=i; for(j=1;j<=n;j++) { cin>>a[i][j]; } } for(i=1;i<=m;i++) { cin>>pd>>x>>y; if(pd==1) { swap(p[x],p[y]); } if(pd==0) { swap(q[x],q[y]); } } for(i=1;i<=n;i++) { for(j=1;j<=n;j++) { cout<<a[p[i]][q[j]]<<" "; } cout<<endl; } return 0; }
-
-
暴力交换行、列即可。
点击查看代码
char a[1010][1010]; int main() { int n,m,q,pd,x,y,i,j; cin>>n>>m>>q; for(i=1;i<=n;i++) { for(j=1;j<=m;j++) { cin>>a[i][j]; } } for(i=1;i<=q;i++) { cin>>pd>>x>>y; if(pd==1) { for(j=1;j<=m;j++) { swap(a[x][j],a[y][j]); } } if(pd==2) { for(j=1;j<=n;j++) { swap(a[j][x],a[j][y]); } } if(pd==3) { cout<<a[x][y]<<endl; } } for(i=1;i<=n;i++) { for(j=1;j<=m;j++) { cout<<a[i][j]; } cout<<endl; } return 0; }
总结
- 开题顺序: \(ABCDEFHGF\)
- 写这场比赛的时候,一开始机房的 luogu “经常性”地被毙,只有 @5k_sync_closer 的口述题面;加以正在开三模总结大会,开完大会(晚一下课后)就溜了,导致整场比赛的参加时间不超过半小时。
- \(D\) :结论一眼没看出来,吃了发罚时。
- \(E\) :没看见 年用气量 ,一边写假代码一边还在好奇为啥这么便宜,测完样例重读一遍题后才看见。
- \(F\) :当时以为是什么高级结论想了一晚上也没想出来,离谱。
- \(G\) :以为比较的是 \(s,t\) 的子段,把题想麻烦了不少。
本文来自博客园,作者:hzoi_Shadow,原文链接:https://www.cnblogs.com/The-Shadow-Dragon/p/18265866,未经允许严禁转载。
版权声明:本作品采用 「署名-非商业性使用-相同方式共享 4.0 国际」许可协议(CC BY-NC-SA 4.0) 进行许可。