AtCoder Beginner Contest 356 - VP记录

news/2024/11/13 13:34:27/文章来源:https://www.cnblogs.com/jerrycyx/p/18540340

A - Subsegment Reverse

点击查看代码
#include<cstdio>
#include<numeric>
#include<algorithm>
using namespace std;const int N=105;
int n,a[N],l,r;int main()
{scanf("%d%d%d",&n,&l,&r);iota(a+1,a+n+1,1);reverse(a+l,a+r+1);for(int i=1;i<=n;i++)printf("%d ",a[i]);return 0;
}

B - Nutrients

高桥出镜率 \(100 \%\)

点击查看代码
#include<cstdio>
using namespace std;const int N=105,M=105;
int n,m,a[M],x[N][M],b[M];int main()
{scanf("%d%d",&n,&m);for(int i=1;i<=m;i++)scanf("%d",&a[i]);for(int i=1;i<=n;i++)for(int j=1;j<=m;j++){scanf("%d",&x[i][j]);b[j]+=x[i][j];}bool ans=true;for(int i=1;i<=m;i++)if(b[i]<a[i]){ans=false;break;}printf("%s\n",ans?"Yes":"No");return 0;
}

C - Keys

每次必有的暴力练习题。

点击查看代码
#include<cstdio>
using namespace std;const int N=20,M=105;
int n,m,k;
int c[M],a[M][N],bt[M];
bool res[M];int main()
{scanf("%d%d%d",&n,&m,&k);for(int i=1;i<=m;i++){scanf("%d",&c[i]);for(int j=1;j<=c[i];j++){scanf("%d",&a[i][j]);bt[i]|=1<<(a[i][j]-1);}char str[5]; scanf("%s",str);res[i]=str[0]=='o';}int ans=0;for(int z=0;z<1<<n;z++){bool is_ok=true;for(int i=1;i<=m;i++)if((__builtin_popcount(z&bt[i])>=k) != res[i]){is_ok=false;break;}if(is_ok) ans++;}printf("%d\n",ans);return 0;
}

D - Masked Popcount

找出 \([0,n]\) 中所有数二进制第 \(i\) 位上 \(1\) 的数量。

这是构成一个循环的,具体来说,例如 \(i=3\) 的时候,\([4,7],[12,15],[20,23],[28,31]\dots\) 的第 \(3\) 位上有 \(1\),即每 \(2^i\) 个数中有 \(2^{i-1}\) 个数第 \(i\) 位是 \(1\)

所以我们找出循环的数量,然后剩下的一截判断是否在第 \(i\) 位上有 \(1\) 的数值区间内,若有就加上剩下的一块 \(1\)

最后若 \(m\) 在某一位上有 \(1\),答案就要加上这一位上 \(1\) 的数量。

注意我代码里二进制最低位是第 \(0\) 位。

#include<cstdio>
using namespace std;const int LogN=60,P=998244353;
long long n,m;
long long cnt[LogN+5];int main()
{scanf("%lld%lld",&n,&m);long long ans=0;for(int i=0;i<=LogN;i++){long long t=n;long long cycle=(t+1)>>(i+1);cnt[i]+=cycle<<i;t-=cycle<<(i+1);if(t>=1ll<<i) cnt[i]+=t-(1ll<<i)+1;if((m>>i)&1) ans=(ans+cnt[i])%P;}printf("%lld\n",ans);return 0;
}

E - Max/Min

最恶心的一道,没有之一。

\(a\) 从小到大排序,答案转化为:

\[\sum_{i=2}^{n} \sum_{j=1}^{i-1} \left\lfloor\frac{a_i}{a_j}\right\rfloor \]

然后将答案分为 \(a_i=a_j\)\(a_i \neq a_j\) 两种情况。对于第一种情况,直接用公式即可算,难点在于第二种。

对于 \(\lfloor\frac{a_i}{a_j}\rfloor\),因为除数和商不可能都大于 \(\sqrt{a_i}\),所以将情况分为除数小于等于 \(\sqrt{a_i}\) 和被除数小于等于 \(\sqrt{a_i}\),而对于后面一种情况,为避免重复,非常不建议枚举的时候直接判断被除数(我就是这么挂十发的),而应该采用判断“除数大于 \(\sqrt{a_i}\)”的判断方式,这样才可以保证不重不漏。

  • 第一种情况:可能的商有 \(\sqrt{a_i}\) 种,当被除数、商一定时(\(\lfloor x \div y \rfloor = z\)),除数是一个确定的区间 \(\left[\lfloor\frac{x}{y+1}\rfloor+1,\lfloor\frac{x}{y}\rfloor\right]\),预处理出值域前缀和就可以直接算。

  • 第二种情况:可能的除数有 \(\sqrt{a_i}\) 种,当被除数、除数一定时,商唯一确定。直接加就行。

注意找的时候均必须找 \(a_j\) 严格小于 \(a_i\),因为等于是在刚才单独计算的。

总的来说,我这种方法代码细节超多,不是很建议学。

时间复杂度 \(O(n \sqrt{n})\)

#include<cstdio>
#include<algorithm>
#pragma GCC optimize(2)
using namespace std;namespace IO{
template<typename TYPE> void read(TYPE &x)
{x=0; bool neg=false; char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')neg=true;ch=getchar();}while(ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+(ch^'0');ch=getchar();}if(neg) {x=-x;} return;
}
template<typename TYPE> void write(TYPE x)
{if(!x){putchar('0');return;} if(x<0){putchar('-');x=-x;}static int sta[55]; int statop=0; while(x){sta[++statop]=x%10;x/=10;}while(statop) {putchar('0'+sta[statop--]);} return;
}
} using namespace IO;const int N=2e5+5,A=1e6+5;
int n,a[N],maxa;
long long ans=0;int cnt[A];
#define qrange(l,r) (cnt[r]-cnt[(l)-1])int main()
{read(n);for(int i=1;i<=n;i++){read(a[i]);cnt[a[i]]++;maxa=max(maxa,a[i]);}for(int i=1;i<=maxa;i++){if(cnt[i]) ans+=1ll*cnt[i]*(cnt[i]-1)/2;cnt[i]+=cnt[i-1];}sort(a+1,a+n+1);for(int i=1;i<=n;i++){for(long long j=1;j*j<=a[i];j++) //ö¾ÙÉÌans+=j*qrange(a[i]/(j+1)+1,min(a[i]/j,1ll*a[i]-1));for(long long j=1;(a[i]/j)*(a[i]/j)>a[i];j++) //ö¾Ù³ýÊý ans+=(a[i]/j)*qrange(j,min(j,1ll*a[i]-1));}write(ans);return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/831931.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

IDEA-idea激活

通过百度网盘分享的文件:IDEA激活工具 链接:https://pan.baidu.com/s/18QIqrMVE4ScNhBjhwde_7Q 提取码:sky1二、重启电脑

说明与笔记导航

对使用这些笔记的同学想说的话,以及更新进度。为什么写这么多B东西? 其一呢是帮助我自己,边写笔记边梳理知识;其二呢是帮助各位义父义母考试成功。 更新进度与内容说明 11.11:本周工作日需突击学习python,计划今晚更新有限体积法剩余部分。 目前进度:3009 建模:数值方法…

鸿蒙NEXT开发案例:指尖轮盘

【1】引言 “指尖轮盘”是一个简单而有趣的互动游戏(类似抓阄),这个应用通过触摸屏幕的方式,让玩家参与一个激动人心的游戏,最终选出幸运的赢家。未来可以进一步扩展功能,如增加游戏模式、优化动画效果、增加音效等,提升用户体验。 【2】环境准备 电脑系统:windows 10 …

antD——Warning: `callback` is deprecated. Please return a promise instead.

参考: 1. https://blog.csdn.net/huochai770880/article/details/125925665我的情况 antD表单校验,代码未报错,但提交时控制台报错:Warning: `callback` is deprecated. Please return a promise instead.原报错代码:const validateParams = useCallback((_: RuleObject, …

Qml 中的那些坑(七)---ComboBox嵌入Popup时,滚动内容超过其可见区域不会关闭ComboBox弹窗

最近在写信息提交 ( 表单 ) 的窗口时发现一个奇怪的 BUG: 可以看到,当 `ComboBox` 嵌入 `Popup` 时,点开 `ComboBox`,然后滚动内容超过其可见区域并不会关闭 `ComboBox` 弹窗,并且会超出其 `父 Popup` 范围。【写在前面】 最近在写信息提交 ( 表单 ) 的窗口时发现一个奇怪…

【Cytoscape 3.10软件下载与安装教程】

1、安装包 Cytoscape3.10: 链接:https://pan.quark.cn/s/0fc00372f3a4 提取码:styP Cytoscape3.9 链接:https://pan.quark.cn/s/f2747b32fe54 提取码:ean2 Cytoscape3.8: 链接:https://pan.quark.cn/s/c6092262f108 提取码:24G6 Cytoscape3.7: 链接:https://pan.qua…

max 函数与 min 函数相关

max 函数与 min 函数相关前情概要 只要有两个实数,就会涉及能大小比较的问题,那么只要有两个函数,自然也会涉及能大小比较的问题,比如我们熟悉的两个简单函数 \(y=2x+1\) 和 \(y=-x+1\),做出两个函数的图象如下,从图象可以看出,当 \(x<0\) 时,\(g(x)>f(x)\);当 …

kafka监控

kafka监控部署 kafka使用Prometheus、Grafana和kafka_exporter来构建kafka指标监控 问题背景 在实时场景下,对于数据积压是很常见的,我们更希望如何去快速知道有没有数据积压,目前消费了多少,速度怎么样,趋势如何。可以使用原生命令kafka-consumer-groups.sh --bootstrap-…

实景三维赋能地灾风险管控

在当今社会,随着城市化进程的加速以及工业化的发展,地质灾害成为了威胁人们生命财产安全的重要因素之一。特别是在全球气候变化的背景下,极端天气事件的增多导致地质灾害的发生频率和强度都有所上升。因此,如何有效地进行地质灾害的风险管控,成为当前亟待解决的问题之一。…

20222301 2024-2025-1 《网络与系统攻防技术》实验五实验报告

1.实验内容 (1)从www.besti.edu.cn、baidu.com、sina.com.cn中选择一个DNS域名进行查询,获取如下信息: ①DNS注册人及联系方式 ②该域名对应IP地址 ③IP地址注册人及联系方式 ④IP地址所在国家、城市和具体地理位置 (2)尝试获取BBS、论坛、QQ、MSN中某一好友的IP地址,并…

高级语言程序设计作业 11/11

2024高级语言程序设计:https://edu.cnblogs.com/campus/fzu/2024C 高级语言程序设计课程第五次作业:https://edu.cnblogs.com/campus/fzu/2024C/homework/13304 学号:102400215 姓名:胡加乘1 #include <iostream>using namespace std;#define ROWS 3 #define COLS 5i…

win 11 开发板,windows,ubuntu虚拟机网络互通

确保在同一个网段里面就行 如果ping开发板不通,将win防火墙关闭了试一试 虚拟机使用桥接模式,桥接到正确的网卡上,此处使用的是usb网卡 编辑->虚拟机网络编辑器ubuntu手动设置桥接的网卡信息此处ens32是桥接的网卡 ens33是NAT网卡windows也是同样设置,注意网段保持一致虚拟机…