11051:二項係数2
何の問題ですか。
この係数をアノテーション形式で求める問題.
なくてもあってもいい。
コメント(または星雲)を使用する必要はありません.古典的な解答方法でも完全に解決できます.分子を分母に分ける#include <stdio.h>
#include <stdlib.h>
unsigned g(unsigned a, unsigned b) {
if(b==0) return a;
return g(b, a%b);
}
int main() {
unsigned N,K,i,j,S=1,t,*k1,*k2;
scanf("%d %d", &N, &K);
k1=(unsigned*)calloc(4,N-K);
k2=(unsigned*)calloc(4,N-K);
for(i=N;i>K;i--) k1[N-i]=i;
for(i=N-K;i>0;i--) k2[N-K-i]=i;
for(i=0;i<N-K;i++) {
for(j=0;j<N-K;j++) {
if(k2[i]==1) break;
t=g(k1[j],k2[i]);
if(t>1) {
k1[j]/=t;
k2[i]/=t;
}
}
}
for(i=0;i<N-K;i++) S=S*k1[i]%10007;
printf("%d", S);
}
他人の解答
しかし、きちんと問題を解決するには、メモを書いたほうがいい.
また,パスカルの三角形式でより速く求めることができる.
(nr)=(n−1r−1)+(n−1r)\binom{n}{r} =\binom{n-1}{r-1}+\binom{n-1}{r}(rn)=(r−1n−1)+(rn−1)#include <stdio.h>
int n,k,c[1001][1001];
int main(){
scanf("%d %d",&n,&k);
c[0][0]=1;
for(int i=1; i<=n; i++){
for(int j=0; j<=k; j++){
if(j-1<0)
c[i][j]=c[i-1][j];
c[i][j]=(c[i-1][j]+c[i-1][j-1])%10007;
}
}
printf("%d",c[n][k]);
}
osori_1010の回答
-> https://www.acmicpc.net/source/21988829
参考文献
コメント(または星雲)を使用する必要はありません.古典的な解答方法でも完全に解決できます.分子を分母に分ける
#include <stdio.h>
#include <stdlib.h>
unsigned g(unsigned a, unsigned b) {
if(b==0) return a;
return g(b, a%b);
}
int main() {
unsigned N,K,i,j,S=1,t,*k1,*k2;
scanf("%d %d", &N, &K);
k1=(unsigned*)calloc(4,N-K);
k2=(unsigned*)calloc(4,N-K);
for(i=N;i>K;i--) k1[N-i]=i;
for(i=N-K;i>0;i--) k2[N-K-i]=i;
for(i=0;i<N-K;i++) {
for(j=0;j<N-K;j++) {
if(k2[i]==1) break;
t=g(k1[j],k2[i]);
if(t>1) {
k1[j]/=t;
k2[i]/=t;
}
}
}
for(i=0;i<N-K;i++) S=S*k1[i]%10007;
printf("%d", S);
}
他人の解答
しかし、きちんと問題を解決するには、メモを書いたほうがいい.
また,パスカルの三角形式でより速く求めることができる.
(nr)=(n−1r−1)+(n−1r)\binom{n}{r} =\binom{n-1}{r-1}+\binom{n-1}{r}(rn)=(r−1n−1)+(rn−1)#include <stdio.h>
int n,k,c[1001][1001];
int main(){
scanf("%d %d",&n,&k);
c[0][0]=1;
for(int i=1; i<=n; i++){
for(int j=0; j<=k; j++){
if(j-1<0)
c[i][j]=c[i-1][j];
c[i][j]=(c[i-1][j]+c[i-1][j-1])%10007;
}
}
printf("%d",c[n][k]);
}
osori_1010の回答
-> https://www.acmicpc.net/source/21988829
参考文献
#include <stdio.h>
int n,k,c[1001][1001];
int main(){
scanf("%d %d",&n,&k);
c[0][0]=1;
for(int i=1; i<=n; i++){
for(int j=0; j<=k; j++){
if(j-1<0)
c[i][j]=c[i-1][j];
c[i][j]=(c[i-1][j]+c[i-1][j-1])%10007;
}
}
printf("%d",c[n][k]);
}
-> https://m.blog.naver.com/saomath/221948595533
Reference
この問題について(11051:二項係数2), 我々は、より多くの情報をここで見つけました https://velog.io/@qoo0302/11051-이항-계수-2テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol