为什么会这样?(玄关
查看原帖
为什么会这样?(玄关
525038
leiwusi楼主2023/12/10 20:58

WA代码:\

#include<iostream>
using namespace std;
typedef long long ll;
const int MAXN = 2010;
ll ls[MAXN][MAXN];
ll mp[MAXN][MAXN];
int t;
ll k;
void init(){
    ls[1][1] = 1;
    for(int i = 2;i<=2005;i++){
        for(int j = 1;j<=i;j++){
            ls[i][j] = (ls[i-1][j-1]+ls[i-1][j]);
            if(ls[i][j]%k == 0) mp[i][j]++;
        }
    }
}
int m,n;

void ak(){
    for(int i = 1;i<=2005;i++){
        for(int j = 1;j<=2005;j++){
            mp[i][j] += mp[i-1][j];
        }
    }
    for(int i = 1;i<=2005;i++){
        for(int j = 1;j<=2005;j++){
            mp[i][j] += mp[i][j-1];
        }
    }
}

int main(){
    ios::sync_with_stdio(false);
    cin.tie(0);cout.tie(0);
    // freopen("P2822.in","r",stdin);
    // freopen("P2822.out","w",stdout);
    cin>>t>>k;
    init();
    
    ak();
    // for(int i = 1;i<=8;i++){
    //     for(int j = 1;j<=i;j++){
    //         cout<<mp[i][j]<<" ";
    //     }
    //     cout<<"\n";
    // }
    while(t--){
        cin>>n>>m;
        cout<<mp[n+1][m+1]<<"\n";
    }
    return 0;
}

AC代码:\

#include<iostream>
using namespace std;
typedef long long ll;
const int MAXN = 2010;
ll ls[MAXN][MAXN];
ll mp[MAXN][MAXN];
int t;
ll k;
void init(){
    ls[1][1] = 1;
    for(int i = 2;i<=2005;i++){
        for(int j = 1;j<=i;j++){
            ls[i][j] = (ls[i-1][j-1]+ls[i-1][j])%k;
            if(ls[i][j] == 0) mp[i][j]++;
        }
    }
}
int m,n;

void ak(){
    for(int i = 1;i<=2005;i++){
        for(int j = 1;j<=2005;j++){
            mp[i][j] += mp[i-1][j];
        }
    }
    for(int i = 1;i<=2005;i++){
        for(int j = 1;j<=2005;j++){
            mp[i][j] += mp[i][j-1];
        }
    }
}

int main(){
    ios::sync_with_stdio(false);
    cin.tie(0);cout.tie(0);
    // freopen("P2822.in","r",stdin);
    // freopen("P2822.out","w",stdout);
    cin>>t>>k;
    init();
    
    ak();
    // for(int i = 1;i<=8;i++){
    //     for(int j = 1;j<=i;j++){
    //         cout<<mp[i][j]<<" ";
    //     }
    //     cout<<"\n";
    // }
    while(t--){
        cin>>n>>m;
        cout<<mp[n+1][m+1]<<"\n";
    }
    return 0;
}

rt,是组合数爆longlong了吗

2023/12/10 20:58
加载中...