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题解)的更多相关文章

  1. 【题解】Comet OJ 国庆欢乐赛 简要题解

    [题解]Comet OJ 国庆欢乐赛 简要题解 A 直接做 B 直接做,结论: \[ ans=\max([Max\ge \mathrm{sum}] Max,s[n]/2) \] C 考虑这样一个做法: ...

  2. 2021蓝桥杯省赛B组(C/C++)E.路径【最短路DP】

    2021蓝桥杯省赛B组题目(C/C++)E.路径 最短路径, 因为变化情况比较多, 所以开始想的是深搜, 但是太慢了, 跑不出来, 后来就想着优化一下, 有的地方到另一个地方可能会考虑很多遍, 于是考 ...

  3. 2021.07.02 P1383 高级打字机题解(可持久化平衡树)

    2021.07.02 P1383 高级打字机题解(可持久化平衡树) 分析: 从可以不断撤销并且查询不算撤销这一骚操作可以肯定这是要咱建一棵可持久化的树(我也只会建可持久化的树,当然,还有可持久化并查集 ...

  4. 2021蓝桥杯省赛C++A组试题E 回路计数 状态压缩DP详细版

    2021蓝桥杯省赛C++A组试题E 回路计数 状态压缩DP 题目描述 蓝桥学院由21栋教学楼组成,教学楼编号1到21.对于两栋教学楼a和b,当a和b互质时,a和b之间有一条走廊直接相连,两个方向皆可通 ...

  5. 2021 CCPC 威海站 VP记录(题解)

    2021 CCPC 威海站 VP记录(题解) 题目顺序为vp时开题顺序: A - Goodbye, Ziyin! 签到,连边数小于等于2的可以作为二叉树根,若有大于4的直接输出0. code: voi ...

  6. 【洛谷比赛】[LnOI2019]长脖子鹿省选模拟赛 T1 题解

    今天是[LnOI2019]长脖子鹿省选模拟赛的时间,小编表示考的不怎么样,改了半天也只会改第一题,那也先呈上题解吧. T1:P5248 [LnOI2019SP]快速多项式变换(FPT) 一看这题就很手 ...

  7. 第五场周赛(字符串卡常个人Rank赛)——题解

    本次题目因为比较简单,除了个别题目,其余题目我只写一个思路不再贴代码. 先是Div.2的题解 A题奇怪的优化,把递归函数改成2*fun(...)即可,其实看懂程序也不难,就是求a*2b: B题你会st ...

  8. 2020.3.23 模拟赛游记 & 题解

    这次的模拟赛,实在是水. 数据水,\(\texttt{std}\) 水,出题人水,做题人也水.??? 游记就说一句: 水. T1 metro 弱智题. 人均 \(100pts\). #pragma G ...

  9. 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解

    题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...

随机推荐

  1. django学习-18.*args和**kwargs的用法和使用场景

    目录结构 1.前言 2.[*args]的用法 2.1.第一步:首先编写这样的函数[test1]. 2.2.第二步:给函数[test1]赋值相关入参值. 2.3.第三步:调用函数[test1],得到以下 ...

  2. redis源码之dict

    大家都知道redis默认是16个db,但是这些db底层的设计结构是什么样的呢? 我们来简单的看一下源码,重要的字段都有所注释 typedef struct redisDb { dict *dict; ...

  3. 开发工具-scala处理json格式利器-json4s

    1.为什么是json4s 从json4s的官方描述 At this moment there are at least 6 json libraries for scala, not counting ...

  4. 1.go语言入门----Helloworld与包引用

    HelloWorld与包引用 学习一门语言的惯例都是从helloworld开始,go语言也不例外 在gopath下的src中创建一个helloworld目录,创建main.go文件 package m ...

  5. Oracle check TBS usage

    select d.tablespace_name, space||'M' "SUM_SPACE(M")", blocks "SUM_BLOCKS", ...

  6. Python插入排序

    升序 import random l = [] for i in range(8): l.append(random.randint(0,9)) print(l) for cur in range(1 ...

  7. 剑指 Offer 36. 二叉搜索树与双向链表 + 中序遍历 + 二叉排序树

    剑指 Offer 36. 二叉搜索树与双向链表 Offer_36 题目描述 题解分析 本题考查的是二叉树的中序遍历以及二叉排序树的特征(二叉排序树的中序遍历序列是升序序列) 利用排序二叉树中序遍历的性 ...

  8. CCF(引水入城:60分):最大流+ISAP算法

    引水入城 201703-5 这从题目分析来看很像最大流的问题,只需要增加一个超级源点和一个超级汇点就可以按照题意连边再跑最大流算法. 因为数据量太大了,肯定会超时.但是没有想到可行的解决方法. #in ...

  9. MySQL数据库之一

    数据库简介 数据库分类 关系型数据库(SQL):(狭义可以理解为行和列) MySQL,Oracle,Sql Server, DB2 通过表和表之间,行和列之间的关系进行存储 非关系型数据库(NoSQL ...

  10. slickgrid ( nsunleo-slickgrid ) 1 开篇有益

    slickgrid (nsunleo-slickgrid)  1 开篇有益  作为专职的程序猿,自认为是老菜鸟或老民工,以前一直在某浪上写博客,上知天文,下达地理.做了N年的.net,又转Java,从 ...