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 只做出来四道比较水的题目,还需要加强中等题的训练 ...
随机推荐
- SPEC-RFC3261总述
最近学习VoLTE(Voice Vver LTE)相关知识,而学习VoLTE必须要学相关的协议,最基础的就是RFC3261,RFC3261的全称是:SIP: Session Initiation Pr ...
- 疯狂的String
本文转载自疯狂的String 导语 在java中字符串是我们比较常用的一个类型,字符串是不可变的,类被声明为final , 存储字符的char[] value数据也被声明为final ,我们对Stri ...
- 《Effective Java》总结
导语 <Effective Java>是和<Thinking in java>齐名的java进阶书籍.作者参与了JDK标准库的编写工作,对于此书的学习,让我收获很多.好记性不如 ...
- [Python学习笔记]正则表达式总结
常用缩写字符及其含义表格查询 缩写字符分类 含义 \d 0-9的任意数字 \D 除0-9的数字以外的任何字符 \w 任何字母.数字或下划线字符(可以认为是匹配"单词"字符) \W ...
- JavaScript实现动态添加员工
html代码: <div id="empAdd"> <fieldset> <legend><strong>添加员工</stro ...
- Mybatis系列全解(六):Mybatis最硬核的API你知道几个?
封面:洛小汐 作者:潘潘 2020 年的大疫情,把世界撕成几片. 时至今日,依旧人心惶惶. 很庆幸,身处这安稳国, 兼得一份安稳工. · 东家常讲的一个词:深秋心态 . 大势时,不跟风.起哄, 萧条时 ...
- MySQL 表的约束与数据库设计
DQL 查询语句 排序 # 单列排序 * 只按某一个字段进行排序,单列排序 # 组合排序 * 同时对多个字段进行排序,如果第1个字段相等,则按照第2个字段排序,依次类推 * 语法: # 具体操作 * ...
- sanic-jwt 的使用
Sanic 是基于 Python 的一个支持高并发的异步 web 框架,sanic-jwt 则是针对Sanic 开发的一个基于 PyJWT 封装的 JWT 授权认证模块. sanic-jwt 项目主页 ...
- python 操作符** (两个乘号就是乘方)
一个乘号*,如果操作数是两个数字,就是这两个数字相乘,如2*4,结果为8**两个乘号就是乘方.比如3**4,结果就是3的4次方,结果是81 *如果是字符串.列表.元组与一个整数N相乘,返回一个其所有元 ...
- 后台开发-核心技术与应用实践--TCP协议
网络模型 为使不同计算机厂家的计算机能够互相通信,国际标准化组织 ISO 1981 年正式推荐了一个网络系统结构一一七层参考模型,也叫作开放系统互连模型. ISO 七层网络模型及其功能展示: 这个七层 ...