只过了第一个点,其他都是wa,有没有大佬来个特殊点

P1303 A*B Problem

LucyLyn @ 2023-08-28 01:30:59

#include<bits/stdc++.h>
using namespace std;

void add(vector<int>&s1,vector<int>&s2){
//  if(s1.size()<s2.size()){
//      s1.swap(s2);
//  }
    int l1=s1.size();
    int l2=s2.size();
    vector<int> res(l1+1,0);
    for(int i=0;i<l2;i++){
        res[l1-i] = res[l1-i]+s1[l1-i-1]+s2[l2-i-1];
        if(res[l1-i] >= 10){
            res[l1-i]-=10;
            res[l1-i-1]++;
        }
    }
    for(int i=l2;i<l1;i++){
        res[l1-i] = res[l1-i]+s1[l1-i-1];
        if(res[l1-i] >= 10){
            res[l1-i]-=10;
            res[l1-i-1]++;
        }
    }
    s1.swap(res);
}

int main(){
    int max = 5000;
    string ss1,ss2;
    cin>>ss1>>ss2;
    if(ss1.size()<ss2.size()){
        ss1.swap(ss2);
    }
    vector<int> s1(ss1.size());
    vector<int> s2(ss2.size());
    vector<int> res(max);
    for(int i=0;i<ss1.size();i++){
        s1[i]=ss1[i]-'0';
    }
    for(int i=0;i<ss2.size();i++){
        s2[i]=ss2[i]-'0';
    }
    for(int i=0;i<s2.size();i++){
        vector<int> t;
        t = s1;
        t.insert(t.begin(),0);
        int lt = t.size();
        int jin = 0;
        for(int j=0;j<t.size();j++){
            t[lt-j-1] = t[lt-j-1]*s2[s2.size()-i-1]+jin;
            if(t[lt-j-1]>=10){
                jin = t[lt-j-1]/10;
                t[lt-j-1] %= 10;
            }
        }
        for(int j=0;j<i;j++){
            t.push_back(0);
        }
        add(res,t);
    }
    int x=0;
    for(int i=0;i<res.size();i++){
        if(res[i]){
            x = i;
            break;
        }
    }
    if(x == 0){
        cout<<0;
        return 0;
    }
    for(int i=x;i<res.size();i++){
        cout<<res[i];
    }
}

by one_zero_two_zero @ 2023-08-28 03:28:10

稍微造小一点的数据对拍一下就可以了

我帮你拍了几组就出问题了

192$ $433

上面这一组就出问题,你的程序输出的是405136


by one_zero_two_zero @ 2023-08-28 03:31:36

还有,洛谷不是支持下载测试点的吗(doge


by LucyLyn @ 2023-08-28 13:33:45

@one_zero_two_zero 谢谢哥 我可能等级太低了不让我下载哈哈哈哈哈 直接说我次数不够了


|