求NOIP题解
2025-12-21 10:08:48
发布于:广东
有帅哥美女能公布一下今年NOIP的四道题解吗(要AC的)
全部评论 5
谢谢各位帅哥美女发的题解
2026-01-09 来自 广东
0T4 太长了代码放不下
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 来自 北京
0T1
#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



























有帮助,赞一个