全部评论 5

  • 谢谢各位帅哥美女发的题解

    2026-01-09 来自 广东

    0
  • T4 太长了代码放不下

    2026-01-03 来自 北京

    0
  • #include<bits/stdc++.h>
    #define ll long long
    #define ld long double
    #define pii pair<ll,ll>
    #define ve vector<ll>
    #define fi first
    #define se second
    #define pb push_back
    #define mid (l+r>>1)
    #define lx (x<<1)
    #define rx (x<<1|1)
    using namespace std;
    const ll N=8002,M=802;
    ll T,n,m,d[N],p[N],dfn[N],dfm[N],dfp[N],f[N][M],g[N][M],h[N][M];
    void add(ll x,ll k,ll y){
    	for(;x<=n;x+=x&-x)h[x][k]+=y;
    }
    void mdf(ll l,ll r,ll k,ll y){
    	add(l,k,y),add(r+1,k,-y);
    }
    ll qry(ll x,ll k,ll y=0){
    	for(;x;x-=x&-x)y+=h[x][k];
    	return y;
    }
    vector<ll>e[N];
    ll&cmx(ll&x,ll y){return x=(x>y?x:y);}
    void dfs(ll x){
    	d[x]=d[p[x]]+1,dfp[dfn[x]=++n]=x;
    	for(ll i:e[x])dfs(i);
    	dfm[x]=n;
    }
    void Dfs(ll x){
    	for(ll i:e[x])Dfs(i);
    	for(ll i=1;i<=m;i++){
    		ll s=0;
    		for(ll y:e[x])s+=g[y][i];
    		f[x][i]=s+i;
    		for(ll y:e[x])
    			cmx(f[x][i],s+i-g[y][i]+f[y][i+1]);
    		g[x][i]=(dfm[x]-dfn[x]+1)*i;
    		mdf(dfn[x],dfn[x],i,i*(i-1)+f[x][i]);
    		for(ll y:e[x])
    			mdf(dfn[y],dfm[y],i,s-g[y][i]);
    	}
    	for(ll j=dfn[x],k;j<=dfm[x];j++)
    		k=d[dfp[j]]-d[x]+1,cmx(g[x][k],qry(j,k));
    }
    void slv(){
    	cin>>n>>m,m++;
    	for(ll i=1;i<=n;i++)
    		e[i].clear(),fill(h[i],h[i]+m+1,0);
    	for(ll i=2;i<=n;i++)cin>>p[i],e[p[i]].pb(i);
    	n=0,dfs(1),Dfs(1);
    	cout<<f[1][1]<<'\n';
    }
    int main(){
    	ios::sync_with_stdio(0);
    	cin.tie(0),cout.tie(0);
    	cin>>T;
    	while(T--)slv();
    	return 0;
    }
    
    

    2026-01-03 来自 北京

    0
  • T1

    #include <bits/stdc++.h>
    
    #define FstIO ios::sync_with_stdio(0), cin.tie(0), cout.tie(0)
    #define pii pair <ll, ll>
    
    using namespace std;
    using ll = long long;
    
    const ll N = 5e5 + 5, M = 320; 
    
    ll n, m;
    ll C[N], h = 1e18, s = 0; 
    
    signed main()
    {
        freopen("candy.in", "r", stdin);
        freopen("candy.out", "w", stdout);
    	
    	FstIO; 
    		
    	cin >> n >> m;
    	for (ll i = 1; i <= n; ++ i )
    	{
    		ll x, y; cin >> x >> y; 
    		C[i] = x; h = min(h, x + y);
    	}
    	sort(C + 1, C + n + 1);
    	for (ll i = 1; i <= n; ++ i ) C[i] += C[i - 1];
    	for (ll i = 0; i <= n; ++ i ) 
    	{
    		if (m < C[i]) break; 
    		s = max(s, i + (m - C[i]) / h * 2);
    	}
    	cout << s << '\n';
    	
    	return 0; 
    }
    

    T2

    #include<bits/stdc++.h>
    using namespace std;
    const int N=10005,P=998244353;
    int n,m,a[N];
    int pow2[N],C[N][N];
    void init(){
    	pow2[0]=1; for(int i=1;i<=10000;++i) pow2[i]=(2ll*pow2[i-1])%P;
    	C[0][0]=1;
    	for(int i=1;i<=10000;++i) {
    		C[i][0]=1;
    		for(int j=1;j<=i;++j) C[i][j]=(C[i-1][j-1]+C[i-1][j])%P;
    	}
    }
    int main(){
    	ios_base::sync_with_stdio(false);
    	cin.tie(0); cout.tie(0);
    	int ID,T; cin>>ID>>T;
    	init();
    	while(T--) {
    		cin>>n>>m;
    		for(int i=1;i<=n;++i) cin>>a[i];
    		sort(a+1,a+n+1);
    		
    		int ans=0;
    		for(int i=1;i<=n;++i) {
    			int pos=0;
    			for(int j=i+1;j<=n;++j) {
    				if(a[i]==a[j]||(m-2-(n-j))<0) continue;
    				if(a[j]>=a[i]*2) break;
    				while(pos<n&&a[pos+1]+a[i]<a[j]) pos++;
    				ans=(ans+1ll*C[n-i-1][m-2-(n-j)]*pow2[pos])%P;
    			}
    		}
    		cout<<(pow2[n]-ans+P)%P<<'\n';
    	}
    	return 0;
    }
    
    

    2026-01-03 来自 北京

    0
  • 自己上洛谷看

    2026-01-03 来自 浙江

    0

热门讨论