In mathematics you don't understand things, you just get used to them.

「ARC 124A」LR Constraints

Link.

我们可以把 $1\sim n$ 个盒子里能放的球的编号集合全部求出来。然后就直接来。

注意题目已经给出了 $k$ 个球的位置,所以「Note that for each integer $i$ from $1$ through $K$, there must be at least one card on which we write $i$.」这个限制不用管。

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define int ll
#define len(x) ((int)(x).size())
#define all(x) (x).begin(),(x).end()
const int N=1100,MOD=998244353;
int n,k,ts[N],tek[N],fin[N],Rs[N];
set<int> rs[N];
signed main() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr),cout.tie(nullptr);
    cin>>n>>k,memset(fin,-1,sizeof fin);
    for(int i=1; i<=k; ++i) {
        char c; cin>>c;
        ts[i]=(c=='R');
        cin>>tek[i];
        Rs[tek[i]]=ts[i];
    }
    for(int i=1; i<=k; ++i) {
        if(~fin[tek[i]]) return puts("0"),0;
        fin[tek[i]]=i;
    }
    for(int i=1; i<=n; ++i) {
        if(~fin[i]) rs[i].emplace(fin[tek[i]]);
        else {
            auto &s=rs[i];
            for(int j=1; j<=k; ++j) s.emplace(j);
            int tmp=0;
            for(int j=i+1; j<=n; ++j) {
                if(!Rs[j]) s.erase(fin[j]);
            }
            for(int j=1; j<i; ++j) {
                if(Rs[j]) s.erase(fin[j]);
            }
        }
    }
    int res=1;
    for(int i=1; i<=n; ++i) res*=len(rs[i]),res%=MOD;
    cout<<res<<"\n";
    return 0;
}

「ARC 124B」XOR Matching 2

Link.

预处理出 $s(i,j)=a_{i}\oplus b_{j}$,以及 $pos(i,x)$ 表示第 $i$ 层值 $x$ 的出现集合,用 std::map 均摊 $\mathcal{O}(n^{2})$ 空间。然后我们在第一层逐列考虑,对于第一层的每一种异或值,找出在每一行出现的位置集合,如果某一行没有出现就不行。最后就看集合大小是否等于 $n$。

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define all(x) (x).begin(),(x).end()
#define int ll
const int N=2100;
int a[N],b[N],xr[N][N],n;
multimap<int,int> mp[N];
signed main() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr),cout.tie(nullptr);
    cin>>n;
    for(int i=1; i<=n; ++i) cin>>a[i];
    for(int i=1; i<=n; ++i) cin>>b[i];
    for(int i=1; i<=n; ++i) for(int j=1; j<=n; ++j) xr[i][j]=(a[i] xor b[j]),mp[i].insert({xr[i][j],j});
    vector<int> res;
    for(int j=1; j<=n; ++j) {
        bool ok=0;
        set<int> S;
        for(int i=1; i<=n; ++i) {
            auto rg=mp[i].equal_range(xr[1][j]);
            if(mp[i].find(xr[1][j])!=mp[i].end()) {
                for(auto it=rg.first; it!=rg.second; ++it) {
                    S.emplace(it->second);
                }
            }
            else {
                ok=1;
                break;
            }
        }
        if(ok) continue;
        if(S.size()==n) {
            res.push_back(xr[1][j]);
        }
    }
    sort(all(res));
    res.erase(unique(all(res)),res.end()); 
    cout<<res.size()<<"\n";
    for(int x:res) cout<<x<<"\n";
    return 0;
}

「ARC 124C」LCM of GCDs

Link.

考场做法复杂度有问题啊,虽然屮过去了。有空来补 official editorial 做法。

// Oops, something went wrong.

「ARC 124D」Yet Another Sorting Problem

Link.

你看 ARC 又考置换群了。震撼围观吴老师精确押题。

套路题,连边 $i\rightarrow p_{i}$ 后一堆环摆出来。答案是

$$ n+m-(\text{the number of cycles in the graph})+\\ 2\times\max\{\text{the number of cycles of size of 2 or greater consisting of vertice numbered through }1\text{ to }n,\\ \text{the number of cycles of size of 2 or greater consisting of vertice numbered through }n+1\text{ to }n+m\} $$

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define all(x) (x).begin(),(x).end()
const int N=200100;
int n,m,p[N],vis[N];
signed main() {
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr),cout.tie(nullptr);
    cin>>n>>m; int x0=0,x1=0,res=n+m,ls=0;
    for(int i=1; i<=n+m; ++i) cin>>p[i];
    for(int i=1; i<=n+m; ++i) {
        if(vis[i]) continue;
        int now=i,len=0,qwq=0,qaq=0;
        while(!vis[now]) {
            ++len;
            if(now<=n) qwq=1;
            else qaq=1;
            vis[now]=1;
            now=p[now];
        }
        if(!qaq&&len>=2) ++x0;
        if(!qwq&&len>=2) ++x1;
        --res;
    }
    cout<<res+2*max(x0,x1)<<"\n";
    return 0;
}

「ARC 124E」Pass to Next

Link.

「ARC 124F」Chance Meeting

Link.

group theory data structures combinatorics

Solution -「NOI 2021」轻重边
上一篇 «
Solution -「ARC 123F」Insert Addition
» 下一篇