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 只做出来四道比较水的题目,还需要加强中等题的训练 ...
随机推荐
- django学习-7.html模板中include标签使用场景
1.前言 假设一个公司A有一个网站B,且网站B有5个不同的页面分别为C1,C2,C3,C4,C5. 那么,我们在打开这5个不同页面后去查看页面的整体内容,会发现每个页面的顶部内容.底部内容都一模一样. ...
- C++算法代码——Tuna
这道题像个水题啊,可是在我做的这个OJ上就十几人做出来-- 题目来自:http://218.5.5.242:9018/JudgeOnline/problem.php?id=2084 题目描述 渔民抓住 ...
- Java开发的得力助手---Guava
导语 guava是google出品的java类库,被google广泛用于内部项目,该类库经过google大牛们的千锤百炼,以优雅的设计在java世界流行.版本迭代至今,很多思想甚至被JDK标准库借鉴, ...
- IHttpClientFactory 踩过的坑
public class BasicUsageModel : PageModel { private readonly IHttpClientFactory _clientFactory; publi ...
- 学习String源码的部分方法
先看构造器: private final char value[]; //char类型的数组 以下均会用到 private int hash; //缓存字符串的哈希值 //以下均会用到 public ...
- [计算机图形学]Blinn-Phong光照模型
目录 一.前言 二.原理 三.代码 一.前言 Blinn-Phong光照模型以Phong模型为基础的,提供比Phong更柔和.更平滑的高光,而且由于Blinn-Phong的光照模型省去了计算反射光线的 ...
- 在Windows服务中添加定时器
创建windows服务: 在VisualStudio中用C#创建一个Windows服务,微软MSDN参考地址: http://msdn.microsoft.com/zh-cn/library/zt39 ...
- MySQL提权 通过UDF
目录 UDF是什么 命令执行 文本写入 Example: 远程写入 反弹Shell 提权 UDF是什么 参考:https://www.cnblogs.com/litlife/p/9030673.htm ...
- 【HTB系列】靶机Bitlab的渗透测试
出品|MS08067实验室(www.ms08067.com) 本文作者:是大方子(Ms08067实验室核心成员) 0x00 本文目录 反思与总结 基本信息 渗透测试过程 补充 0x01 反思与总结 c ...
- Springboot 轻量替代框架 Solon 1.3.10 发布
Solon 是一个微型的Java开发框架.项目从2018年启动以来,参考过大量前人作品:历时两年,4000多次的commit:内核保持0.1m的身材,超高的跑分,良好的使用体验.支持:RPC.REST ...