9月笔记

距离入门acm已经很久很久了

那些善良的人、美好的事都到哪里去了呢

走到了今天才发现初心已经渐渐变了

保持纯真的确是一种无人警醒的罪

但是我很离经叛道

选择了绕路而行

虽然更远但是我想让今后并不会只有后悔

希望还有微风 能够摇撼我心

 

9-22

CF 1629E Problem - E - Codeforces (Unofficial mirror by Menci)

这是一个相当有趣的构造trick

由于异或和的性质,在一个含有五个格子的十字形中,只要知道了其中四个,就能求出另外一个(当然是在这道题的题意下)。

去学习了一下怎么在博客里插入图(如下)

 

 图画的不好看,但是大概能让读者明白一个意思。

C代表的是输入的a矩阵中的值,ABDE则是我们要构造的矩阵中的值。

重点在这,假设我们已经求好了BCD所在的行以及前面的几行(没错,当然是从上往下构造,顺便一提,第一行我们使得全部都为0,这是一种当条件不够时,值得注意的有趣的策略),当我们需要求E的值,有柿子

C=A^B^D^E

经过如下变换(柿子变换过程很长,因为作者很絮叨,想提高易读性,希望每一个看了这篇题解的人,都不需要再额外看别的题解,就能AC!)

C^E=A^B^D^E^E

C^E=A^B^D^(E^E)

C^E=A^B^D^0

C^E=A^B^D

C^C^E=A^B^D^C

(C^C)^E=A^B^D^C

0^E=A^B^D^C

E=A^B^D^C

整理后

E=A^B^C^D

由于上述说过的ABCD均已知

那么我们就求出了E!!!!

AC了2300分的题,还混了洛谷一个蓝题,作者开心炸了(因为作者只有绿名233)

代码:

#include<bits/stdc++.h>
#define int long long
#define rep(i,x,n) for(int i=x;i<=n;i++)
using namespace std;
const int N = 1e3+10;
int t,n;
int a[N][N],b[N][N];

main()
{
    ios::sync_with_stdio(false);cin.tie(0);
    for(cin >> t;t--;)
    {
        memset(b,0,sizeof b);
        cin >> n;
        rep(i,1,n) rep(j,1,n) cin >> a[i][j];
        rep(i,2,n) rep(j,1,n) b[i][j]=a[i-1][j]^b[i-1][j-1]^b[i-1][j+1]^b[i-2][j];
        int ans=0;
        rep(i,1,n) rep(j,1,n) ans^=b[i][j];
        cout << ans << "\n";
    }
}

9-23

CF1631 Problem - D - Codeforces (Unofficial mirror by Menci)

非常巧妙的做法

感悟是,确实要从性质出发,而不是寻找既有套路

posted @ 2022-09-22 17:46  marve197  阅读(28)  评论(0)    收藏  举报