2.8模拟总结

前言

80pts
30+30+20
rnk10
三个暴力分…
T2拿虚树玩了半天结果假了qwq
乍一看似乎都挺可做的。
但是一道都做不出来
(觉得写考场过程有点流水账,不写了,一些想说的写在对应题目里吧)

题目解析

T1 三角查找(triangle)

乍一看巨可做的题,但想了很久也没做出来…
枚举线段,在距离上二分找点的做法也想到过,但是当时就卡在如何维护点关于不同线段的距离始终有序上。
题解的做法挺巧妙的,两个点关于某条线段的距离的偏序关系是由它们连线和当前线段斜率相对大小关系决定的,所以把线段极角排序,一开始把点按照第一个线段的距离sort一遍,之后枚举到当前线段就把线段两端点swap一下即可。
说实话,这个玄学做法考场即使我观察到斜率的性质可能也不太敢写,太诡异了。
但确实是对的。

T2 连通的图(connected)

这次考试就砸这题上了。
建个生成树再找基环显而易见,然后我猜了个结论,在n=2的时候都是对的(所以我就得了30分),我就以为可以推广了。
为什么不试试n=3啊!!
然后为这个结论服务我就开始兴致勃勃的建虚树,然后写一些类似 kkk^kkk 的暴搜,似乎能过不少分的。
但是最后事实是k=8都会T,因为我那个虚树的结点数是 O(k)O(k)O(k),挂个四倍常数左右

所以我只挂了20分!
正解的关键是一个结论:

令第 iii 条非树边的权值为 2i2^i2i,树边权值为覆盖其的非树边的异或和,则图不连通的充要条件是断边集合的一个子集权值异或和为0。

这个结论似乎见到过,但是考试的时候没有想到…
有了这个结论,写个暴搜用线性基判一下合法就行了。
必须在搜索过程中判到非法直接返回,不然会T(别问我为什么知道)
复杂度 O(玄学)O(玄学)O()

T3 奇妙的树(graph)

这个题的感觉挺难的,主要感觉就是方向太多了,难以找到有用的那一个。
题目的性质其实就是按照bfs序编号
gi=max⁡j,faj<ig_i=\max j,fa_j<igi=maxj,faj<i,那么对于一次询问 (l,r)(l,r)(l,r),那么所有的贡献答案的点对有且仅有 [l,min⁡(r,gl)][l,\min(r,g_l)][l,min(r,gl)] 的每个点各自的子树内的所有点对,那么也就是编号属于 [l,r][l,r][l,r] 的结点在子树内权值和的平方。
如何快速统计这个东西?
考虑分块,预处理时每经过 n\sqrt nn 个结点就统计一遍子树权值平方和,然后每次询问的时候找到对应所在块,利用预处理的前缀和快速算出答案,再把 O(n)O(\sqrt n)O(n) 的散点暴力维护进去。
暴力维护需要一个 k 级祖先,讲解说树剖常数小都能过,我长剖 O(1)O(1)O(1) 都过不去,服了。

代码

T1

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define ull unsigned long long
#define debug(...) fprintf(stderr,__VA_ARGS__)
#define ok debug("OK\n")
inline ll read(){ll x(0),f(1);char c=getchar();while(!isdigit(c)){if(c=='-') f=-1;c=getchar();}while(isdigit(c)){x=(x<<1)+(x<<3)+c-'0';c=getchar();}return x*f;
}
const int N=2e3+100;
const int M=2e5+100;
const double inf=1e18;
const int mod=998244353;int n;
ll m;
struct pt{ll x,y;
}p[N];
inline pt operator - (const pt &a,const pt &b){return (pt){a.x-b.x,a.y-b.y};
}
inline ll operator ^ (const pt &a,const pt &b){return a.x*b.y-b.x*a.y;
}
struct line{int a,b;double k;bool operator < (const line oth){return k<oth.k;}
}l[N*N];int tot;
int x[N],A,B;
inline ll calc(int x){return (p[B]-p[A])^(p[x]-p[A]);
}
bool cmp(int x,int y){return calc(x)<calc(y);
}
int find(ll val){int st=1,ed=n;while(st<ed){int mid=(st+ed)>>1;ll res=calc(x[mid]);if(res>=val) ed=mid;else st=mid+1;}return x[st];
}
int pl[N];signed main(){freopen("triangle.in","r",stdin);freopen("triangle.out","w",stdout);n=read();m=read();m<<=1;for(int i=1;i<=n;i++){p[i].x=read();p[i].y=read();}for(int i=1;i<=n;i++){for(int j=i+1;j<=n;j++){l[++tot]=(line){i,j,p[i].x==p[j].x?inf:1.0*(p[j].y-p[i].y)/(p[j].x-p[i].x)};}}sort(l+1,l+1+tot);A=l[1].a;B=l[1].b;for(int i=1;i<=n;i++) x[i]=i;sort(x+1,x+1+n,cmp);for(int i=1;i<=n;i++) pl[x[i]]=i;for(int i=1;i<=tot;i++){A=l[i].a;B=l[i].b;//printf("\n(%d %d) mid=%d\n",A,B,pl[A]);//for(int j=1;j<=n;j++) printf("%d ",x[j]);//puts("");int st=1,ed=pl[A],o(0);while(st<ed){int mid=(st+ed+1)>>1;//	printf("  (%d %d) mid=%d calc=%lld\n",st,ed,mid,abs(calc(x[mid])));if(abs(calc(x[mid]))>=m) st=mid;else ed=mid-1;}o=x[st];//printf("o=%d\n",o);if(abs(calc(o))==m){puts("Yes");printf("%lld %lld\n",p[o].x,p[o].y);printf("%lld %lld\n",p[A].x,p[A].y);printf("%lld %lld\n",p[B].x,p[B].y);return 0;}st=pl[A],ed=n;while(st<ed){int mid=(st+ed)>>1;if(abs(calc(x[mid]))>=mid) ed=mid;else st=mid+1;}o=x[st];//printf("  o=%d\n",o);if(abs(calc(o))==m){puts("Yes");printf("%lld %lld\n",p[o].x,p[o].y);printf("%lld %lld\n",p[A].x,p[A].y);printf("%lld %lld\n",p[B].x,p[B].y);return 0;}swap(x[pl[A]],x[pl[B]]);swap(pl[A],pl[B]);}puts("No");return 0;
}
/*
5 2
2 4
1 5
1 2
2 3
3 4
3 5
*/

T2

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define ull unsigned long long
#define debug(...) fprintf(stderr,__VA_ARGS__)
#define ok debug("OK\n")
inline ll read(){ll x(0),f(1);char c=getchar();while(!isdigit(c)){if(c=='-') f=-1;c=getchar();}while(isdigit(c)){x=(x<<1)+(x<<3)+c-'0';c=getchar();}return x*f;
}
const int N=2e5+100;
const int M=2e5+100;
const int inf=1e9;
const int mod=998244353;int n,m;
struct node{int to,nxt;
}p[N<<1];
int fi[N],cnt;
bool tag[N<<1];
inline void addline(int x,int y){p[++cnt]=(node){y,fi[x]};fi[x]=cnt;
}
int u[25],v[25],num;
int pl[N][20],dep[N],dfn[N],tim;
void dfs1(int x,int f){dep[x]=dep[f]+1;pl[x][0]=f;for(int k=1;pl[x][k-1];++k) pl[x][k]=pl[pl[x][k-1]][k-1];dfn[x]=++tim;for(int i=fi[x];~i;i=p[i].nxt){int to=p[i].to;if(to==f) continue;if(dep[to]){tag[i]=tag[i^1]=1;if(dep[to]<dep[x]){++num;u[num]=x;v[num]=to;}continue;}dfs1(to,x);}return;
}
int val[N];
void dfs2(int x,int f){for(int i=fi[x];~i;i=p[i].nxt){int to=p[i].to;if(tag[i]||to==f) continue;dfs2(to,x);val[x]^=val[to];}return;
}
int bac[N],w[N],tot;ll ans(0);int b[20],x[100];
int pos,ori;
bool ins(int now){for(int k=m-1;k>=0;k--){if(!(now&(1<<k))) continue;if(!b[k]){pos=k;ori=b[k];b[k]=now;return true;}now^=b[k];}return false;
}void solve(int k,int num,ll cur){if(k>tot){ans=(ans+cur)%mod;return;}solve(k+1,num,cur);if(ins(w[k])){int p=pos,o=ori;solve(k+1,num+1,cur*bac[w[k]]%mod);b[p]=o;}	
}signed main(){freopen("connected.in","r",stdin);freopen("connected.out","w",stdout);memset(fi,-1,sizeof(fi));cnt=-1;n=read();m=read();for(int i=1;i<=n+m-1;i++){int x=read(),y=read();addline(x,y);addline(y,x);}dfs1(1,0);for(int i=1;i<=m;i++){//printf("(%d %d)\n",u[i],v[i]);val[u[i]]^=(1<<(i-1));val[v[i]]^=(1<<(i-1));}dfs2(1,0);for(int i=2;i<=n;i++){//printf("i=%d val=%d\n",i,val[i]);if(bac[val[i]]==0) w[++tot]=val[i];bac[val[i]]++;}for(int i=1;i<=m;i++){if(bac[1<<(i-1)]==0) w[++tot]=1<<(i-1);bac[1<<(i-1)]++;}//for(int i=1;i<=tot;i++) printf("w=%d bac=%d\n",w[i],bac[w[i]]);solve(1,0,1);printf("%lld\n",ans);return 0;
}
/*
5 2
2 4
1 5
1 2
2 3
3 4
3 5
*/

T3

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define ull unsigned long long
#define debug(...) fprintf(stderr,__VA_ARGS__)
#define ok debug("OK\n")
inline ll read(){ll x(0),f(1);char c=getchar();while(!isdigit(c)){if(c=='-') f=-1;c=getchar();}while(isdigit(c)){x=(x<<1)+(x<<3)+c-'0';c=getchar();}return x*f;
}
const int N=5e3+100;
const int M=2e5+100;
const int inf=1e9;
const int mod=998244353;int n,m;
struct node{int to,nxt;
}p[N<<1];
int fi[N],cnt;
inline void addline(int x,int y){p[++cnt]=(node){y,fi[x]};fi[x]=cnt;
}
ll s[N][N],val[N];
void dfs(int x){s[x][x]=val[x];for(int i=fi[x];~i;i=p[i].nxt){int to=p[i].to;dfs(to);for(int j=1;j<=n;j++) s[x][j]=(s[x][j]+s[to][j])%mod;}
}
int l,r;
ll solve(int x){ll ans(0);for(int i=fi[x];~i;i=p[i].nxt){int to=p[i].to;ans=(ans+solve(to))%mod;}if(l<=x&&x<=r){ll now=val[x];ans=(ans+now*now)%mod;for(int i=fi[x];~i;i=p[i].nxt){int to=p[i].to;ll add=(s[to][r]-s[to][l-1]+mod)%mod;ans=(ans+2*now*add)%mod;now=(now+add)%mod;}}return ans;
}signed main(){freopen("slight.in","r",stdin);freopen("slight.out","w",stdout);memset(fi,-1,sizeof(fi));cnt=-1;n=read();m=read();for(int i=1;i<=n;i++) val[i]=read();for(int i=2;i<=n;i++) addline(read(),i);dfs(1);for(int i=1;i<=n;i++){for(int j=1;j<=n;j++) s[i][j]=(s[i][j]+s[i][j-1])%mod;}int lst(0);for(int i=1;i<=m;i++){l=read()^lst,r=read()^lst;printf("%d\n",lst=solve(1));}return 0;
}
/*
5 2
2 4
1 5
1 2
2 3
3 4
3 5
*/

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

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

相关文章

如何在ASP.NET Core中使用JSON Patch

原文&#xff1a; JSON Patch With ASP.NET Core作者&#xff1a;.NET Core Tutorials译文&#xff1a;如何在ASP.NET Core中使用JSON Patch地址&#xff1a;https://www.cnblogs.com/lwqlun/p/10433615.html译者&#xff1a;Lamond LuJSON Patch是一种使用API显式更新文档的方…

Codeforces Round #709 (Div. 2, based on Technocup 2021 Final Round) 题解

文章目录A. Prison BreakB. Restore ModuloC. Basic DiplomacyD. PlaylistE. Skyline PhotoF. Useful Edges#709 (Div. 2)A. Prison Break 就是每个监狱破一扇门&#xff0c;输出aba\times bab即可 B. Restore Modulo 就是取模意义下的操作&#xff0c;分大小操作&#xff0…

351E. Jeff and Permutation

351E. Jeff and Permutation 题意&#xff1a; 一个长度为n的序列&#xff0c;你可以选择一些位置&#xff0c;使其变成相反数&#xff0c;问逆序对最少是多少&#xff1f; 题解&#xff1a; 对于第i位&#xff0c;我们开始考虑他能决定的逆序对&#xff1f;对于其他任意位…

.NET Core RSA密钥的xml、pkcs1、pkcs8格式转换和JavaScript、Java等语言进行对接

众所周知在.NET下的RSA类所生成的密钥为Xml格式&#xff0c;而其他语言比如java一般使用pkcs8格式的密钥&#xff0c;JavaScript一般使用pkcs1格式。我们在开发过程中很可能遇到需要与其他语言开发的api进行对接&#xff0c;如果遇到RSA加密解密&#xff0c;我们肯定需要保证ke…

2.9模拟总结

文章目录前言题目解析序列计数&#xff08;sequence&#xff09;T2 网格选点&#xff08;grid&#xff09;T3 孤立点集&#xff08;isolated&#xff09;代码T1T2T3总结前言 180pts 3050100 rnk10 题目比较简单的一场考试。 不太满意。 T3是做过的原题&#xff0c;切了不算啥…

AtCoder Beginner Contest 203(Sponsored by Panasonic)题解

文章目录A - ChinchirorinB - AtCoder CondominiumC - Friends and Travel costsD - PondE - White PawnF - WeedABC203A - Chinchirorin 三个条件if判 #include <cstdio> int main() {int a, b, c;scanf( "%d %d %d", &a, &b, &c );if( a b ) …

AcWing 1068. 环形石子合并

AcWing 1068. 环形石子合并 题意&#xff1a; n堆石头围成一个圈&#xff0c;然后将相邻两堆合并成新的一堆&#xff0c;得分为新的一堆的石头数 问最高得分合最低得分 题解&#xff1a; 很简单&#xff0c;区间dp的模板题 和这个题一样 状态转移方程&#xff1a; dpmax[i]…

2.10模拟总结

文章目录前言题目解析随机减法&#xff08;calculate&#xff09;大图书馆&#xff08;bibliotheca&#xff09;子串选取 &#xff08;substr&#xff09;代码T1T2T3总结前言 200pts 4010060 rnk3 拿到牌勒嘿嘿嘿&#xff08;脑补流口水黄豆&#xff09; T3两个log想在ybt的机…

ABP VNext 微服务演示,项目状态和路线图

在ABP vNext上的第一个公告之后,我们对代码库进行了很多改进(GitHub存储库上的1100多次提交).我们已经创建了功能,示例,文档等等.在这篇文章中,我想告诉你一些新闻和项目的状态.ABP微服务演示解决方案ABP框架的主要目标之一是提供创建微服务解决方案的便利基础设施.我们一直在努…

加分二叉树

加分二叉树 题意&#xff1a; 给你一个数的中序表达式&#xff0c;然后一颗子树的分数左子树的分数*右子树的分数根的分数 给你所有点的分数&#xff0c;让你构造出分值最大的树&#xff0c;输出前序遍历 题解&#xff1a; 区间dp问题 设dp[i][j]表示中序遍历是w[i~j]的所有…

AtCoder ZONe Energy Programming Contest 题解

文章目录A - UFO InvasionB - Sign of FriendshipC - MAD TEAMD - Message from AliensE - SneakingF - Encounter and FarewellZONe Energy Programming ContestA - UFO Invasion 太简单了。 #include <cstdio> char ch[10] { Z, O, N, e }; char s[20];int main() {…

2.11模拟总结

前言 145&#xff08;175&#xff1f;&#xff09;pts 100450&#xff08;30&#xff1f;&#xff09; rnk11&#xff08;8&#xff1f;&#xff09; 之所以有括号是因为T3莫名其妙的TLE了&#xff1f; 考后我一模一样的码再交一遍30分就到手了… 应该不是我的问题吧&#xff…

[aspnetcore.apidoc]一款很不错的api文档生成工具

简单徐速一下为什么选用了aspnetcore.apidoc 而没有选用swagger最初我们也有在试用swagger&#xff0c;但总是有些感觉&#xff0c;感觉有点不满意&#xff0c;就但从api文档角度来说&#xff0c;从前后端文档沟通角度来讲apidoc的表现形式&#xff0c;要比swagger简单的多&…

【学习笔记】浅谈短小可爱的左偏树(可并堆)

文章目录左偏树左偏树的合并(merge)操作例题罗马游戏[Apio2012]dispatching[JLOI2015]城池攻占[Baltic2004]sequence左偏树 左偏树是一个堆&#xff0c;而且是一个可并堆&#xff0c;所以一定有权值的限制 以小根堆为例&#xff0c;那么必须满足节点权值小于左右儿子权值&…

2.12 模拟

文章目录前言题目解析染色计划&#xff08;color&#xff09;奇度边集&#xff08;edges&#xff09;猜拳游戏&#xff08;guess&#xff09;代码T1T2LCT整体二分总结前言 120pts 期望&#xff1a;4010020160 实际&#xff1a;406020120 rnk 9 我yue了。 怎么又是不可抗力性挂…

Acwing1069. 凸多边形的划分

Acwing1069. 凸多边形的划分 题意&#xff1a; 一个N个顶点的凸多边形&#xff0c;划分成N-2个互不相交的三角形&#xff0c;对于每个三角形&#xff0c;其三个顶点的权值相乘都可得到一个权值乘积&#xff0c;试求所有三角形的顶点权值乘积之和至少为多少。 题解&#xff1…

徐磊(Devops):一名写了十几年代码但还没写够的程序员

徐磊&#xff08;Devops 社区领袖&#xff09;【个人介绍】徐磊&#xff0c;微软MVP&#xff08;微软最有价值专家&#xff0c;大中华区域社区技术总监&#xff0c;Devops 社区领袖&#xff09;&#xff0c;从事过网管、技术支持、网络、软件开发等工作&#xff0c;一名写了十几…

加强版[BZOJ#3483] SGU505 Prefixes and suffixes(询问在线版)

文章目录descriptionsolutioncode#3483. SGU505 Prefixes and suffixes&#xff08;询问在线版&#xff09;description 给定&#x1d45b;个字符串&#xff0c;有&#x1d45a;个询问。 每个询问给出两个字符串&#x1d460;1, &#x1d460;2&#xff0c;问&#x1d45b;个字…

AcWing 320. 能量项链

AcWing 320. 能量项链 题意&#xff1a; 题解&#xff1a; 和环形石头合并基本一样 代码&#xff1a; #include<bits/stdc.h> #define debug(a,b) printf("%s %d\n",a,b); typedef long long ll; using namespace std;inline int read(){int s0,w1;char c…

ERP不规范,同事两行泪

最近的很多次对外交流&#xff0c;都聊到了ERP建设的话题&#xff0c;并且无一例外的不那么让人省心&#xff0c;回想我这么多年走过的ERP坑坑路&#xff0c;在这里也写下经验和总结&#xff0c;希望能给正在或者即将走上ERP建设路的企业一些思考和帮助。导读1、几个瞎眼而普遍…