全部评论 5

  • 让法姐试试吧 我两边都是错的

    2023-08-14 来自 广东

    1
  • 考古

    2025-04-05 来自 天津

    0
  • #include<cstdio>
    #include<iomanip>
    #include<cstring>
    #define N 30005
    #define M (1<<18)+5
    #define ll long long
    #define mod 1000000007
    #define O4 inline attribute((always_inline))
    using namespace std;
    int las=1,cnt[M][7],tr[M][7];
    int n,k,now,he[N][7],su[N][7],vis[M];
    const int Mxdt=180000;
    O4 char gc() {
    static char buf[Mxdt],*p1=buf,p2=buf;
    return p1p2&&(p2=(p1=buf)+fread(buf,1,Mxdt,stdin),p1p2)?EOF:p1++;
    }
    O4 int read() {
    int res=0,bj=0;
    char ch=gc();
    while(ch<'0'||ch>'9')bj|=(ch=='-'),ch=gc();
    while(ch>='0'&&ch<='9')res=(res<<3)+(res<<1)+(ch^48),ch=gc();
    return bj?-res:res;
    }
    O4 int Mod(int x) {
    return x<=mod?x:x-mod;
    }
    struct at {
    ll val;
    int cnt;
    at() {
    val=1e18,cnt=0;
    } at(ll _v,int _c):val(_v),cnt(_c) {}
    };
    O4 at operator (at a,at b) {
    return (a.val!=b.val)?(a.val<b.val?a:b):(at(a.val,Mod(a.cnt+b.cnt)));
    }
    O4 at operator +(at a,ll b) {
    return at(a.val+b,a.cnt);
    }
    struct Node {
    pair<at,bool>val[M];
    int s[M],top;
    Node() {}
    O4 void clear() {
    for(int i=1; i<=top; ++i)val[s[i]].second=0;
    top=0;
    }
    at &operator[](int x) {
    if(!val[x].second)val[x]=make_pair(at(),1),s[++top]=x;
    return val[x].first;
    }
    } dp[2];
    O4 void Init(ll val=0) {
    for(int st=0,s=0,ct=0; st<(1<<k-1); dp[now][s]=at(val,1),++st,s=ct=val=0)
    for(int t=1; t<k; ++t)((st&(1<<t-1))?val+=he[0][t]:++ct),s|=ct<<(t
    3);
    }
    O4 int Get(int s,int x) {
    return (s>>3
    x)&7;
    }
    O4 int Change(int s,int x,int y) {
    return s((Get(s,x)y)<<3
    x);
    }
    O4 void Work(int s,int x) {
    for(int i=0; i<k; ++i)
    if(Get(s,i)x&&++cnt[s][x]>1)return;
    }
    O4 void CSH(int s) {
    if(vis[s])return;
    static int cnt,tmp,id[7];
    memset(id,-1,sizeof(id)),cnt=0,tmp=s;
    for(int i=0,x; i<k; i)x=Get(s,i),s=Change(s,i,(~id[x])?id[x]:id[x]=cnt);
    return vis[tmp]=s,void();
    }
    O4 void Merge(int s,int x) {
    int t1=Get(s,x-1),t2=Get(s,x),tmp=s;
    if(t1
    t2)return tr[tmp][x]=s,void();
    for(int i=0; i<k; ++i)if(Get(s,i)==t2)s=Change(s,i,t1);
    tr[tmp][x]=s;
    }
    O4 void Calc(int s) {
    static int vis[M]= {0};
    if(v

    2025-04-04 来自 浙江

    0
  • 做出来了:https://www.acgo.cn/problemset/787/31882?tab=explanation

    2024-11-23 来自 北京

    0
  • 2023-03-11 我就做过 但是报错

    2023-08-15 来自 上海

    0
首页