萌新不过脑子写的 D,求条!
  • 板块灌水区
  • 楼主da_ke
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/9/7 23:16
  • 上次更新2024/9/8 00:08:31
查看原帖
萌新不过脑子写的 D,求条!
766675
da_ke楼主2024/9/7 23:16

ABC370 D

#include <bits/stdc++.h>

#define i64 long long
#define rep(i,l,r) for(int i=(l);i<=(r);i++)
#define fdn(i,r,l) for(int i=(r);i>=(l);i--)
#define pii pair<int,int>
using namespace std;

typedef long long ll;
typedef double db;
typedef __int128 i128;

int n,m,Q;

int main()
{
#ifndef ONLINE_JUDGE
    freopen("in.in","r",stdin);
    freopen("out.out","w",stdout);
#endif
    ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);
    cin>>n>>m>>Q;
    vector<set<int> > line(n+1),col(m+1);
    rep(i,1,n) rep(j,1,m) line[i].insert(j);
    rep(j,1,m) rep(i,1,n) col[j].insert(i);
    rep(j,1,Q)
    {
        int x,y;
        cin>>x>>y;
        if(line[x].find(y)!=line[x].end())
        {
            line[x].erase(y),
            col[y].erase(x);
            continue;
        }
        int pos1=*line[x].lower_bound(y),pos2=*prev(line[x].lower_bound(y));
        if(y>(*line[x].begin()))
            line[x].erase(pos2),col[pos2].erase(x);
        if(y<(*line[x].end()))
            line[x].erase(pos1),col[pos1].erase(x);
        pos1=*col[y].lower_bound(x),pos2=*prev(col[y].lower_bound(x));
        if(x>(*col[y].begin()))
            col[y].erase(pos2),line[pos2].erase(y);
        if(x<(*col[y].end()))
            col[y].erase(pos1),line[pos1].erase(y);
    }
    int ans=0;
    rep(i,1,n) ans+=line[i].size();
    cout<<ans;
}

// hope to debug successfully

没过脑子,样例没过!

2024/9/7 23:16
加载中...