TOYOTA SYSTEMS Programming Contest 2025(AtCoder Beginner Contest 431)
D - Robot Customize
头部最多m/2,对于头部做背包,最初是全放在身体上,一步一步换代价
#include<bits/stdc++.h>
using namespace std;
#define endl '\n'
#define yes cout << "Yes" << endl
#define no cout << "No" << endl
#define pii pair<int,int>
#define ll long long
#define pb push_back
#define ft first
#define se second
#define inf 0x3f3f3f3f
#define INF 0x3f3f3f3f3f3f3f3f
#define int long long
int n;
const int N=510;
int w[N],h[N],b[N];int f[510*510/2];
void solve(){
cin>>n;int m=0;int sb=0;
for(int i=1;i<=n;i++){cin>>w[i]>>h[i]>>b[i];
m+=w[i];sb+=b[i];
}
f[0]=sb;for(int j=1;j<=m/2;j++)f[j]=-1e18;
for(int i=1;i<=n;i++){
for(int j=m/2;j>=w[i];j--){
f[j]=max(f[j],f[j-w[i]]+h[i]-b[i]);
}
}
int ans=0;for(int i=0;i<=m/2;i++)ans=max(ans,f[i]);
cout<<ans<<'\n';
}
signed main(){
std::ios::sync_with_stdio(false);
int T=1;//cin>>T;
while(T--){
solve();
}
}
E - Reflection on Grid
写的好烂,以后按队友这么写
F - Almost Sorted 2
挨个插入,插入的位置为B[k],B[k+1],a[i]>=B[k]-D自然满足,只需B[k+1]>=a[i]-D ,找到第一个这样的位置j,就有i-j+1个位置可以插入
算完后再去重/=c[a[i]]
#include<bits/stdc++.h>
using namespace std;
#define endl '\n'
#define yes cout << "Yes" << endl
#define no cout << "No" << endl
#define pii pair<int,int>
#define ll long long
#define pb push_back
#define ft first
#define se second
#define inf 0x3f3f3f3f
#define INF 0x3f3f3f3f3f3f3f3f
#define int long long
const int p=998244353;
const int N=200010;
const int V=1000010;
int a[N];int fac[N],infac[N];
int c[V];
int qmi(int a,int b){
int res=1;
while(b){
if(b&1)res=res*a%p;
a=a*a%p;
b>>=1;
}
return res;
}
void solve(){
int n,D;cin>>n>>D;
for(int i=1;i<=n;i++){cin>>a[i];}
sort(a+1,a+n+1);
fac[0]=1;
for(int i=1;i<=n;i++)fac[i]=fac[i-1]*i%p;
infac[n]=qmi(fac[n],p-2)%p;for(int i=n-1;i>=1;i--)infac[i]=infac[i+1]*(i+1)%p;
int ans=1;
int i=1;int j=1;
for(;i<=n;i++){
while(j<i&&a[j]<a[i]-D)j++;
ans=ans*(i-j+1)%p;//任意一个的前面或者最后
}
for(int i=1;i<=n;i++){
int j=i;
while(j<=n&&a[j]==a[i])j++;j--;
ans=ans*infac[j-i+1]%p;
i=j;
}
cout<<ans<<'\n';
}
signed main(){
std::ios::sync_with_stdio(false);
int T=1;//cin>>T;
while(T--){
solve();
}
}

浙公网安备 33010602011771号