2.11模拟总结

前言

145(175?)pts
100+45+0(30?)
rnk11(8?)
之所以有括号是因为T3莫名其妙的TLE了?
考后我一模一样的码再交一遍30分就到手了…
应该不是我的问题吧,今天考试的机子确实有些诡异,一开始评测乱七八糟的qwq。

感觉整体发挥没有大的失误。
但是排名就是不太好…
感觉今天题也不算太简单阿qwq
可能只有我这么认为吧
如果一场考试摆烂的时间太长,似乎几乎很难拿到太好的排名…
就像这次,最后10:45左右开始就没啥事干了,一直在检查代码…
中间还和lyn学长聊了回天

题目解析

字符变换(character)

由于操作1,只要字母个数相同,就可以任意互相转化,属于同一个“等价类”,其方案数也可以用不可重排列求得(__int128 天下第一!)
当 n=30 时,等价类个数是 5500 左右(以后称等价类个数为 www
然后题目给出的操作二的转化就是在不同的等价类之间转移,暴力加边复杂度是 O(wm)O(wm)O(wm) 的,可以接受。
然后跑个tarjan缩点,再跑个带权最长路径的简单 dp 即可。

这个题确实没有太大的难度,思路整体是比较顺的。

格子染色(color)

魔法题目。
拿到45分足矣。
本题的正解做法就是观察sg函数表找规律,离大谱。
尤其 k=1 的sg,规律是:“当n>=52时,存在一个大小为 34 的周期”。
这个甚么神人能看出来啊…
其实你要告诉我是类似的东西也未见得看不出来,但是实在不会想到会是这种鬼畜的规律…
k=2的 sg 性质的推导可以使用类似于数学归纳法的东西(然而打表还是很好用),其实这个规律比那个鬼畜东西强多了,但是由于 k=1 我都没看出来规律,就没有打 k=2 的表,大损失。

以线覆圆(circle)

很妙的一个状压 dp。
非离散的期望感觉根本没法做的样子…
关键是:一个方案真正关心的只有其整数部分的绝对大小和小数部分的相对大小关系
所以可以暴力枚举小数部分的大小,然后就变成了类似于 n∗mn*mnm 个点上状压。
然鹅由于某些奥秘重重的问题,我就是过不去。

最后写的n=2点30分被ybt机子吃了??
赛后再交一遍一样的码就拿到了30分…
我谔谔。

代码

T1

#include<bits/stdc++.h>
using namespace std;
#define ll __int128
#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;
}
void write(ll x){if(x>9) write(x/10);putchar('0'+x%10);
}
const int N=5500;int n,m;int num[N][5],tot;
ll jc[35],val[N<<1];int id[31][31][31][31];
int x[5];
void print(int x){printf("(%d %d %d %d) ",num[x][1],num[x][2],num[x][3],num[x][4]);
}
void dfs(int k,int lft){if(k==4){x[k]=lft;++tot;for(int i=1;i<=4;i++) num[tot][i]=x[i];val[tot]=jc[n]/jc[x[1]]/jc[x[2]]/jc[x[3]]/jc[x[4]];id[x[1]][x[2]][x[3]][x[4]]=tot;//printf("%d: ",tot);print(tot);puts("");return;}for(int i=0;i<=lft;i++){x[k]=i;dfs(k+1,lft-i);}return;
}
struct node{int to,nxt;
}p[N*N];
int fi[N<<1],cnt;
inline void addline(int x,int y){p[++cnt]=(node){y,fi[x]};fi[x]=cnt;
}
int s[5],t[5];
int now[5];
char s1[N],s2[N];
int dfn[N<<1],low[N<<1],zhan[N<<1],col[N<<1],top,tim;
void tarjan(int x){dfn[x]=low[x]=++tim;zhan[++top]=x;for(int i=fi[x];~i;i=p[i].nxt){int to=p[i].to;if(!dfn[to]){tarjan(to);low[x]=min(low[x],low[to]);}else if(!col[to]) low[x]=min(low[x],dfn[to]);}if(low[x]==dfn[x]){col[x]=++tot;val[tot]=val[x];while(zhan[top]!=x){int now=zhan[top--];col[now]=tot;val[tot]+=val[now];}top--;}
}
ll dp[N<<1];
ll find(int x){if(dp[x]) return dp[x];dp[x]=val[x];for(int i=fi[x];~i;i=p[i].nxt){int to=p[i].to;dp[x]=max(dp[x],find(to)+val[x]);}return dp[x];
}signed main(){freopen("character.in","r",stdin);freopen("character.out","w",stdout);//printf("%d\n",sizeof(p)/1024/1024);//printf("%d\n",sizeof(e)/1024/1024);//printf("%d\n",sizeof(id)/1024/1024);//printf("%d\n",sizeof(val)/1024/1024);memset(fi,-1,sizeof(fi));cnt=-1;n=read();m=read();ok;jc[0]=1;for(int i=1;i<=n;i++) jc[i]=jc[i-1]*i;dfs(1,n);//printf("tot=%d\n",tot);for(int tim=1;tim<=m;tim++){memset(s,0,sizeof(s));memset(t,0,sizeof(t));scanf(" %s %s",s1+1,s2+1);int len=strlen(s1+1);if(len>n) continue;for(int i=1;i<=len;i++) s[s1[i]-'A'+1]++;for(int i=1;i<=len;i++) t[s2[i]-'A'+1]++;//printf("\ntim=%d\n",tim);//for(int i=1;i<=4;i++) printf("%d ",s[i]);puts("");//for(int i=1;i<=4;i++) printf("%d ",t[i]);puts("");for(int i=1;i<=tot;i++){int flag(0);for(int j=1;j<=4;j++){now[j]=num[i][j]-s[j];if(now[j]<0) flag=1;}if(flag) continue;for(int j=1;j<=4;j++) now[j]+=t[j];int to=id[now[1]][now[2]][now[3]][now[4]];addline(i,to);//printf("%d->%d\n",i,to);}}n=tot;for(int i=1;i<=n;i++){if(!dfn[i]) tarjan(i);}for(int i=1;i<=n;i++){for(int j=fi[i];~j;j=p[j].nxt){int to=p[j].to;if(col[i]==col[to]) continue;addline(col[i],col[to]);}}ll ans(0);for(int i=n+1;i<=tot;i++) ans=max(ans,find(i));write(ans);return 0;
}
/*
*/

T2

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define ull unsigned long long
#define debug(...) fprintf(stderr,__VA_ARGS__)
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=1e5+100;int n,m;
int a[N];struct AA{int sg[N];int bac[N],clo;int find(int x){if(x>54){x-=54;x%=34;x+=54;}if(x<=2) return 0;if(sg[x]!=-1) return sg[x];for(int i=2;i<=x-1;i++){find(i-1);find(x-i);}++clo;for(int i=2;i<=x-1;i++){bac[find(i-1)^find(x-i)]=clo;}sg[x]=0;while(bac[sg[x]]==clo) ++sg[x];return sg[x];}void work(){memset(sg,-1,sizeof(sg));//for(int i=1;i<=1000;i++) printf("%d\n",find(i));//exit(0);int now=1,ans(0);for(int i=1;i<=n;i++){if(a[i]){ans^=find(now);now=0;}else ++now;}++now;ans^=find(now);if(ans) printf("YES\n");else printf("NO\n");}
}A;struct BB{int sg[N][3][3];int bac[N],clo;int find(int x,int l,int r){if(!l&&!r) return x&1;else if(!l||!r) return x;else return l==r;if(x==0) return 0;if(sg[x][l][r]!=-1) return sg[x][l][r];for(int i=1;i<=x;i++){for(int j=1;j<=2;j++){if(i==1&&j==l) continue;if(i==x&&j==r) continue;find(i-1,l,j);find(x-i,j,r);}}++clo;for(int i=1;i<=x;i++){for(int j=1;j<=2;j++){if(i==1&&j==l) continue;if(i==x&&j==r) continue;bac[find(i-1,l,j)^find(x-i,j,r)]=clo;}}sg[x][l][r]=0;while(bac[sg[x][l][r]]==clo) ++sg[x][l][r];//printf("x=%d (%d %d) sg=%d\n",x,l,r,sg[x][l][r]);return sg[x][l][r];}void work(){memset(sg,-1,sizeof(sg));int now=0,lst=0,ans=0;for(int i=1;i<=n+1;i++){if(a[i]||i>n){ans^=find(now,lst,a[i]);now=0;lst=a[i];}else ++now;//printf("i=%d now=%d lst=%d ans=%d\n",i,now,lst,ans);}ans^=find(now,lst,0);if(ans) puts("YES");else puts("NO");}
}B;struct CC{void work(){int num(0);for(int i=1;i<=n;i++) num+=(a[i]==0);if(num&1) puts("YES");else puts("NO");}
}C;signed main(){freopen("color.in","r",stdin);freopen("color.out","w",stdout);n=read();m=read();for(int i=1;i<=n;i++) a[i]=read();if(m==1) A.work();else if(m==2) B.work();else C.work();return 0;
}
/*
*/

T3

调不出来了

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define ull unsigned long long
#define debug(...) fprintf(stderr,__VA_ARGS__)
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=1e5+100;
const int mod=998244353;int n,m;
ll f[350][150],mi[8],b;
int a[8],vis[8],pl[8],id[8];
double ans;
void calc(){for(int i=1;i<=n;i++) id[pl[i]]=i;memset(f,0,sizeof(f));f[a[1]*n+1][1]=1;for(int i=1;i<=n*m;i++){int k=(i-1)%n+1;for(int s=0;s<mi[n];s++){if(s&mi[k-1]) continue;for(int p=i;p<=n*m;p++){f[min(n*m+1,max(p,i+a[k]*n))][s|mi[k-1]]+=f[p][s];}}}ans+=1.0*f[n*m+1][mi[n]-1];
}
int clo;
void dfs(int k){if(k>n){calc();++clo;return;}for(int i=2;i<=n;i++){if(vis[i]) continue;pl[k]=i;vis[i]=1;dfs(k+1);vis[i]=0;}return;
}signed main(){freopen("circle.in","r",stdin);freopen("circle.out","w",stdout);n=read();m=read();b=1;for(int i=1;i<n;i++) b*=m*i;for(int i=1;i<=n;i++) a[i]=read();sort(a+1,a+1+n);swap(a[1],a[n]);mi[0]=1;for(int i=1;i<=n;i++) mi[i]=mi[i-1]<<1;vis[1]=1;pl[1]=1;dfs(2);//for(int i=1;i<n;i++) ans/=i;ans/=b;//ans*=2;printf("%.12lf\n",ans);//printf("b=%lld clo=%d\n",b,clo);return 0;
}
/*
4 6
1 2 3 4
*/

总结

今天整体还不错,没有挂分。
ybt机子的锅就不算了吧。

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

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

相关文章

[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;…

KYOCERA Programming Contest 2021(AtCoder Beginner Contest 200)题解

文章目录A - CenturyB - 200th ABC-200C - Ringos Favorite Numbers 2D - Happy Birthday! 2E - Patisserie ABC 2F - Minflip SummationKYOCERA Programming Contest 2021&#xff08;AtCoder Beginner Contest 200&#xff09; A - Century 简单的除以200200200向上取整 B…

高级进阶:Azure DevOps搞定.NET Core编译版本号自增

点击上方蓝字关注“汪宇杰博客”熟悉.NET Framework的人知道&#xff0c;我们可以通过指定AssemblyVersion为10.0.*来让编译器自增版本号。但是.NET Core和.NET Standard不行。即使有MSBump这样的开源项目&#xff0c;也有一定的缺陷。一般这样的需求会出现在CI/CD服务器上。我…

Little Boxes UVALive - 8209

Little Boxes UVALive - 8209 题意&#xff1a; 给你四个数&#xff0c;输出四个数之和&#xff0c;四个数小于等于262之内 题解&#xff1a; 这。。。这。。水题 unsigned int 0&#xff5e;4294967295 (10位数&#xff0c;4e9) int -2147483648&#xff5e;2147483647 (…

2.15模拟总结

前言 day11 期望&#xff1a;406030130 实际&#xff1a;4003070 rnk16 挂大分了。。 T2树边不加双向&#xff1a;60->0。 这什么伞兵bug啊&#xff01; 整体状态也不太好&#xff0c;T2死磕无果。 T1看出正解结果写不出来拉插&#xff0c;乐。 题目解析 T1 网格序列&am…

Mynavi Programming Contest 2021(AtCoder Beginner Contest 201)题解

文章目录A - Tiny Arithmetic SequenceB - Do you know the second highest mountain?C - Secret NumberD - Game in Momotetsu WorldE - Xor DistancesF - Insertion SortMynavi Programming Contest 2021&#xff08;AtCoder Beginner Contest 201&#xff09;A - Tiny Arit…

Newbe.Claptrap - 一套以 “事件溯源” 和“Actor 模式”作为基本理论的服务端开发框架...

本文是关于 Newbe.Claptrap 项目主体内容的介绍&#xff0c;读者可以通过这篇文章&#xff0c;大体了解项目内容。轮子源于需求随着互联网应用的蓬勃发展&#xff0c;相关的技术理论和实现手段也在被不断创造出来。诸如 “云原生架构”、“微服务架构”、“DevOps” 等一系列关…

Rabbits UVALive - 8211

Rabbits UVALive - 8211 题意&#xff1a; n个兔子的位置&#xff0c;兔子每次可以跳到两个兔子之间&#xff0c;问最多可以跳多少下&#xff1f; 题解&#xff1a; 求出所有相邻两数的间隔&#xff0c;然后减去最小间隔就是答案 代码&#xff1a; #include <bits/std…