专栏文章

题解:B4229 [常州市赛 2024] 棋盘

B4229题解参与者 1已保存评论 0

文章操作

快速查看文章及其快照的属性,并进行相关操作。

当前评论
0 条
当前快照
1 份
快照标识符
@minjgpah
此快照首次捕获于
2025/12/02 03:25
3 个月前
此快照最后确认于
2025/12/02 03:25
3 个月前
查看原文

快复赛了,水篇题解,听说能AK

管理员(大大)行行好让我过吧 我的第一篇题解
这题本质很水 只需要维护行和列的不同区间就行了 最后乘一下 而维护只需要用到前后两个 考虑在线做法
代码
CPP
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=1e6+7;

int n,q,a,b,hh,ll, h[N],l[N];

signed main()
{
    cin>>n>>q;
    
    for(int i=1;i<=n;i++)h[i]=l[i]=(i%2==1)?0:1;
    h[0]=h[n+1]=l[0]=l[n+1]=2;
    hh=n,ll=n;
    while(q--)
    {
        cin>>a>>b;
        if(a==1) 
        {
            
            if(b==1||b==n)
            {
                if(h[b-1]!=h[b]&&h[b+1]!=h[b])hh-=1;
                else hh+=1;
            }
            else if(h[b-1]==h[b]&&h[b+1]==h[b])hh+=2;
            else if(h[b-1]!=h[b]&&h[b+1]!=h[b])hh-=2;
            h[b]=(h[b]+1)%2; 
        }
        else 
        {
            if(b==1||b==n)
            {
                if(l[b-1]!=l[b]&&l[b+1]!=l[b])ll-=1;
                else ll+=1;
            }
            else if(l[b-1]==l[b]&&l[b+1]==l[b])ll+=2;
            else if(l[b-1]!=l[b]&&l[b+1]!=l[b])ll-=2;
            l[b]=(l[b]+1)%2;
        }
        cout<<ll*hh<<endl; 
    }
}
求过qaq

评论

0 条评论,欢迎与作者交流。

正在加载评论...