原题链接
五次求导
思路
- 最低5次导变成0次导
- 5次以下乘以 次数的阶乘
- 5次以上是5数连乘
- 起始完全没必要分情况,直接下标+7,然后1-7全部初始化成1,就不用分情况了。
- 另外如果最低次的系数也是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;
}