一个人有表里两面,你能看到的,仅仅是其中一面而已。

前言

看着这套题非常不可做,但是经历的所有的模拟赛中,这次还是第一次切题(惭愧)

本来 T1 我 1h 就码完了,交了一遍 TLE90 然后后来两个小时的时候感觉不太稳,就开了氧气又交了一遍。。。

然后,就比 yspm 的提交晚了 10min ,痛失首 A。

T1 遗忘之祭仪

解题思路

小水题一道。

我打的是 \(n^4\) 的做法,但是剪枝完也就是差不多 \(n^2\) 的复杂度了。。

直接暴力扫,判断是不是可以放符卡,可以的话直接放就好了。

然后对于所谓的 \(n^2\) 的做法无非是通过 X 进行配对而已(好像没啥差别)

code

#include<bits/stdc++.h>
#define ull unsigned long long
#define f() cout<<"Pass"<<endl
using namespace std;
inline int read()
{
int x=0,f=1;
char ch=getchar();
while(ch>'9'||ch<'0')
{
if(ch=='-') f=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9')
{
x=(x<<1)+(x<<3)+(ch^48);
ch=getchar();
}
return x*f;
}
const int N=1e3+10,INF=2e9;
int T,n,m,a,b,dsum,fksum;
bool s[N][N],opt[N][N];
char ch[N];
void solve()
{
for(int i=1;i<=n-a+1;i++)
for(int j=1;j<=m-b+1;j++)
{
if(!s[i][j]&&opt[1][1]) continue;
bool jud=false;
for(int p=1;p<=a;p++)
{
if(jud) break;
for(int q=1;q<=b;q++)
{
if(!s[i+p-1][j+q-1]&&opt[p][q])
{
jud=true;
break;
}
}
}
if(jud) continue;
for(int p=1;p<=a;p++)
for(int q=1;q<=b;q++)
s[i+p-1][j+q-1]^=opt[p][q];
}
for(int i=1;i<=n;i++)
for(int j=1;j<=m;j++)
if(s[i][j])
{
printf("No\n");
return ;
}
printf("Yes\n");
}
void init()
{
dsum=0,fksum=0;
n=read();
m=read();
a=read();
b=read();
int aa=0,bb=0,pa=INF,pb=INF;
for(int i=1;i<=n;i++)
{
scanf("%s",ch+1);
for(int j=1;j<=m;j++)
{
s[i][j]=(ch[j]=='x');
dsum+=s[i][j];
}
}
for(int i=1;i<=a;i++)
{
scanf("%s",ch+1);
for(int j=1;j<=b;j++)
{
opt[i][j]=(ch[j]=='x');
fksum+=opt[i][j];
if(opt[i][j])
{
aa=max(aa,i);
pa=min(pa,i);
bb=max(bb,j);
pb=min(pb,j);
}
}
}
a=aa;
b=bb;
if(pa!=1)
{
for(int i=1;i<=a-pa+1;i++)
for(int j=1;j<=b;j++)
opt[i][j]=opt[i+pa-1][j];
a=a-pa+1;
}
if(pb!=1)
{
for(int i=1;i<=a;i++)
for(int j=1;j<=b-pb+1;j++)
opt[i][j]=opt[i][j+pb-1];
b=b-pb+1;
}
}
signed main()
{
T=read();
while(T--)
{
init();
if(a>n||b>m||(!fksum&&dsum)||(fksum&&dsum%fksum!=0))
{
printf("No\n");
continue;
}
solve();
}
return 0;
}

T2 客星璀璨之夜

解题思路

期望题,考场上看错题面,然后暴力就码错了,挂了 30pts

这个题目,正着推好像有些艰难,考虑逆推。

首先枚举星球的个数,然后枚举每一个位置上的坐标从上一层转移过来的概率,进而求出期望值。

对于每一个位置,从上一层转移过来的概率设为 p 则 \(p=\lfloor\frac{2n+1-i}{2}\rfloor\)

对于恒星有如下转移方程:

\[f_{n,i}=(f_{n-1,i}\times p+f_{n-1,i-2}\times (n-p-1)+\dfrac{f_{n-1,i-1}+f_{n-1,i-2}+1}{2})\div n
\]

对于行星有如下转移方程:

\[f_{n,i}=(f_{n-1,i}\times p+f_{n-1,i-2}\times (n-p-1)+\dfrac{f_{n-1,i}+f_{n-1,i-1}+1}{2})\div n
\]

code

#include<bits/stdc++.h>
#define int long long
#define ull unsigned long long
#define f() cout<<"Pass"<<endl
using namespace std;
inline int read()
{
int x=0,f=1;
char ch=getchar();
while(ch>'9'||ch<'0')
{
if(ch=='-') f=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9')
{
x=(x<<1)+(x<<3)+(ch^48);
ch=getchar();
}
return x*f;
}
const int N=6e3+10,mod=998244353;
int n,ans,s[N],inv[N],f[N][N];
void INV()
{
inv[0]=inv[1]=1;
for(int i=2;i<=n*2+1;i++)
inv[i]=(mod-mod/i)*inv[mod%i]%mod;
}
signed main()
{
n=read();
INV();
for(int i=1;i<=2*n+1;i++)
s[i]=read();
for(int i=1;i<=n;i++)
for(int j=2,p=(2*i+1-j)/2;j<=2*i+1;j++,p=(2*i+1-j)/2)
if(j&1) f[i][j]=(f[i-1][j]*p%mod+f[i-1][j-2]*(i-p-1)%mod+(f[i-1][j-1]+f[i-1][j-2]+1)%mod*inv[2]%mod)%mod*inv[i]%mod;
else f[i][j]=(f[i-1][j]*p%mod+f[i-1][j-2]*(i-p-1)%mod+(f[i-1][j]+f[i-1][j-1]+1)%mod*inv[2]%mod)%mod*inv[i]%mod;
for(int i=2;i<=2*n+1;i++)
ans=(ans+f[n][i]*(s[i]-s[i-1])%mod)%mod;
printf("%lld",ans);
return 0;
}

T3 割海成路之日

解题思路

挺好的一个题。

一般的题都是通过链的操作联想到树上。

但是,这个题对于链的操作用的线段树需要有区间的性质,似乎不能上树。。。

因此考虑别的算法。

最容易想到的就是冰茶几,毕竟所有点之间为 1 的边都可以直接缩起来。

但是这个优化好像并没有什么用。

于是我们考虑把 2 也给压进去,但是显然要和 1 做区分。

因此,开两个冰茶几,分别维护压缩路径 1 以及压缩路径 1 和 2 的情况。

接下来有了这个思路就是维护冰茶几的大小。

但是问题又出现了,对于路径 3 我们似乎无法维护。

总不能在搞一个 冰茶几吧。。。。

于是我们选择在每一条 3 所联通的节点上存储下 3 所连接的节点的贡献就好了。

代码实现上有亿点难度。。。

code

#include<bits/stdc++.h>
#define int long long
#define ull unsigned long long
#define f() cout<<"Pass"<<endl
using namespace std;
inline int read()
{
int x=0,f=1;
char ch=getchar();
while(ch>'9'||ch<'0')
{
if(ch=='-') f=-1;
ch=getchar();
}
while(ch>='0'&&ch<='9')
{
x=(x<<1)+(x<<3)+(ch^48);
ch=getchar();
}
return x*f;
}
const int N=3e5+10;
int n,m,ans,die[N],s[N],f[N];
int siz[2][N],fa[2][N];//0->1;1->1,2
int tot,head[N],nxt[N<<1],ver[N<<1],edge[N<<1];
void add_edge(int x,int y,int val)
{
ver[++tot]=y;
edge[tot]=val;
nxt[tot]=head[x];
head[x]=tot;
}
void dfs(int x,int fat,int val)
{
die[x]=fat;
s[x]=val;
for(int i=head[x];i;i=nxt[i])
{
int to=ver[i];
if(to==fat) continue;
dfs(to,x,edge[i]);
}
}
int find(int opt,int x)
{
if(fa[opt][x]==x) return x;
return fa[opt][x]=find(opt,fa[opt][x]);
}
void connect(int opt,int x,int y)
{
int fx=find(opt,x),fy=find(opt,y);
if(fx==fy) return ;
fa[opt][fx]=fy;
siz[opt][fy]+=siz[opt][fx];
}
signed main()
{
n=read();
m=read();
for(int i=1,x,y,val;i<n;i++)
{
x=read();
y=read();
val=read();
add_edge(x,y,val);
add_edge(y,x,val);
}
for(int i=1;i<=n;i++)
{
fa[0][i]=fa[1][i]=i;
siz[0][i]=siz[1][i]=1;
}
dfs(1,0,0);
for(int i=1;i<=n;i++)
{
if(s[i]==1||s[i]==2) connect(1,i,die[i]);
if(s[i]==1) connect(0,i,die[i]);
}
for(int i=1;i<=n;i++)
if(s[i]==3)
f[find(0,die[i])]+=siz[1][i];
for(int i=1,a,b,fro,to;i<=m;i++)
{
a=read();
b=read();
fro=read();
to=read();
if(die[a]==b) swap(a,b);
if(s[b]==3)
{
f[find(0,a)]-=siz[1][b];
f[find(0,die[find(1,a)])]+=siz[1][b];
connect(1,b,a);
s[b]=2;
}
else if(s[b]==2)
{
f[find(0,a)]+=f[b];
connect(0,b,a);
s[b]=1;
}
if(find(1,fro)==find(1,to)) printf("1 ");
else if(find(0,die[find(1,to)])==find(0,fro)) printf("1 ");
else if(find(1,die[find(0,fro)])==find(1,to)) printf("1 ");
else printf("0 ");
ans=siz[1][find(1,fro)]+f[find(0,fro)];
if(s[find(0,fro)]==3) ans+=siz[1][find(1,die[find(0,fro)])];
printf("%lld\n",ans);
}
return 0;
}

7.30考试总结(NOIP模拟28)[遗忘之祭仪·客星璀璨之夜·割海成路之日]的更多相关文章

  1. NOIP 模拟 $28\; \rm 割海成路之日$

    题解 \(by\;zj\varphi\) 用两个集合分别表示 \(1\) 边联通块,\(1,2\) 边联通块 . \(\rm son_x\) 表示当前节点通过 \(3\) 类边能到的 \(2\) 联通 ...

  2. 6.17考试总结(NOIP模拟8)[星际旅行·砍树·超级树·求和]

    6.17考试总结(NOIP模拟8) 背景 考得不咋样,有一个非常遗憾的地方:最后一题少取膜了,\(100pts->40pts\),改了这么多年的错还是头一回看见以下的情景... T1星际旅行 前 ...

  3. 5.23考试总结(NOIP模拟2)

    5.23考试总结(NOIP模拟2) 洛谷题单 看第一题第一眼,不好打呀;看第一题样例又一眼,诶,我直接一手小阶乘走人 然后就急忙去干T2T3了 后来考完一看,只有\(T1\)骗到了\(15pts\)[ ...

  4. 5.22考试总结(NOIP模拟1)

    5.22考试总结(NOIP模拟1) 改题记录 T1 序列 题解 暴力思路很好想,分数也很好想\(QAQ\) (反正我只拿了5pts) 正解的话: 先用欧拉筛把1-n的素数筛出来 void get_Pr ...

  5. 2021.9.17考试总结[NOIP模拟55]

    有的考试表面上自称NOIP模拟,背地里却是绍兴一中NOI模拟 吓得我直接文件打错 T1 Skip 设状态$f_i$为最后一次选$i$在$i$时的最优解.有$f_i=max_{j<i}[f_j+a ...

  6. [考试总结]noip模拟23

    因为考试过多,所以学校的博客就暂时咕掉了,放到家里来写 不过话说,vscode的markdown编辑器还是真的很好用 先把 \(noip\) 模拟 \(23\) 的总结写了吧.. 俗话说:" ...

  7. 2021.8.4考试总结[NOIP模拟30]

    T1 毛衣衬 将合法子集分为两个和相等的集合. 暴力枚举每个元素是否被选,放在哪种集合,复杂度$O(3^n)$.考虑$\textit{meet in the middle}$. 将全集等分分为两部分分 ...

  8. 2021.7.28考试总结[NOIP模拟26]

    罕见的又改完了. T1 神炎皇 吸取昨天三个出规律的教训,开场打完T2 20pts直接大力打表1h. 但怎么说呢,我不懂欧拉函数.(其实exgcd都忘了 于是只看出最大平方因子,不得不线性筛,爆拿60 ...

  9. NOIP 模拟 $28\; \rm 遗忘之祭仪$

    题解 \(by\;zj\varphi\) 直接贪心模拟即可,对于每个点,如果它未被覆盖,直接在这覆盖一次. 每个黑点只会被扫一次,所以总复杂度为 \(\mathcal O\rm (nm)\) Code ...

  10. 2021.9.28考试总结[NOIP模拟64]

    T1 三元组 发现确定\(b,c\)的情况下,\(a\)的值域是连续的.确定\(b\)后\(a+b\)的取值是\([1+b,b+b]\).树状数组维护对每个\(b\)可行的\(c\). 注意取模后取值 ...

随机推荐

  1. arp 的概念解析

    前言 这里基于arp的基础概念,请先看前面那一节. 正文 看图: 和前面一样去解析地址. 以太网目的地址:就是mac地址. 在发送arp包的时候呢,这个mac地址就是全部是1,因为不知道对方地址是啥. ...

  2. LRU缓存及其实现

    缓存是我们日常开发中来提高性能最直接的方式,经常会听到有人说:性能不行?是因为你没加缓存!常见的缓存有外部缓存服务以及程序内部缓存,外部缓存服务包括:Redis.Memcached等,内部缓存就是我们 ...

  3. 力扣209(java&python)-长度最小的子数组(中等)

    题目: 给定一个含有 n 个正整数的数组和一个正整数 target . 找出该数组中满足其和 ≥ target 的长度最小的 连续子数组 [numsl, numsl+1, ..., numsr-1, ...

  4. 力扣121(java&python)-买卖股票的最佳时机(简单)

    题目: 给定一个数组 prices ,它的第 i 个元素 prices[i] 表示一支给定股票第 i 天的价格. 你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票.设计一 ...

  5. PolarDB-X 高可用存储服务: 基于 X-Paxos 一致性协议

    简介: 摘自刘永平(慕少)阿里云 PolarDB-X 技术专家在PolarDB-X | 新品发布会中的讲解内容. 了解更多PolarDB-X 内容:https://developer.aliyun.c ...

  6. [GPT] Linux 如何查看 crontab 的运行记录

      要查看crontab的运行记录,可以使用以下命令: $ grep CRON /var/log/syslog 或者 $ tail /var/log/syslog 这将在 /var/log/syslo ...

  7. K8s控制器(8)---Deployment

    一.Deployment控制器概念.原理解读 1.1 Deployment概述 # Deployment官方文档 https://kubernetes.io/docs/concepts/workloa ...

  8. EPAI手绘建模APP介绍

    ​        本软件是一个基于OpenCASCADE.android JNI开发的APP.底层用c++实现,UI层用android实现.底层和UI层之间通过JNI接口和json数据格式通信.    ...

  9. RT-Thread 堆区大小设置

    一.利用栈区的空间作为堆区 看过我之前的笔记的小伙伴都知道,以前我是通过申请栈区的空间使用的,感兴趣的小伙伴可以看我之前的笔记,RT-Thread移植到stm32. 在board.c文件文件中的代码如 ...

  10. vue下获得经纬度省市区

    1.根目录html文件引入 <!--引入百度 API,"ak=" 后面一串码是密钥,最好自己申请--> <script type="text/javas ...