結果

問題 No.137 貯金箱の焦り
ユーザー the-tool-erthe-tool-er
提出日時 2023-05-03 11:14:24
言語 C++14
(gcc 13.3.0 + boost 1.87.0)
結果
AC  
実行時間 266 ms / 5,000 ms
コード長 1,789 bytes
コンパイル時間 1,748 ms
コンパイル使用メモリ 168,872 KB
実行使用メモリ 29,384 KB
最終ジャッジ日時 2024-11-21 16:55:56
合計ジャッジ時間 4,176 ms
ジャッジサーバーID
(参考情報)
judge3 / judge4
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 23
権限があれば一括ダウンロードができます

ソースコード

diff #

// Problem: No.137 貯金箱の焦り
// Contest: yukicoder
// URL: https://yukicoder.me/problems/no/137
// Memory Limit: 512 MB
// Time Limit: 5000 ms

/*
hxz还是爬的好
*/
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define f(i,a,b) for(ll i=a;i<=b;i++)
#define wt int tt=d;while(tt--)
#define py puts("Yes")
#define pn puts("No")
#define pritnf printf
#define edfl endl
#define fe(i,e) for(int i=0;i<e.size();i++)
#define vi vector<ll>
inline ll rd() {
	ll x=0,f=1;
	char c=getchar();
	while(!isdigit(c)){if(c=='-')f=-1;c=getchar();}
	while(isdigit(c))x=x*10+c-'0',c=getchar();
	return x*f;
}
namespace binom{
	const ll Lim=300010,mod=998244353;
	ll jc[Lim],inv[Lim],inc[Lim];
	void pre(){
		jc[0]=jc[1]=inc[0]=inc[1]=inv[0]=inv[1]=1;
		f(i,2,Lim-1)jc[i]=jc[i-1]*i%mod,inv[i]=(mod-mod/i)*inv[mod%i]%mod,
		inc[i]=inc[i-1]*inv[i]%mod;
	}ll C(ll n,ll m){if(n<0||m<0||n<m)return 0;return jc[n]*inc[m]%mod*inc[n-m]%mod;}
}
// using namespace binom;
ll dx[4]={0,1,0,-1};
ll dy[4]={1,0,-1,0};
#define d rd()
#define pb push_back
const ll N=300010;
struct edge{ll v,w,nx;}e[N<<1];
ll hd[N],cnt;
void add(ll u,ll v,ll w){e[++cnt]=(edge){v,w,hd[u]};hd[u]=cnt;}
ll qp(ll a,ll b,ll p){
	ll ans=1;while(b){
		if(b&1)ans=ans*a%p;
		a=a*a%p;b>>=1;
	}return ans;
}ll n,m;
ll dp[110][50010];//前 i-1 位与m相同,第i位及以上的值=j 的方案数
ll a[510],s;
const ll mod=1234567891;
int main(){
	n=d,m=d;
	f(i,1,n)a[i]=d,s+=a[i];dp[0][0]=1;
	f(i,1,n)for(int j=2*s-a[i];j>=0;j--)dp[0][j+a[i]]=(dp[0][j+a[i]]+dp[0][j])%mod;
	f(bit,1,63){
		f(i,0,2*s)if((i&1)==((m>>(bit-1))&1))dp[bit][i>>1]=(dp[bit][i>>1]+dp[bit-1][i])%mod;
		f(i,1,n)for(int j=2*s-a[i];j>=0;j--)dp[bit][j+a[i]]=(dp[bit][j+a[i]]+dp[bit][j])%mod;
	}cout<<dp[63][0];
	return 0;
}
/*
wy还是爬的好
*/
0