2022-6-19 #1 CF1270I & CF1637H
每天都要能选出至少两道有意义的题,这样才算没有摆。
本地记录的话容易鸽掉,就放博客上了。(我博客是不是没啥人看啊)
完了,下午晚上打 CF/AT 去了,今天摆了呜呜。
md,等一下再更。
001 CF1270I Xor on Figures
我们定义两个矩阵 的异或卷积 为:
我们发现将所有操作放到一个矩阵 上,再令关键位置形成的矩阵为 ,那么我们需要 。
可以证明,在异或卷积下,矩阵 存在逆元,其值为 。
那么我们就是要求 ,但矩阵快速幂的时候暴力实现异或卷积肯定过不了。
发现 只有 有值,因为 会被 计算一次, 计算一次,抵消了。
于是 也只有 个位置有值,我们异或卷积的时候取这些位置出来计算即可,复杂度 。
#include<stdio.h>
const int maxn=1<<9;
int n,k,ans,m;
struct matrix{
unsigned long long a[maxn][maxn];
inline unsigned long long* operator [](const int &x){
return a[x];
}
matrix operator *(matrix p){
matrix res;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
res[i][j]=0;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
if(p[i][j])
for(int u=0;u<n;u++)
for(int v=0;v<n;v++)
res[(u+i)%n][(v+j)%n]^=p[i][j]*a[u][v];
return res;
}
}A,B;
int main(){
scanf("%d",&k),n=1<<k;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
scanf("%llu",&A[i][j]);
scanf("%d",&m);
for(int i=1,x,y;i<=m;i++)
scanf("%d%d",&x,&y),B[x-1][y-1]=1;
for(int i=0;i<k;i++)
A=A*B,B=B*B;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
ans+=(A[i][j]!=0);
printf("%d\n",ans);
return 0;
}
002 CF1637H Minimize Inversions Number
标签:
Solution Set
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· AI技术革命,工作效率10个最佳AI工具