模拟_五次求导

原题链接

五次求导

思路

  1. 最低5次导变成0次导
  2. 5次以下乘以 次数的阶乘
  3. 5次以上是5数连乘
  4. 起始完全没必要分情况,直接下标+7,然后1-7全部初始化成1,就不用分情况了。
  5. 另外如果最低次的系数也是0,要输出0 0.
#include<iostream>
#include<vector>

using namespace std;

using PII=pair<int,int>;
const int N=15;
int der[N],fac[N];;
vector<PII> res;

void init(){
    fac[0]=fac[1]=1;
    for(int i=2;i<=5;i++){
        fac[i]=fac[i-1]*i;
    }
    for(int i=6;i<=N;i++){
        fac[i]=1;
        for(int j=0;j<5;j++){
            fac[i]*=(i-j);
        }
    }
}

int main(){
    int n;
    cin>>n;
    init();

    while(n--){
        int a,b;
        cin>>a>>b;
        if(b>=5)    der[b-5]+=fac[b]*a;
    }
    for(int i=0;i<N;i++){
        if(der[i]!=0){
            res.push_back({der[i],i});
        }
    }
    //cout<<res.size()<<endl;
    
    if(res.size()!=0){
        for(int i=N;i>=0;i--){
            if(der[i]!=0){
                printf("%d %d\n",der[i],i);
            }
        }
    }
    else{
        cout<<"0 0"<<endl;
    }
    
    
    return 0;
}
posted @ 2025-05-24 09:40  青檀炽羽  阅读(14)  评论(0)    收藏  举报