牛客练习赛64题解
A.怪盗-1412
题意:
题解:
#include<bits/stdc++.h> using namespace std; int main(){ int _; scanf("%d",&_); while(_--){ long long n,m,k; scanf("%lld%lld%lld",&n,&m,&k); printf("%lld\n",(n/2)*m*k*(n-n/2)); } }
B.Dis2
题意:
题解:
AC代码
/* Author:zzugzx Lang:C++ Blog:blog.csdn.net/qq_43756519 */ #include<bits/stdc++.h> using namespace std; #define fi first #define se second #define pb push_back #define mp make_pair #define all(x) (x).begin(),(x).end() #define endl '\n' typedef long long ll; typedef pair<int, int> pii; typedef pair<ll, ll> pll; const int mod=1e9+7; //const int mod=998244353; const double eps = 1e-10; const double pi=acos(-1.0); const int maxn=1e6+10; const ll inf=0x3f3f3f3f; const int dir[4][2]={{0,1},{1,0},{0,-1},{-1,0}}; ll ans[maxn]; vector<int> g[maxn]; int main() { ios::sync_with_stdio(false); cin.tie(0);cout.tie(0); //freopen("in.txt","r",stdin); //freopen("out.txt","w",stdout); int n;cin>>n; for(int i=1,u,v;i<n;i++){ cin>>u>>v; g[u].pb(v); g[v].pb(u); } for(int u=1;u<=n;u++){ ll ans=0; for(auto v:g[u]){ if(v==u)continue; ans+=g[v].size()-1; } cout<<ans<<endl; } return 0; }
C.序列卷积之和
题意:
题解:
AC代码
/* Author:zzugzx Lang:C++ Blog:blog.csdn.net/qq_43756519 */ #include<bits/stdc++.h> using namespace std; #define fi first #define se second #define pb push_back #define mp make_pair #define all(x) (x).begin(),(x).end() #define endl '\n' typedef long long ll; typedef pair<int, int> pii; typedef pair<ll, ll> pll; const int mod=1e9+7; //const int mod=998244353; const double eps = 1e-10; const double pi=acos(-1.0); const int maxn=1e6+10; const ll inf=0x3f3f3f3f; const int dir[4][2]={{0,1},{1,0},{0,-1},{-1,0}}; ll Pow(ll a, ll b){ ll ans = 1; while(b > 0){ if(b & 1){ ans = ans * a % mod; } a = a * a % mod; b >>= 1; } return ans; } ll a[maxn],s1[maxn]; int main() { ios::sync_with_stdio(false); cin.tie(0);cout.tie(0); //freopen("in.txt","r",stdin); //freopen("out.txt","w",stdout); int n; cin>>n; for(int i=1;i<=n;i++) cin>>a[i]; for(int i=n;i;i--) s1[i]=(s1[i+1]+a[i]*(n-i+1)%mod)%mod; ll ans=0; for(int i=1;i<=n;i++) ans=(ans+i*a[i]%mod*s1[i]%mod)%mod;; cout<<ans; return 0; }
D.宝石装箱
题意:
题解:
AC代码
/* Author:zzugzx Lang:C++ Blog:blog.csdn.net/qq_43756519 */ #include<bits/stdc++.h> using namespace std; #define fi first #define se second #define pb push_back #define mp make_pair #define all(x) (x).begin(),(x).end() #define endl '\n' typedef long long ll; typedef pair<int, int> pii; typedef pair<ll, ll> pll; //const int mod=1e9+7; const int mod=998244353; const double eps = 1e-10; const double pi=acos(-1.0); const int maxn=1e6+10; const ll inf=0x3f3f3f3f; const int dir[4][2]={{0,1},{1,0},{0,-1},{-1,0}}; ll fac[maxn],dp[maxn],a[maxn]; int main() { ios::sync_with_stdio(false); cin.tie(0);cout.tie(0); //freopen("in.txt","r",stdin); //freopen("out.txt","w",stdout); int n;cin>>n;fac[0]=1; for(int i=1,x;i<=n;i++){ cin>>x; a[x]++; fac[i]=fac[i-1]*i%mod; } dp[0]=1; for(int i=1;i<=n;i++) for(int j=i;j>=0;j--) dp[j+1]=(dp[j+1]+dp[j]*a[i]%mod)%mod; ll ans=fac[n],res=0; for(int i=1,p=1;i<=n;i++,p=-p) res=(res+fac[n-i]*dp[i]*p%mod+mod)%mod; cout<<(ans-res+mod)%mod; return 0; }