2021浙江省程序省赛(ACFGJLM题解)
A
签到,加起来就行了,记得等于属于先手赢(2A)
C
题意
给八个点三维坐标,问是否在三维是立方体
思路
八个点的连成56条线,如果是立方体的话有8条,24条,24条相同的线,且都不相同
用map存ll,别开根号就行,有精度问题的(1A)
F
题意
给你t个数据(1000个),两个数字n,m(1e8),n只能减,m只能加,问最小操作使得m%n==0
思路
m开根号暴力,然后要限制n的范围,我比赛没限制,血亏……
因为对称性就可以降复杂度m变成2 * sqrt(m)(赛后2A)
AC代码
#include <bits/stdc++.h>
#define endl '\n'
#define mem(a,b) memset(a,b,sizeof(a))
#define IOS ios::sync_with_stdio(false)
#define inf 0x3f3f3f3f
using namespace std;
const int N=3e3+10;
int n,t,m;
int main(){
scanf("%d",&t);
while(t--){
scanf("%d%d",&n,&m);
int k=sqrt(m);
int ans=2e8+10;
for(int i=1;i<=k;i++){
if(m%i==0){
if(n>=i){
ans=min(ans,abs(n-i));
}
if(n>=m/i){
ans=min(ans,abs(m/i-n));
}
}
else{
if(n>=i){
ans=min(ans,abs(n-i)+abs(i-m%i));
}
if(n>=m/i+1){
ans=min(ans,abs(m/i+1-n)+abs(m/i+1-m%(m/i+1)));
}
}
}
printf("%d\n",ans);
}
return 0;
}
/*
1
31 92
*/
G
题意
游戏中有一架用规则六边形拼成的飞机。这个平面上有蜂巢,蜂巢的方向是这样的:上面和下面都有六边形节点,左右两侧都有边缘,蜂巢与其所在行的相邻蜂巢共用。
随后的每一行相对于前一行移动半个蜂窝。轴沿水平蜂巢行从左到右。轴相对于轴倾斜60度。坐标轴在蜂巢处相交。
有攻击和查询两种操作。格莱美可以通过一次攻击行动征服一个蜂巢。
对于一个查询操作,格莱美想知道她是否在她征服的蜂巢和她没有征服的蜂巢之间筑起了墙,如果她从蜂巢出发在她的领地而不穿过任何墙,她能接触到多少墙
思路
因为5e5的范围,暴力连通块肯定tle,然后想到了并查集
用两个map分别标记占领的点(mp)和筑起的墙(vis)
然后每次查询如果这个点两个占领的点没标记过,遍历六个方向,看vis里面有没有墙,如果攻占过就直接输出并查集的父亲(参考ac代码的第二个样例)
每次攻击的点(开始给六面墙),遍历六个方向,如果遍历的点也是占领点的话,并起来,然后总数-2即可(因为双方都失去了一面墙)(比赛没做血亏,赛后1A)
AC代码
#include <bits/stdc++.h>
using namespace std;
struct node{
int x,y;
node(){}
node(int xx,int yy):x(xx),y(yy){}
friend bool operator<(const node a,const node b){
if(a.x==b.x)return a.y<b.y;
return a.x<b.x;
}
};
const int N=5e5+10;
int f[N],g[N];
int F(int x){
return f[x]==x?x:f[x]=F(f[x]);
}
int sx[6]={0,0,1,1,-1,-1};
int sy[6]={1,-1,0,-1,0,1};
int main(){
int n;
map<node,int>mp,vis;
scanf("%d",&n);
int cnt=1;
for(int i=1;i<=n;i++){
f[i]=i;g[i]=0;
}
for(int i=1;i<=n;i++){
int x,y,c;
scanf("%d%d%d",&c,&x,&y);
if(c==2){
int star=mp[node(x,y)];
if(star==0){
int ge=0;
for(int j=0;j<6;j++){
int xx=x+sx[j],yy=y+sy[j];
if(vis[node(xx,yy)]){
ge++;
}
}
printf("%d\n",ge);
}
else{
int u=F(star);
printf("%d\n",g[u]);
}
}
else{
int star=mp[node(x,y)];
if(star){
continue;
}
else{
mp[node(x,y)]=cnt;star=cnt++;
if(vis[node(x,y)]){
vis[node(x,y)]=0;
}
g[star]=6;
for(int j=0;j<6;j++){
int xx=x+sx[j],yy=y+sy[j];
int en=mp[node(xx,yy)];//cout<<en<<endl;
if(en){
int uu=F(star),vv=F(en);
if(uu!=vv){
f[uu]=vv;
g[vv]+=(g[uu]-2);//cout<<g[vv]<<endl;
}
else{
g[vv]-=2;
}
}
else{
vis[node(xx,yy)]=1;
}
}
}
}
}
return 0;
}
/*
8
1 0 0
2 0 0
1 0 2
1 1 2
1 0 3
2 0 3
1 0 1
2 0 0
6
1 -1 2
1 2 0
1 2 -2
1 -1 -1
1 -2 1
2 0 0
*/
J
题意
给你一个n点,m条边的无向图,2~n点上有珠宝,每个都有价值ai。从点1开始。穿过每一个边缘消耗1个单位时间。她可以在顶点捡起一块珠宝,然后在点1放下。捡起和放下一件珠宝可以立即完成。
此外,她在任何时候最多可以携带1件珠宝。
当她放下一件按顶点估价的珠宝时,她得到了它的价值。
现在,对于每一个时间单位,她想知道她能得到的最大值是多少。
思路
bfs找1点到每个点的最短距离,然后多重背包即可(9A)
AC代码
先咕了,明天再打
#include <bits/stdc++.h>
#define endl '\n'
#define mem(a,b) memset(a,b,sizeof(a))
#define IOS ios::sync_with_stdio(false)
#define inf 0x3f3f3f3f
using namespace std;
const int N=3e3+10;
int ne[N<<1],to[N<<1],head[N];
int vis[N];
int n,m,t;
int dp[N],bu[N];
int a[N],ans[N];
int tot=0;
void add(int u,int v){
ne[tot]=head[u];
to[tot]=v;
head[u]=tot++;
}
struct node{
int x,y;
node(){}
node(int xx,int yy):x(xx),y(yy){}
friend bool operator<(const node a,const node b){
return a.y>b.y;
}
};
void bfs(){
priority_queue<node>q;
q.push(node(1,0));
vis[1]=1;
while(!q.empty()){
node k=q.top();q.pop();
int u=k.x,b=k.y;
for(int i=head[u];~i;i=ne[i]){
int v=to[i];
if(!vis[v]){
q.push(node(v,b+1));
bu[v]=(b+1)*2;
vis[v]=1;
}
}
}
}
int main(){
scanf("%d%d%d",&n,&m,&t);
for(int i=2;i<=n;i++){
scanf("%d",&a[i]);
}
for(int i=0;i<=n;i++){
vis[i]=0;head[i]=-1;dp[i]=0;bu[i]=inf;ans[i]=0;
}
for(int i=0;i<m;i++){
int u,v;scanf("%d%d",&u,&v);
add(u,v);add(v,u);
}
bfs();
for(int i=2;i<=n;i++){
for(int j=bu[i];j<=t;j++){
ans[j]=max(ans[j],ans[j-bu[i]]+a[i]);
}
}
for(int i=1;i<=t;i++){
printf(i==t?"%d\n":"%d ",ans[i]);
}
return 0;
}
/*
5 6 5
2 3 4 5
1 2
4 5
5 5
2 3
1 3
3 3
*/
L
思路
没读过,队友告诉我笼统的写法,我kmp循环节直接过了(2A)
AC代码
#include <bits/stdc++.h>
#define endl '\n'
#define mem(a,b) memset(a,b,sizeof(a))
#define IOS ios::sync_with_stdio(false)
using namespace std;
const int N=1e5+10;
int ne[N];
char s[N];
void GetNext(){
int l=strlen(s);
int i=0;int j=-1;
ne[0]=-1;
while(i<l){
if(j==-1 || s[i]==s[j]){
i++;
j++;
ne[i] = j;
}
else
j = ne[j];
}
return;
}
int main(){
int f=1;
int n;
scanf("%d",&n);
scanf("%s",s);
GetNext();
for(int i=1;i<=n;i++){
if(i-ne[i]!=i){
f=0;break;
}
}
if(f){
printf("Correct\n");
}
else{
printf("Wrong Answer\n");
}
return 0;
}
/*
*/
M
题意
问每个同学可以选择1~20之内的数,如果别人的数大于自己的获得10分,不然扣10分,相等不扣分
问最高能获得分数的概率
思路
10分钟看完题面,贪逼队友说全是20,不是就是0.0000嘛,于是交了一发。(1A)
把能写的题写完,看I题题解看不懂,告辞
2021浙江省程序省赛(ACFGJLM题解)的更多相关文章
- 【题解】Comet OJ 国庆欢乐赛 简要题解
[题解]Comet OJ 国庆欢乐赛 简要题解 A 直接做 B 直接做,结论: \[ ans=\max([Max\ge \mathrm{sum}] Max,s[n]/2) \] C 考虑这样一个做法: ...
- 2021蓝桥杯省赛B组(C/C++)E.路径【最短路DP】
2021蓝桥杯省赛B组题目(C/C++)E.路径 最短路径, 因为变化情况比较多, 所以开始想的是深搜, 但是太慢了, 跑不出来, 后来就想着优化一下, 有的地方到另一个地方可能会考虑很多遍, 于是考 ...
- 2021.07.02 P1383 高级打字机题解(可持久化平衡树)
2021.07.02 P1383 高级打字机题解(可持久化平衡树) 分析: 从可以不断撤销并且查询不算撤销这一骚操作可以肯定这是要咱建一棵可持久化的树(我也只会建可持久化的树,当然,还有可持久化并查集 ...
- 2021蓝桥杯省赛C++A组试题E 回路计数 状态压缩DP详细版
2021蓝桥杯省赛C++A组试题E 回路计数 状态压缩DP 题目描述 蓝桥学院由21栋教学楼组成,教学楼编号1到21.对于两栋教学楼a和b,当a和b互质时,a和b之间有一条走廊直接相连,两个方向皆可通 ...
- 2021 CCPC 威海站 VP记录(题解)
2021 CCPC 威海站 VP记录(题解) 题目顺序为vp时开题顺序: A - Goodbye, Ziyin! 签到,连边数小于等于2的可以作为二叉树根,若有大于4的直接输出0. code: voi ...
- 【洛谷比赛】[LnOI2019]长脖子鹿省选模拟赛 T1 题解
今天是[LnOI2019]长脖子鹿省选模拟赛的时间,小编表示考的不怎么样,改了半天也只会改第一题,那也先呈上题解吧. T1:P5248 [LnOI2019SP]快速多项式变换(FPT) 一看这题就很手 ...
- 第五场周赛(字符串卡常个人Rank赛)——题解
本次题目因为比较简单,除了个别题目,其余题目我只写一个思路不再贴代码. 先是Div.2的题解 A题奇怪的优化,把递归函数改成2*fun(...)即可,其实看懂程序也不难,就是求a*2b: B题你会st ...
- 2020.3.23 模拟赛游记 & 题解
这次的模拟赛,实在是水. 数据水,\(\texttt{std}\) 水,出题人水,做题人也水.??? 游记就说一句: 水. T1 metro 弱智题. 人均 \(100pts\). #pragma G ...
- 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解
题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...
随机推荐
- Element-UI使用相关问题
1.如何修改el-dialog的样式? 要修改dialog的样式不能直接在<style scoped>中修改,这样修改后不会生效.做法是把scoped去掉,然后在dialog标签上自定义一 ...
- Docker 一键安装及Docker管理面板Portainer中文汉化
前言 Docker接触了一段时间了,批量操作过程中感觉太繁琐,所以找到了好评率比较高的Portainer面板,使用后感觉的确不错所以准备拿出来精力来做个汉化版,过程中发现词条非常多,所以暂时先汉 ...
- HBase 数据存储结构
在HBase中, 从逻辑上来讲数据大概就长这样: 单从图中的逻辑模型来看, HBase 和 MySQL 的区别就是: 将不同的列归属与同一个列族下 支持多版本数据 这看着感觉也没有那么太大的区别呀, ...
- 后端程序员之路 28、一个轻量级HTTP Server的实现
提到http server,一般用到的都是Apache和nginx这样的成熟软件,但是,有的情况下,我们也许也会用一些非常轻量级的http server.http server的c++轻量级实现里,M ...
- mysql 单表下的字段操作_查询
查询的规律 查询语句限定条件越多,查询范围越小: 1.整个表 Select * From 库名.表名 2.整个表的某字段内 Select id From 库名.表名 3.整个表某字段的范围内 Sele ...
- 最简单的,在win,linux中,用powershell,自动获取Let's Encrypt证书方法
powershell传教士原创 2020-04-12 Let's Encrypt证书有效期3个月,支持泛域名[*.你的网站.net].支持n天内(一般10天内就够用了),用脚本自动续期. 简介: 这个 ...
- MySql数据库列表数据分页查询、全文检索API零代码实现
数据条件查询和分页 前面文档主要介绍了元数据配置,包括表单定义和表关系管理,以及表单数据的录入,本文主要介绍数据查询和分页在crudapi中的实现. 概要 数据查询API 数据查询主要是指按照输入条件 ...
- 关于win10 编辑文件时权限不足问题
win10默认是不开启administrator账户的,所以一般是自己创建一个账户,但是此账户,可能会有些文件或文件夹,访问不了,编辑不了,这时候,只需要右键->属性->安全->编辑 ...
- 漫漫Java路1—基础知识2—注释和命名规则
## 注释 1. 单行注释 ```java //这是一个注释 ``` 2. 多行注释 ```java /* 这是一个注释 */ ``` 3. 文档注释 ```java /** * * * */ ``` ...
- 微软跨平台UI框架MAUI真的要来啦
.NET 6 preview已经上线,是时候为在BUILD 2020上宣布的新.NET Multi-platform App UI(MAUI)做准备了.对于客户端应用程序开发人员来说,这一年.NET有 ...