位运算的问题?求助
查看原帖
位运算的问题?求助
788202
water_monster楼主2023/9/9 11:18
#include<bits/stdc++.h>
using namespace std;
#define ll long long
const ll M=1e6+10;
ll f[M],c[10],d[10];
ll n,s,ans;
inline ll w(int x){
	return c[x]*(d[x]+1);
}
int main(){
	for(ll i=1;i<=4;i++){
		scanf("%lld",&c[i]);
	}
	f[0]=1;
	for(ll i=1;i<=4;i++){
		for(int j=c[i];j<=M;j++){
			f[j]+=f[j-c[i]];
		}
	}
	scanf("%lld",&n);
	while(n--){
		ans=0;
		for(ll i=1;i<=4;i++){
			scanf("%lld",&d[i]);
		}
		scanf("%lld",&s);
		for(int i=0;i<=15;i++){
			ll k=0,t=s;
			for(int j=1;j<=4;j++){
				if((i>>(j-1))&1){
					t-=w(j),k^=1;
				}
			}
			if(t>0) k ? (ans-=f[t]) : (ans+=f[t]); //cout<<ans<<" "; 
		}
	//	cout<<endl;
		printf("%lld\n",ans);
	}
	return 0;
}
2023/9/9 11:18
加载中...