3 条题解

  • 2
    @ 2025-11-21 19:36:27
    #include <stdio.h>
    int main(){
        int t;
        scanf("%d",&t);
        while(t--){
            long long m,n,s1=1,temp;
            scanf("%lld%lld",&n,&m);
            if(m>n-m){m=n-m;}//利用组合的性质C(n,m)=C(n,n-m)
            temp=n;
            for(int i=1;i<=m;i++){
                s1=s1*temp/i;
                temp--;
            }
            printf("%lld\n",s1);
        }
    }
    
    • @ 2025-11-27 20:00:38

      666可以👍

  • 0
    @ 2025-8-21 13:13:08
    from math import comb
    for _ in range(int(input())):
        n, m = map(int, input().split())
        print(comb(n, m))
    
    • 0
      @ 2023-10-13 13:55:09
      #include<stdio.h>
      long long fun(long long n, long long m) 
      {
          if (m > n - m) 
          {
              m = n - m;
      //用于缩减循环次数,否则可能溢出或超时
      //原理见高中数学排列组合
          }
          long long result = 1;
          for (int i = 1; i <= m; i++) {
              result = result * (n - i + 1) / i;
      //排列组合的化简公式,不然容易中途溢出
          }
          return result;
      }
      int main()
      {
          int t;
          scanf("%d",&t);
          while(t--)
          {
              int n,m;
              scanf("%d%d",&n,&m);
              printf("%lld\n",fun(n,m));
          }
          return 0;
      }
      
      • 1

      信息

      ID
      210
      时间
      1000ms
      内存
      128MiB
      难度
      8
      标签
      (无)
      递交数
      1625
      已通过
      210
      上传者