3 条题解

  • 2
    @ 2024-4-27 15:09:27

    一日不发题解,浑身痛得慌。

    #include<bits/stdc++.h>
    using namespace std;
    int n,a[55],T=1000000000+7;
    int main(){
    	cin>>n;
    	for(int i=0;i<n;++i){
    		cin>>a[i];
    	}
    	sort(a,a+n);
    	long long p=1;
    	for(int i=0;i<n;++i){
    		p*=(a[i]-i);
    		p%=T;
    	}
    	cout<<p;
    	return 0;
    }
    

    看完点个赞👍 ,thank you very much!😄

    • 2
      @ 2024-4-27 15:04:40

      世界上最好的题解😄

      #include<iostream>
      #include<algorithm>
      using namespace std;
      int n,a[55],T=1000000000+7;
      int main(){
      	cin>>n;
      	for(int i=0;i<n;++i){
      		cin>>a[i];
      	}
      	sort(a,a+n);
      	long long int p=1;
      	for(int i=0;i<n;++i){
      		p*=(a[i]-i);
      		p%=T;
      	}
      	cout<<p;
      	return 0;
      }
      

      看完别忘了点赞呦👍

      • -2
        @ 2023-12-14 1:09:55

        对于第i只兔子,取得编号的方法为Mi种 那么,总方法数为:M1 * M2 * ...* Mi 但要排除任意两只编号相同的可能 (这怎么算?)

        仔细想想,如果能保证M1<=M2<=M3...<=Mi 那么答案就是 M1*(M2-1)(M3-2)(Mi-i+1) (若i从0开始,通项为mi-i)

        当任何一项为0时,表示没有可选择编号了,退出

        注意题目只要叫你取余,不要刚,上long long。 这题不上long long WA7,可见出题人的恶意多么热切希望你掌握long long

        #include <bits/stdc++.h>
        using namespace std;
        
        int main(){
            int n, m[50], itm, MOD=1e9+7; 
            //对1e9取模后再和Mi(1-1000)相乘,理论上最大为1e12,可能爆int(约2e9)
            long long sum =1; 
            cin>>n;
            for(int i=0;i<n;i++) cin>>m[i];
            sort(m,m+n);//免费好用的快排,不用白不用
            for (int i=0;i<n;i++){
                itm = m[i]-i;
                if (itm<=0) {sum=0;break;}
                sum = sum*itm % MOD;
            }
            cout<<sum;
            return 0;
        }
        
        • 1

        信息

        ID
        831
        时间
        1000ms
        内存
        125MiB
        难度
        2
        标签
        递交数
        17
        已通过
        8
        上传者