アルゴ式(beta版)の「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶ数学(7) 場合の数からの出典です。
algo-method.com
アルゴ式とは...
>・プログラミングや情報科学をコツコツ学べる「教科書」
>・学んだ内容をゲーム感覚で大量に実践できる「練習問題」
>の2つで構成される、Web上で完結した学習コンテンツです。
C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶ数学(7) 場合の数
僕が作成、提出したコードは、以下のとおりです。
ランチセット
/* C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶ数学(7) 場合の数 ランチセット https://algo-method.com/tasks/729 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; int main(void){ int n,m; cin>>n>>m; cout<<n*m<<endl; return 0; }
2つのサイコロ (1)
/* C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶ数学(7) 場合の数 2つのサイコロ (1) https://algo-method.com/tasks/730 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; int main(void){ int n; cin>>n; int ans=0; for(int red=1;red<=6;red++){ for(int blue=1;blue<=6;blue++){ if(red+blue==n){ ans++; } } } cout<<ans<<endl; return 0; }
2つのサイコロ (2)
/* C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶ数学(7) 場合の数 2つのサイコロ (2) https://algo-method.com/tasks/731 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; int main(void){ int x,y; cin>>x>>y; int ans=0; for(int red=1;red<=6;red++){ for(int blue=1;blue<=6;blue++){ if(red+blue==x || red+blue==y){ ans++; } } } cout<<ans<<endl; return 0; }
パスワードの可能性
/* C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶ数学(7) 場合の数 パスワードの可能性 https://algo-method.com/tasks/736 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; int main(void){ int n,m; cin>>n>>m; vector<int> a(n),b(m); for(int i=0;i<n;i++){ cin>>a[i]; } for(int i=0;i<m;i++){ cin>>b[i]; } cout<<n*m<<endl; return 0; }
ラッキーナンバー (1)
/* C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶ数学(7) 場合の数 ラッキーナンバー (1) https://algo-method.com/tasks/732 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; int main(void){ int n; cin>>n; vector<int> a(n); for(int i=0;i<n;i++){ cin>>a[i]; } cout<<n*n*n<<endl; return 0; }
ラッキーナンバー (2)
/* C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶ数学(7) 場合の数 ラッキーナンバー (2) https://algo-method.com/tasks/735 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; int main(void){ int n; cin>>n; vector<int> a(n); for(int i=0;i<n;i++){ cin>>a[i]; } int ans=1000-(10-n)*(10-n)*(10-n); cout<<ans<<endl; return 0; }
ボールと箱 (1)
/* C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶ数学(7) 場合の数 ボールと箱 (1) https://algo-method.com/tasks/738 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; using ll=long long; int main(void){ ll n,m; cin>>n>>m; ll ans=1; for(ll i=0;i<m;i++){ ans*=(n-i); } cout<<ans<<endl; return 0; }
ボールと箱 (2)
/* C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶ数学(7) 場合の数 ボールと箱 (2) https://algo-method.com/tasks/739 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; using ll=long long; int main(void){ ll n; cin>>n; ll ans=1; for(ll i=2;i<=n;i++){ ans*=i; } cout<<ans<<endl; return 0; }
ボールと箱 (3)
/* C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶ数学(7) 場合の数 ボールと箱 (3) https://algo-method.com/tasks/740 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; using ll=long long; int main(void){ ll n,m; cin>>n>>m; ll cnt=0; ll ans=1; for(ll i=0;i<m;i++){ ans*=(n-i); } cout<<ans<<endl; return 0; }
ボールを選ぶ
/* C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶ数学(7) 場合の数 ボールを選ぶ https://algo-method.com/tasks/741 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; using ll=long long; int main(void){ ll n,m; cin>>n>>m; ll under=1; ll up=1; for(ll i=1;i<=m;i++){ under*=i; } for(ll i=0;i<m;i++){ up*=(n-i); } cout<<up/under<<endl; return 0; }
チーム分け (1)
/* C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶ数学(7) 場合の数 チーム分け (1) https://algo-method.com/tasks/754 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; using ll=long long; ll combination(ll n,ll r){ ll permutation=1; for(ll i=0;i<r;i++){ permutation*=(n-i); } ll factorial=1; for(ll i=1;i<=r;i++){ factorial*=i; } ll ret=permutation/factorial; return ret; } int main(void){ ll n,xa,xb; cin>>n>>xa>>xb; ll ans=combination(n,xa); cout<<ans<<endl; return 0; }
チーム分け (2)
/* C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶ数学(7) 場合の数 チーム分け (2) https://algo-method.com/tasks/755 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; using ll=long long; ll combination(ll n,ll r){ ll permutation=1; for(ll i=0;i<r;i++){ permutation*=(n-i); } ll factorial=1; for(ll i=1;i<=r;i++){ factorial*=i; } ll ret=permutation/factorial; return ret; } int main(void){ ll n,a,b,c; cin>>n>>a>>b>>c; ll ans=combination(n,a)*combination(n-a,b); cout<<ans<<endl; return 0; }
コイントス (1)
/* C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶ数学(7) 場合の数 コイントス (1) https://algo-method.com/tasks/772 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; using ll=long long; ll combination(ll n,ll r){ ll permutation=1; for(ll i=0;i<r;i++){ permutation*=(n-i); } ll factorial=1; for(ll i=1;i<=r;i++){ factorial*=i; } ll ret=permutation/factorial; return ret; } int main(void){ ll n,m; cin>>n>>m; cout<<combination(n,m)<<endl; return 0; }
ラッキーナンバー (3)
/* C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶ数学(7) 場合の数 ラッキーナンバー (3) https://algo-method.com/tasks/777 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; using ll=long long; ll combination(ll n,ll r){ ll permutation=1; for(ll i=0;i<r;i++){ permutation*=(n-i); } ll factorial=1; for(ll i=1;i<=r;i++){ factorial*=i; } ll ret=permutation/factorial; return ret; } int main(void){ ll n; cin>>n; ll ans=combination(9,n-1); cout<<ans<<endl; return 0; }
グループ分け (1)
/* C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶ数学(7) 場合の数 グループ分け (1) https://algo-method.com/tasks/783 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; using ll=long long; ll factorial(ll x){ ll ret=1; for(ll i=2;i<=x;i++){ ret*=i; } return ret; } int main(void){ ll n,m; cin>>n>>m; ll ans=factorial(n+m)/(factorial(n)*factorial(m)); cout<<ans<<endl; return 0; }
グループ分け (2)
/* C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶ数学(7) 場合の数 グループ分け (2) https://algo-method.com/tasks/784 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; using ll=long long; ll combination(ll n,ll r){ ll permutation=1; for(ll i=0;i<r;i++){ permutation*=(n-i); } ll factorial=1; for(ll i=1;i<=r;i++){ factorial*=i; } ll ret=permutation/factorial; return ret; } int main(void){ ll n,m; cin>>n>>m; ll ans=combination(n+m-1,n); cout<<ans<<endl; return 0; }
グループ分け (3)
/* C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶ数学(7) 場合の数 グループ分け (3) https://algo-method.com/tasks/785 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; using ll=long long; ll combination(ll n,ll r){ ll permutation=1; for(ll i=0;i<r;i++){ permutation*=(n-i); } ll factorial=1; for(ll i=1;i<=r;i++){ factorial*=i; } ll ret=permutation/factorial; return ret; } int main(void){ ll n,m; cin>>n>>m; if(n<m){ cout<<0<<endl; return 0; } ll ans=combination(n-1,n-m); cout<<ans<<endl; return 0; }
グループ分け (4)
/* C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶ数学(7) 場合の数 グループ分け (4) https://algo-method.com/tasks/786 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; using ll=long long; int main(void){ ll n,m; cin>>n>>m; ll ans=1; for(ll i=0;i<n;i++){ ans*=m; } cout<<ans<<endl; return 0; }
N個の整数 (1)
/* C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶ数学(7) 場合の数 N個の整数 (1) https://algo-method.com/tasks/816 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; using ll=long long; ll combination(ll n,ll r){ ll permutation=1; for(ll i=0;i<r;i++){ permutation*=(n-i); } ll factorial=1; for(ll i=1;i<=r;i++){ factorial*=i; } ll ret=permutation/factorial; return ret; } int main(void){ ll n,m; cin>>n>>m; if(m<n){ cout<<0<<endl; return 0; } ll ans=combination(m-1,m-n); cout<<ans<<endl; return 0; }
N個の整数 (2)
/* C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶ数学(7) 場合の数 N個の整数 (2) https://algo-method.com/tasks/817 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; using ll=long long; ll combination(ll n,ll r){ ll permutation=1; for(ll i=0;i<r;i++){ permutation*=(n-i); } ll factorial=1; for(ll i=1;i<=r;i++){ factorial*=i; } ll ret=permutation/factorial; return ret; } int main(void){ ll n,m; cin>>n>>m; if(m<=n){ cout<<0<<endl; return 0; } ll ans=combination(m-1,n); cout<<ans<<endl; return 0; }
N個の整数 (3)
/* C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶ数学(7) 場合の数 N個の整数 (3) https://algo-method.com/tasks/818 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; using ll=long long; ll combination(ll n,ll r){ ll permutation=1; for(ll i=0;i<r;i++){ permutation*=(n-i); } ll factorial=1; for(ll i=1;i<=r;i++){ factorial*=i; } ll ret=permutation/factorial; return ret; } int main(void){ ll n,m; cin>>n>>m; ll ans=combination(m+n,n); cout<<ans<<endl; return 0; }
N個の整数 (4)
/* C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶ数学(7) 場合の数 N個の整数 (4) https://algo-method.com/tasks/822 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; using ll=long long; ll combination(ll n,ll r){ ll permutation=1; for(ll i=0;i<r;i++){ permutation*=(n-i); } ll factorial=1; for(ll i=1;i<=r;i++){ factorial*=i; } ll ret=permutation/factorial; return ret; } int main(void){ ll n,m; cin>>n>>m; ll ans=combination(n+m-1,m); cout<<ans<<endl; return 0; }
N個の整数 (5)
/* C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶ数学(7) 場合の数 N個の整数 (5) https://algo-method.com/tasks/819 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; using ll=long long; ll combination(ll n,ll r){ ll permutation=1; for(ll i=0;i<r;i++){ permutation*=(n-i); } ll factorial=1; for(ll i=1;i<=r;i++){ factorial*=i; } ll ret=permutation/factorial; return ret; } int main(void){ ll n,m; cin>>n>>m; vector<ll> x(n); for(ll i=0;i<n;i++){ cin>>x[i]; } ll sum=accumulate(x.begin(),x.end(),0LL); if(m-sum<0){ cout<<0<<endl; return 0; } ll ans=combination((m-sum)+n-1,m-sum); cout<<ans<<endl; return 0; }
N個の整数 (6)
/* C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶ数学(7) 場合の数 N個の整数 (6) https://algo-method.com/tasks/820 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; using ll=long long; ll combination(ll n,ll r){ ll permutation=1; for(ll i=0;i<r;i++){ permutation*=(n-i); } ll factorial=1; for(ll i=1;i<=r;i++){ factorial*=i; } ll ret=permutation/factorial; return ret; } int main(void){ ll n,m; cin>>n>>m; vector<ll> x(n); for(ll i=0;i<n;i++){ cin>>x[i]; } ll sum=accumulate(x.begin(),x.end(),0LL); if(sum-m<0){ cout<<0<<endl; return 0; } ll ans=combination((sum-m)+n-1,sum-m); cout<<ans<<endl; return 0; }
N個の整数 (7)
/* C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶ数学(7) 場合の数 N個の整数 (7) https://algo-method.com/tasks/821 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; using ll=long long; ll combination(ll n,ll r){ ll permutation=1; for(ll i=0;i<r;i++){ permutation*=(n-i); } ll factorial=1; for(ll i=1;i<=r;i++){ factorial*=i; } ll ret=permutation/factorial; return ret; } int main(void){ ll n,m; cin>>n>>m; ll ans=combination(n+m,m); cout<<ans<<endl; return 0; }
パスワードの可能性 (Ex)
/* C++による「設計技法とデータ構造 (#毎日アルゴ式)」プログラミングで学ぶ数学(7) 場合の数 パスワードの可能性 (Ex) https://algo-method.com/tasks/776 提出コードの解答例 https://neguse-atama.hatenablog.com */ #include<bits/stdc++.h> using namespace std; using ll=long long; int main(void){ ll n; cin>>n; ll ans=n; for(ll i=1;i<n;i++){ ans*=(10-i); } cout<<ans<<endl; return 0; }
設問の出典は、情報科学をコツコツ積み立てて学習できるサービス「アルゴ式(beta版)」です。
algo-method.com