NOIP 2022 补题记录

CNOI 浙江省系列比赛补题记录(from 2022)

全部放到一处过于卡顿,故将补完的比赛单独拿出来。

种花

分段计数且互不相关,可以直接 DP。

实际上这两个图形很简单,预处理信息后放到 \((x_2,y_1)\) 计算即可。

#include<bits/stdc++.h>
using namespace std;
namespace ax_by_c{
typedef long long ll;
const ll mod=998244353;
const int N=1005;
int n,m,X,Y;
char s[N][N];
int s1[N][N],s2[N][N],s3[N][N];
void slv(){
	scanf("%d %d %d %d",&n,&m,&X,&Y);
	for(int i=1;i<=n;i++)scanf("%s",s[i]+1);
	for(int i=1;i<=n;i++){
		for(int j=m;j>=1;j--){
			if(s[i][j]=='1'){
				s1[i][j]=0;
				continue;
			}
			s1[i][j]=1;
			if(j!=m)s1[i][j]+=s1[i][j+1];
		}
	}
	for(int j=1;j<=m;j++){
		for(int i=n;i>=1;i--){
			if(s[i][j]=='1'){
				s2[i][j]=0;
				continue;
			}
			s2[i][j]=1;
			if(i!=n)s2[i][j]+=s2[i+1][j];
		}
		for(int i=1;i<=n;i++){
			if(s[i][j]=='1'){
				s3[i][j]=0;
				continue;
			}
			if(j!=m)s3[i][j]=s1[i][j+1];
			if(i!=1)s3[i][j]+=s3[i-1][j];
		}
	}
	ll ans1=0,ans2=0;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			if(i>=3&&j<m&&s[i][j]=='0'&&s[i-1][j]=='0'&&s[i-2][j]=='0'){
				ans1=(ans1+(ll)s1[i][j+1]*s3[i-2][j]%mod)%mod;
				if(i!=n)ans2=(ans2+(ll)s1[i][j+1]*s3[i-2][j]%mod*s2[i+1][j]%mod)%mod;
			}
		}
	}
	printf("%lld %lld\n",ans1*X%mod,ans2*Y%mod);
}
void main(){
	int T,id;
	scanf("%d %d",&T,&id);
	while(T--)slv();
}
}
int main(){
	ax_by_c::main();
	return 0;
}

喵了个喵

当之无愧的最难题,sjy 场上好像就这题没过。

\(k=2n-2\) 时可以留一个空栈,其余每个栈放两种元素,此时每次遇到出现过的元素都能将其消去。

\(k=2n-1\) 时考虑先像之前一样做,直到遇到 \(p\) 并且此时其他数都出现了。

肯定要考虑离线。(不然为什么这游戏那么难)

考虑后面第一个 \(p\),如果中间全部都是栈顶元素,就可以用空栈把 \(p\) 消掉。

否则找出第一个栈低元素 \(x\),设其栈顶为 \(y\)\(y\)\(x\) 前出现 \(c\) 次。

  • \(c\) 为奇数

\(p\) 放空栈,\(x,y\) 那个栈可以清空,变成新的空栈。

  • \(c\) 为偶数

\(p\)\(x,y\) 那个栈,中间的 \(y\) 用空栈消掉,最后 \(x\) 消掉。

细节很多,建议使用 https://www.luogu.me/paste/5wmvm75k 进行对拍。

#include<bits/stdc++.h>
#define rep(i,l,r) for(int qwp=(l),pwq=(r),i=qwp;i<=pwq;i++)
#define per(i,r,l) for(int qwp=(l),pwq=(r),i=pwq;i>=qwp;i--)
#define repll(i,l,r) for(ll qwp=(l),pwq=(r),i=qwp;i<=pwq;i++)
#define perll(i,r,l) for(ll qwp=(l),pwq=(r),i=pwq;i>=qwp;i--)
#define pb push_back
#define ins insert
#define clr clear
#define uset unordered_set
#define umap unordered_map
#define UQ(hsh,hc) (sort((hsh)+1,(hsh)+1+(hc)),(hc)=unique((hsh)+1,(hsh)+1+(hc))-(hsh)-1)
#define REM(s,x) (s).erase((s).find(x))
using namespace std;
namespace ax_by_c{
typedef long long ll;
const int N=305;
const int M=2e6+5;
const int K=605;
struct ND{
    int op,s1,s2;
};
vector<ND>ans;
int n,m,k,a[M];
deque<int>stk[N];
int pos[K],lstpos[K],id;
uset<int>ss[3];
int idx;
void D1(int x){
    ans.pb({1,x,0});
    idx++;
    if(stk[x].size()&&stk[x].back()==a[idx])stk[x].pop_back();
    else stk[x].pb(a[idx]);
}
void D2(int x,int y){
    ans.pb({2,x,y});
    if(stk[x].size()&&stk[y].size()&&stk[x].front()==stk[y].front())stk[x].pop_front(),stk[y].pop_front();
}
void slv(int _csid,int _csi){
    scanf("%d %d %d",&n,&m,&k);
    rep(i,1,m)scanf("%d",&a[i]);
    ans.clr();
    rep(i,1,n)stk[i].clr();
    rep(i,0,2)ss[i].clr();
    rep(i,1,k)pos[i]=lstpos[i]=0;
    rep(i,1,n-1)ss[0].ins(i);
    id=n,idx=0;
    for(int i=1;i<=m;i++){
        if(pos[a[i]]){
            int s=pos[a[i]];
            REM(ss[stk[s].size()],s);
            if(stk[s].back()==a[i])D1(s);
            else D1(id),D2(id,s);
            ss[stk[s].size()].ins(s);
            pos[a[i]]=0;
        }
        else if(ss[0].size()){
            int s=*ss[0].begin();
            REM(ss[stk[s].size()],s);
            D1(s);
            ss[stk[s].size()].ins(s);
            pos[a[i]]=lstpos[a[i]]=s;
        }
        else if(ss[1].size()){
            int s=*ss[1].begin();
            REM(ss[stk[s].size()],s);
            D1(s);
            ss[stk[s].size()].ins(s);
            pos[a[i]]=lstpos[a[i]]=s;
        }
        else{
            int nxt=0;
            rep(j,i+1,m)if(a[j]==a[i]||a[j]!=stk[pos[a[j]]].back()){
                nxt=j;
                break;
            }
            if(a[nxt]==a[i]){
                D1(id);
                rep(j,i+1,nxt-1){
                    if(pos[a[j]]){
                        REM(ss[stk[pos[a[j]]].size()],pos[a[j]]);
                        D1(pos[a[j]]);
                        ss[stk[pos[a[j]]].size()].ins(pos[a[j]]);
                        pos[a[j]]=0;
                    }
                    else{
                        REM(ss[stk[lstpos[a[j]]].size()],lstpos[a[j]]);
                        D1(lstpos[a[j]]);
                        ss[stk[lstpos[a[j]]].size()].ins(lstpos[a[j]]);
                        pos[a[j]]=lstpos[a[j]];
                    }
                }
                D1(id);
                i=nxt;
            }
            else{
                int x=a[nxt],y=stk[pos[x]].back(),c=0;
                rep(j,i+1,nxt-1)if(a[j]==y)c++;
                if(c%2){
                    D1(id);
                    pos[a[i]]=lstpos[a[i]]=id;
                    rep(j,i+1,nxt-1){
                        if(a[j]==y){
                            REM(ss[stk[pos[x]].size()],pos[x]);
                            if(pos[y])D1(pos[x]);
                            else D1(pos[x]);
                            if(!stk[pos[x]].size()||stk[pos[x]].back()!=y)pos[y]=0;
                            else pos[y]=pos[x];
                            ss[stk[pos[x]].size()].ins(pos[x]);
                        }
                        else if(pos[a[j]]){
                            REM(ss[stk[pos[a[j]]].size()],pos[a[j]]);
                            D1(pos[a[j]]);
                            ss[stk[pos[a[j]]].size()].ins(pos[a[j]]);
                            pos[a[j]]=0;
                        }
                        else{
                            REM(ss[stk[lstpos[a[j]]].size()],lstpos[a[j]]);
                            D1(lstpos[a[j]]);
                            ss[stk[lstpos[a[j]]].size()].ins(lstpos[a[j]]);
                            pos[a[j]]=lstpos[a[j]];
                        }
                    }
                    REM(ss[stk[pos[x]].size()],pos[x]);
                    D1(pos[x]);
                    ss[stk[id].size()].ins(id);
                    id=pos[x],pos[x]=0;
                    i=nxt;
                }
                else{
                    REM(ss[stk[pos[x]].size()],pos[x]);
                    D1(pos[x]),pos[a[i]]=lstpos[a[i]]=pos[x];
                    rep(j,i+1,nxt-1){
                        if(a[j]==y)D1(id);
                        else if(pos[a[j]]){
                            REM(ss[stk[pos[a[j]]].size()],pos[a[j]]);
                            D1(pos[a[j]]);
                            ss[stk[pos[a[j]]].size()].ins(pos[a[j]]);
                            pos[a[j]]=0;
                        }
                        else{
                            REM(ss[stk[lstpos[a[j]]].size()],lstpos[a[j]]);
                            D1(lstpos[a[j]]);
                            ss[stk[lstpos[a[j]]].size()].ins(lstpos[a[j]]);
                            pos[a[j]]=lstpos[a[j]];
                        }
                    }
                    D1(id);
                    D2(id,pos[x]);
                    ss[stk[pos[x]].size()].ins(pos[x]);
                    pos[x]=0;
                    i=nxt;
                }
            }
        }
    }
    printf("%d\n",(int)ans.size());
    for(auto it:ans){
        if(it.op==1)printf("1 %d\n",it.s1);
        else printf("2 %d %d\n",it.s1,it.s2);
    }
}
void main(){
	// ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	int T=1,csid=0;
	// scanf("%d",&csid);
	scanf("%d",&T);
	rep(i,1,T)slv(csid,i);
}
}
int main(){
	string __name="";
	if(__name!=""){
		freopen((__name+".in").c_str(),"r",stdin);
		freopen((__name+".out").c_str(),"w",stdout);
	}
	ax_by_c::main();
	return 0;
}
/*
g++ -std=c++14 -O2 -Wall -Wextra "-Wl,--stack=200000000" A.cpp -o A.exe
A.exe
*/

建造军营

首先对于一个边双,切断其内部的边是没有用的,于是选择其内部的边也是没有用的。设其有 \(v\) 个点 \(e\) 条边,那么在这个边双内选点和不选点的方案数分别为 \((2^v-1)2^e\)\(2^e\)

于是缩成一棵树,考虑 DP,考虑在 LCA 处计算贡献。设 \(f_{u,0/1}\) 表示以 \(u\) 为根的子树选了点且 \(u\) 不是或是选的点的 LCA 时的方案数。

令子树内总边数为 \(S_u\),可得 \(f_{u,0}=\sum 2^{S_u-S_v-1}(f_{v,0}+f_{v,1}),f_{u,1}=2^{v_u+e_u}\prod (f_{v,0}+f_{v,1}+2^{S_v+1})-2^{S_u}-f_{u,0}\)

答案即为 \(\sum f_{u,1}2^{m-S_u}\)

#include<bits/stdc++.h>
using namespace std;
namespace ax_by_c{
typedef long long ll;
const ll mod=1e9+7;
const int N=1e6+5;
int n,m;
struct E{
    int v,nxt;
    bool mk;
}e[N*2];
int ec=1,hd[N];
void add(int u,int v){
    e[++ec]={v,hd[u],0},hd[u]=ec;
}
int dfn[N],low[N],Tim,stk[N],Top,col[N],_cnt;
bitset<N>mk;
void tarjan(int u){
    dfn[u]=low[u]=++Tim;
    stk[++Top]=u;
    mk[u]=1;
    for(int i=hd[u];i;i=e[i].nxt){
        if(e[i].mk)continue;
        e[i].mk=e[i^1].mk=1;
        if(!dfn[e[i].v])tarjan(e[i].v),low[u]=min(low[u],low[e[i].v]);
        else if(mk[e[i].v])low[u]=min(low[u],low[e[i].v]);
    }
    if(dfn[u]==low[u]){
        col[u]=++_cnt;
        while(stk[Top]!=u)col[stk[Top--]]=_cnt;
        Top--;
    }
}
vector<int>gg[N];
int Vc[N],Ec[N],Es[N];
ll pw[N],w[N],f[N][2];
void ddfs(int u,int fa){
    Es[u]=Ec[u]>>1;
    for(auto v:gg[u]){
        if(v==fa)continue;
        ddfs(v,u);
        Es[u]+=Es[v]+1;
    }
    f[u][1]=pw[Vc[u]]*pw[Ec[u]>>1]%mod;
    for(auto v:gg[u]){
        if(v==fa)continue;
        f[u][1]=f[u][1]*(f[v][0]+f[v][1]+pw[Es[v]+1])%mod;
        f[u][0]=(f[u][0]+pw[Es[u]-(Es[v]+1)]*(f[v][0]+f[v][1]))%mod;
    }
    f[u][1]=(f[u][1]-pw[Es[u]]+mod)%mod;
    f[u][1]=(f[u][1]-f[u][0]+mod)%mod;
}
void main(){
    scanf("%d %d",&n,&m);
    for(int i=1,u,v;i<=m;i++){
        scanf("%d %d",&u,&v);
        add(u,v),add(v,u);
    }
    for(int i=1;i<=n;i++)if(!dfn[i])tarjan(i);
    for(int u=1;u<=n;u++){
        Vc[col[u]]++;
        for(int i=hd[u];i;i=e[i].nxt){
            if(col[u]==col[e[i].v])Ec[col[u]]++;
            else gg[col[u]].push_back(col[e[i].v]);
        }
    }
    pw[0]=1;
    for(int i=1;i<=m;i++)pw[i]=pw[i-1]*2%mod;
    for(int i=1;i<=_cnt;i++)w[i]=(pw[Vc[i]]-1+mod)%mod*pw[Ec[i]>>1]%mod;
    ddfs(1,0);
    ll ans=0;
    for(int i=1;i<=_cnt;i++)ans=(ans+f[i][1]*pw[m-Es[i]])%mod;
    printf("%lld\n",ans);
}
}
int main(){
    ax_by_c::main();
    return 0;
}

比赛

首先单组询问有经典的分治算法,于是可以考虑将多组询问拆到分治点上一起解决。

对于一个分治点,考虑对右半部分扫描,同时动态维护以左半部分每个点为左端点时对应的答案。

考虑右半部分加入一个点时左半部分的变化,注意到最大值是单调的,那么不同的情况只会有 3 段,于是使用线段树维护:区间加 x,区间加 ab,区间加 xa,区间加 xb,区间求和。

时间复杂度 \(O(n\log^2 n)\)

#include<bits/stdc++.h>
#define rep(i,l,r) for(int i=(l);i<=(r);i++)
#define per(i,r,l) for(int i=(r);i>=(l);i--)
#define repll(i,l,r) for(ll i=(l);i<=(r);i++)
#define perll(i,r,l) for(ll i=(r);i>=(l);i--)
#define pb push_back
#define ins insert
#define clr clear
using namespace std;
namespace ax_by_c{
const int MB=1<<20;
struct FastIO{
	char ib[MB+100],*p,*q;
	char ob[MB+100],*r,stk[128];
	int tp;
	FastIO(){p=q=ib,r=ob,tp=0;}
	~FastIO(){fwrite(ob,1,r-ob,stdout);}
	char read_char(){
		if(p==q){
			p=ib,q=ib+fread(ib,1,MB,stdin);
			if(p==q)return 0;
		}
		return *p++;
	}
	template<typename T>
	void read_int(T& x){
		char c=read_char(),l=0;
		for(x=0;!isdigit(c);c=read_char())l=c;
		for(;isdigit(c);c=read_char())x=x*10-'0'+c;
		if(l=='-')x=-x;
	}
	void write_char(char c){
		if(r-ob==MB)r=ob,fwrite(ob,1,MB,stdout);
		*r++=c;
	}
	template<typename T>
	void write_int(T x){
		if(x<0)write_char('-'),x=-x;
		do stk[++tp]=x%10+'0';
		while(x/=10);
		while(tp)write_char(stk[tp--]);
	}
}IO;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<ull,ull> pii;
const int N=2.5e5+5;
pii f[N];
struct DS1{
	struct node{
		ull sa,sb,sab,s,xz,xaz,xbz,xabz;
	}tr[N*4];
	void pu(int u){
		tr[u].sa=tr[u<<1].sa+tr[u<<1|1].sa;
		tr[u].sb=tr[u<<1].sb+tr[u<<1|1].sb;
		tr[u].sab=tr[u<<1].sab+tr[u<<1|1].sab;
		tr[u].s=tr[u<<1].s+tr[u<<1|1].s;
	}
	void pd_xz(int u,ull xz,int len){
		tr[u].s+=xz*len;
		tr[u].xz+=xz;
	}
	void pd_xaz(int u,ull xaz){
		tr[u].s+=tr[u].sa*xaz;
		tr[u].xaz+=xaz;
	}
	void pd_xbz(int u,ull xbz){
		tr[u].s+=tr[u].sb*xbz;
		tr[u].xbz+=xbz;
	}
	void pd_xabz(int u,ull xabz){
		tr[u].s+=tr[u].sab*xabz;
		tr[u].xabz+=xabz;
	}
	void pd(int u,int l,int r){
		int mid=l+((r-l)>>1);
		pd_xz(u<<1,tr[u].xz,mid-l+1),pd_xz(u<<1|1,tr[u].xz,r-mid);
		pd_xaz(u<<1,tr[u].xaz),pd_xaz(u<<1|1,tr[u].xaz);
		pd_xbz(u<<1,tr[u].xbz),pd_xbz(u<<1|1,tr[u].xbz);
		pd_xabz(u<<1,tr[u].xabz),pd_xabz(u<<1|1,tr[u].xabz);
		tr[u].xz=tr[u].xaz=tr[u].xbz=tr[u].xabz=0;
	}
	void bld(int u,int l,int r,int ql,int qr){
		if(ql<=l&&r<=qr){
			if(l==r){
				tr[u].sa=f[l].first;
				tr[u].sb=f[l].second;
				tr[u].sab=tr[u].sa*tr[u].sb;
				tr[u].s=0;
				return ;
			}
			pd(u,l,r);
			int mid=l+((r-l)>>1);
			bld(u<<1,l,mid,ql,qr);
			bld(u<<1|1,mid+1,r,ql,qr);
			pu(u);
			return ;
		}
		pd(u,l,r);
		int mid=l+((r-l)>>1);
		if(ql<=mid)bld(u<<1,l,mid,ql,qr);
		if(mid+1<=qr)bld(u<<1|1,mid+1,r,ql,qr);
		pu(u);
	}
	void upd_xz(int u,int l,int r,int ql,int qr,ull xz){
		if(ql<=l&&r<=qr){
			pd_xz(u,xz,r-l+1);
			return ;
		}
		pd(u,l,r);
		int mid=l+((r-l)>>1);
		if(ql<=mid)upd_xz(u<<1,l,mid,ql,qr,xz);
		if(mid+1<=qr)upd_xz(u<<1|1,mid+1,r,ql,qr,xz);
		pu(u);
	}
	void upd_xaz(int u,int l,int r,int ql,int qr,ull xaz){
		if(ql<=l&&r<=qr){
			pd_xaz(u,xaz);
			return ;
		}
		pd(u,l,r);
		int mid=l+((r-l)>>1);
		if(ql<=mid)upd_xaz(u<<1,l,mid,ql,qr,xaz);
		if(mid+1<=qr)upd_xaz(u<<1|1,mid+1,r,ql,qr,xaz);
		pu(u);
	}
	void upd_xbz(int u,int l,int r,int ql,int qr,ull xbz){
		if(ql<=l&&r<=qr){
			pd_xbz(u,xbz);
			return ;
		}
		pd(u,l,r);
		int mid=l+((r-l)>>1);
		if(ql<=mid)upd_xbz(u<<1,l,mid,ql,qr,xbz);
		if(mid+1<=qr)upd_xbz(u<<1|1,mid+1,r,ql,qr,xbz);
		pu(u);
	}
	void upd_xabz(int u,int l,int r,int ql,int qr,ull xabz){
		if(ql<=l&&r<=qr){
			pd_xabz(u,xabz);
			return ;
		}
		pd(u,l,r);
		int mid=l+((r-l)>>1);
		if(ql<=mid)upd_xabz(u<<1,l,mid,ql,qr,xabz);
		if(mid+1<=qr)upd_xabz(u<<1|1,mid+1,r,ql,qr,xabz);
		pu(u);
	}
	ull Q(int u,int l,int r,int ql,int qr){
		if(ql<=l&&r<=qr)return tr[u].s;
		pd(u,l,r);
		int mid=l+((r-l)>>1);
		ull res=0;
		if(ql<=mid)res+=Q(u<<1,l,mid,ql,qr);
		if(mid+1<=qr)res+=Q(u<<1|1,mid+1,r,ql,qr);
		return res;
	}
}tr;
int n,q,a[N],b[N];
ull ans[N];
struct QQ{
	int l,r,id;
}qqs[N];
vector<QQ>qs[N];
vector<int>fid[N];
void upd(int l,int r,int ql,int qr,int id){
	if(l>r||qr<l||r<ql)return ;
	int mid=l+((r-l)>>1);
	if(ql<=l&&r<=qr){
		fid[mid].pb(id);
		return ;
	}
	if(ql<=mid&&mid<=qr)qs[mid].pb({max(ql,l),min(qr,r),id});
	upd(l,mid-1,ql,qr,id),upd(mid+1,r,ql,qr,id);
}
bool cmp(QQ x,QQ y){
	return x.r<y.r;
}
void ins(int l,int md,int p){
	int L=l,R=md,mid,res=md+1;
	while(L<=R){
		mid=L+((R-L)>>1);
		if(f[mid].first<=f[p].first&&f[mid].second<=f[p].second)res=mid,R=mid-1;
		else L=mid+1;
	}
	if(res!=md+1){
		tr.upd_xz(1,l,md,res,md,f[p].first*f[p].second);
	}
	if(res==l)return ;
	if(f[res-1].first>f[p].first&&f[res-1].second<=f[p].second){
		int r_=res-1;
		L=l,R=res-1;
		while(L<=R){
			mid=L+((R-L)>>1);
			if(f[mid].first>f[p].first&&f[mid].second<=f[p].second)res=mid,R=mid-1;
			else L=mid+1;
		}
		tr.upd_xaz(1,l,md,res,r_,f[p].second);
	}
	if(res==l)return ;
	if(f[res-1].first<=f[p].first&&f[res-1].second>f[p].second){
		int r_=res-1;
		L=l,R=res-1;
		while(L<=R){
			mid=L+((R-L)>>1);
			if(f[mid].first<=f[p].first&&f[mid].second>f[p].second)res=mid,R=mid-1;
			else L=mid+1;
		}
		tr.upd_xbz(1,l,md,res,r_,f[p].first);
	}
	if(res==l)return ;
	tr.upd_xabz(1,l,md,l,res-1,1);
}
ull cdq(int l,int r){
	if(l>r)return 0;
	int mid=l+((r-l)>>1);
	ull xxx=cdq(l,mid-1)+cdq(mid+1,r);
	f[mid]={a[mid],b[mid]};
	per(i,mid-1,l)f[i]={max((ull)a[i],f[i+1].first),max((ull)b[i],f[i+1].second)};
	rep(i,mid+1,r)f[i]={max((ull)a[i],f[i-1].first),max((ull)b[i],f[i-1].second)};
	tr.bld(1,l,mid,l,mid);
	for(int i=mid,j=0;i<=r;i++){
		ins(l,mid,i);
		while(j<(int)qs[mid].size()&&qs[mid][j].r==i)ans[qs[mid][j].id]+=tr.Q(1,l,mid,qs[mid][j].l,mid),j++;
	}
	xxx+=tr.Q(1,l,mid,l,mid);
	for(auto pp:fid[mid])ans[pp]+=xxx;
	return xxx;
}
void slv(){
	IO.read_int(n);
	rep(i,1,n)IO.read_int(a[i]);
	rep(i,1,n)IO.read_int(b[i]);
	IO.read_int(q);
	rep(i,1,q)IO.read_int(qqs[i].l),IO.read_int(qqs[i].r),qqs[i].id=i;
	sort(qqs+1,qqs+1+q,cmp);
	rep(i,1,q)upd(1,n,qqs[i].l,qqs[i].r,qqs[i].id);
	cdq(1,n);
	rep(i,1,q)IO.write_int(ans[i]),IO.write_char('\n');
}
void main(){
	int T=1;
	int csid=0;
	IO.read_int(csid);
//	scanf("%d",&T);
	while(T--)slv();
}
}
int main(){
	string __name="";
	if(__name!=""){
		freopen((__name+".in").c_str(),"r",stdin);
		freopen((__name+".out").c_str(),"w",stdout);
	}
	ax_by_c::main();
	return 0;
}
posted @ 2025-07-12 21:11  ax_by_c  阅读(13)  评论(0)    收藏  举报