2.9模拟总结

文章目录

  • 前言
  • 题目解析
    • 序列计数(sequence)
    • T2 网格选点(grid)
    • T3 孤立点集(isolated)
  • 代码
    • T1
    • T2
    • T3
  • 总结

前言

180pts
30+50+100
rnk10

题目比较简单的一场考试。
不太满意。
T3是做过的原题,切了不算啥本事,而且还花了1.5h
T1、2都只混了个暴力分,有点惨。

题目解析

序列计数(sequence)

耳目一新的莫队题。
就是没想到…
由于T3整了太长时间,后来又先去了T2,这题从10:30才开始摸,做的时候时间不是很够了。
一开始就写个 ∑\sum 然后开始化。
从那一刻我这道题几乎就已经没了,后来一直在各种NTT,甚至还想到了NTT配合分块这种诡异的东西。
不要先入为主!
当一个思路不断的转化后遇到一个难以解决的问题时,不一定要在这个问题上死磕,也应该试试推翻之前的思路,从新审视一下这个题。
既然有组合数,也不是没想过杨辉三角,但是几乎只在大脑里存在了一瞬间…

S(x,y)=∑i=0xCyiS(x,y)=\sum_{i=0}^xC_y^iS(x,y)=i=0xCyi
(l,r,x)(l,r,x)(l,r,x) 的答案就是 S(r,x)−S(l−1,x)S(r,x)-S(l-1,x)S(r,x)S(l1,x)
考虑如何移动 x,yx,yx,y 指针。
(虽然依然有 x≤yx\le yxy,但叫它左右指针还是不太贴切了)
S(x,y+1)=S(x,y)+Cy+1xS(x,y+1)=S(x,y)+C_{y+1}^xS(x,y+1)=S(x,y)+Cy+1x
S(x,y−1)=S(x,y)−CyxS(x,y-1)=S(x,y)-C_y^xS(x,y1)=S(x,y)Cyx
S(x+1,y)=2×S(x,y)−CyxS(x+1,y)=2\times S(x,y)-C_y^xS(x+1,y)=2×S(x,y)Cyx
S(x−1,y)=S(x,y)+Cyx−12S(x-1,y)=\frac{S(x,y)+C_y^{x-1}}{2}S(x1,y)=2S(x,y)+Cyx1
前两个显然,第三个想想杨辉三角的转移即可得,第四个是第三个的逆过程。
然后就做完了。

T2 网格选点(grid)

怎么又是grid
本次考试可以说主攻的一道题。
可以说,题解PPT里的每行字我考场几乎都推出来了。
然后呢?
然后呢!
这个玩意证出来反向单调之后咋办啊…
上完线段树这个东西变得很难搞,每个点都转移区间都不一样。
现在也不知道怎么实现…

不过这个题单调性是推出来的而不是“感性理解”的,也算是一个突破吧

T3 孤立点集(isolated)

见到这个原题我是一点也不高兴。
当时我就被这个毒瘤东西恶心坏了。
但是毕竟是原题,还是最先做的。
(努力调用内存…)
差不多想起来了做法,但是忘记为什么可以这么做了…
然后发现自己第三问连怎么做也忘记了…
想了好久想起来可以暴力删点(与其说是想起来了不如说是做出来了)。
代码写起来不太难,匈牙利还是很香的,比dinic好写不知道多少,考场能用还是要用。
但是前前后后还是花了1.5h…

当时我做这个题的时候就是似懂非懂的,难怪如今再做的时候困难。
需要用一个 dilworth 定理,当时好像我根本就没理解这个定理。

代码

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=4e5+100;
const int B=150;
const int inf=1e9;
const int mod=998244353;int n,m;
int o=2e5,w;
inline ll ksm(ll x,ll k){ll res(1);while(k){if(k&1) res=res*x%mod;x=x*x%mod;k>>=1;}return res;
}
ll jc[N],ni[N];
int bel[N];
void init(){int n=o;w=sqrt(n);jc[0]=1;for(int i=1;i<=n;i++) jc[i]=jc[i-1]*i%mod;ni[n]=ksm(jc[n],mod-2);for(int i=n-1;i>=0;i--) ni[i]=ni[i+1]*(i+1)%mod;for(int i=1;i<=n;i++) bel[i]=(i-1)/w+1;//for(int i=1;i<=n;i++) printf("i=%d bel=%d\n",i,bel[i]);return;
}
inline ll C(int n,int m){return jc[n]*ni[m]%mod*ni[n-m]%mod;
}
int L,R;
struct query{int x,y,id,op;bool operator < (const query oth)const{if(bel[x]!=bel[oth.x]) return bel[x]<bel[oth.x];else{if(bel[x]&1) return y<oth.y;else return y>oth.y;}}
}q[N];
int ans[N],tot;
int x,y;
ll now;
int clo;
inline ll calc(int nx,int ny){while(nx<x) now=(now-C(y,x--)+mod)%mod,++clo;		while(nx>x) now=(now+C(y,++x))%mod,++clo;while(ny>y) now=(now*2-C(y++,x)+mod)%mod,++clo;while(ny<y) now=((now+C(--y,x))*ni[2])%mod,++clo;//printf("x=%d y=%d calc=%lld\n",x,y,now);return now;
}signed main(){freopen("sequence.in","r",stdin);freopen("sequence.out","w",stdout);//freopen("a.in","r",stdin);//freopen("a.out","w",stdout);n=read();init();for(int i=1;i<=n;i++){int l=read(),r=read(),x=read();q[++tot]=(query){l-1,x,i,-1};q[++tot]=(query){r,x,i,1};}sort(q+1,q+1+tot);//x=1,y=0;now=1;for(int i=1;i<=tot;i++){ans[q[i].id]=(ans[q[i].id]+q[i].op*calc(q[i].x,q[i].y)+mod)%mod;//printf("(%d %d) clock=%d\n",q[i].x,q[i].y,clo);}for(int i=1;i<=n;i++) printf("%d\n",ans[i]);//printf("clock=%d\n",clo);return 0;
}
/*
3
5 3 2
1 2 0
*/

T2

暂无qwq
但我可以把暴力贴过来

#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 B=920;
const int inf=1e9;
const int mod=998244353;int n,m;
struct node{int x,y;bool operator < (const node oth)const{return x<oth.x;}
}p[N];
int f[N];
ll x[N],y[N];
ll dp[N];signed main(){freopen("grid.in","r",stdin);freopen("grid.out","w",stdout);n=read();m=read();for(int i=1;i<=n;i++) p[i].x=read(),p[i].y=read();sort(p+1,p+1+n);for(int i=1;i<=n;i++) x[i]=p[i].x,y[i]=p[i].y;int mx(0);ll ans=2e18;for(int i=1;i<=n;i++){f[i]=1;for(int j=1;j<i;j++){if(y[j]<y[i]) f[i]=max(f[i],f[j]+1);}mx=max(mx,f[i]);}for(int i=1;i<=n;i++){if(f[i]==1) dp[i]=x[i]*y[i];else dp[i]=2e18;for(int j=1;j<i;j++){if(f[i]==f[j]+1&&y[j]<y[i]){dp[i]=min(dp[i],dp[j]+(x[i]-x[j])*(y[i]-y[j]));}}if(f[i]==mx) ans=min(ans,dp[i]+(m-x[i])*(m-y[i]));}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=230;
const int B=920;
const int inf=1e9;
const int mod=998244353;int n,m;
struct node{int to,nxt;
}p[N*N*2];
int fi[N],cnt;
inline void addline(int x,int y){p[++cnt]=(node){y,fi[x]};fi[x]=cnt;
}int mat[N],vis[N],tim;
int f[N][N],ban[N];
bool find(int x){if(ban[x]) return false;if(vis[x]==tim) return false;vis[x]=tim;for(int i=fi[x];~i;i=p[i].nxt){int to=p[i].to;if(ban[to]) continue;if(!mat[to]||find(mat[to])){mat[x]=to;mat[to]=x;return true;}}return false;
}
int hangry(){memset(mat,0,sizeof(mat));memset(vis,0,sizeof(vis));int res(0);for(int i=1;i<=n;i++) tim=i,res+=find(i);//for(int i=1;i<=n;i++) printf("i=%d mat=%d\n",i,mat[i]?mat[i]-n:0);//printf("match=%d\n",res);return res;
}
int tag[N];
void dfs(int x){if(tag[x]) return;tag[x]=1;for(int i=fi[x];~i;i=p[i].nxt){int to=p[i].to;tag[to]=1;assert(mat[to]);dfs(mat[to]);}
}signed main(){freopen("isolated.in","r",stdin);freopen("isolated.out","w",stdout);n=read();m=read();memset(fi,-1,sizeof(fi));cnt=-1;for(int i=1;i<=m;i++){int x=read(),y=read();f[x][y]=1;}for(int k=1;k<=n;k++){for(int i=1;i<=n;i++){for(int j=1;j<=n;j++) f[i][j]|=(f[i][k]&f[k][j]);}}for(int i=1;i<=n;i++){for(int j=1;j<=n;j++){if(f[i][j]) addline(i,j+n),addline(j+n,i);//printf("(%d %d)\n",i,j);}}int ans=n-hangry();printf("%d\n",ans);//ans=n-hangry();//printf("%d\n",ans);for(int i=n+1;i<=n+n;i++) if(!mat[i]) dfs(i);for(int i=1;i<=n;i++){if(tag[i+n]&&!tag[i]) printf("1");else printf("0");}puts("");for(int i=1;i<=n;i++){memset(ban,0,sizeof(ban));int S(0);for(int x=1;x<=n;x++) if(i==x||f[x][i]||f[i][x]) ban[x]=ban[x+n]=1,++S;int res=n-S-hangry()+1;//printf("res=%d\n",res);if(res==ans) printf("1");else printf("0");}return 0;
}
/*
5 2
2 4
1 5
1 2
2 3
3 4
3 5
*/

总结

做题有的时候真的挺随缘的。
T1想到了一下就通了,想不到就是想不到。
还有T2这种,临门一脚就是射不出去,真心挺郁闷的。
还是太弱了,榜上那几个大佬总是屹立不倒的。
见到这种可离线互相独立的询问就应该多少想一想莫队。
还有,不能在一个思路吊死,思路打开。
明天加油吧!awa

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

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

相关文章

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、几个瞎眼而普遍…

2.13模拟总结

文章目录前言题目解析最小划分&#xff08;divide&#xff09;进制路径&#xff08;base&#xff09;欧拉欧拉&#xff08;eular&#xff09;代码T1T2T3总结前言 day9 170pts 期望&#xff1a;10010020220 实际&#xff1a;701000170 rnk7 挂的分有点多qwq 分数要是得满就能拿…

Panasonic Programming Contest (AtCoder Beginner Contest 195) 题解

文章目录A - Health M DeathB - Many OrangesC - CommaD - Shipping CenterE - Lucky 7 BattleF - Coprime PresentPanasonic Programming Contest (AtCoder Beginner Contest 195)A - Health M Death 判断倍数。 #include <cstdio> int main() {int M, H;scanf( "…

长沙.NET社区之光

奈何万事开头难迎着改革开放四十年带来的春风&#xff0c;长沙的互联网生态环境以唐胡子俱乐部为首的一众互联网社群将长沙互联网的环境推上了一个新的台阶。年底&#xff0c;我与有幸一起共事的溪源兄&#xff0c;下班后一起闲聊&#xff0c;觉着长沙的.NET的生态环境亟待改善…

P3205 [HNOI2010]合唱队

P3205 [HNOI2010]合唱队 题意&#xff1a; 有n个数&#xff0c;然后插入队伍中&#xff0c;如果队列当前为空&#xff0c;则直接插入&#xff0c;然后每次插入和上一次插入的比较&#xff0c;如果大于&#xff0c;插入当前队列的最右侧&#xff0c;如果小于&#xff0c;插入当…

2.14模拟总结

前言 节日快乐&#xff01; (逃) day10 50pts 期望&#xff1a;10302060 实际&#xff1a;0302050 rnk11 彻彻底底的摆烂局了。 但是rnk竟然没有太掉&#xff0c;所以我应该并不孤独… 和KH并排坐在机房里&#xff0c;各自看着电脑&#xff0c;痴痴想着各自的心事&#xff0c;…