样例已过,测试点三个超时,7个错误
  • 板块P1102 A-B 数对
  • 楼主crush_j
  • 当前回复6
  • 已保存回复6
  • 发布时间2023/11/8 18:55
  • 上次更新2023/11/8 20:30:27
查看原帖
样例已过,测试点三个超时,7个错误
1133932
crush_j楼主2023/11/8 18:55

#include<bits/stdc++.h>
using namespace std;
string s1[200010],k;
int kbiao[35];
int geshu[200010];
int arr[200010][35];
int result[35];
int math_sub(int arr1[35],int arr2[35],int b)//减法
{
    for(int i=0;i<b;i++)
    {
        //借位处理
        if(arr2[i]>arr1[i])
        {
            arr1[i-1]--;
            arr1[i]+=10;
        }
        result[i]=arr1[i]-arr2[i];
    }
    while(result[b]==0&&b>1)
    {
        b--;
    }
    for(int i=0;i<35;i++)
    {
        if(kbiao[i]==result[i])
        {
            continue;
        }
        else{
            return 0;
        }
    }
    return 1;
}
int main()
{
    long long a;
    cin>>a>>k;
    int a3=0;
    for(int j=k.size()-1;j>=0;j--)
    {
        kbiao[a3]=k[j]-'0';
        a3++;
    } 
    int times=0,count=0;
    for(int i=1;i<a;i++)
    {
        times+=i;
    }
    for(int i=0;i<a;i++)
    {
       cin>>s1[i]; 
       geshu[i]=s1[i].size();
       if(i>0)
       {
            for(int j=0;j<i;j++)//arr[i]-arr[j]
            {
                if(geshu[j]>geshu[i]||(geshu[j]==geshu[i]&&s1[i]<s1[j]))
                {
                    swap(s1[i],s1[j]);
                }
            }
            for(int j=0;j<geshu[i];j++)
            {
                arr[i][geshu[i]-1-j]=s1[i][j]-'0';
            } 
            for(int j=0;j<i;j++)//arr[i]-arr[j]
            {
                count+=math_sub(arr[i],arr[j],max(geshu[i],geshu[j]));     memset(result,0,sizeof(max(geshu[i],geshu[j])));
            }
       }
    }
    cout<<count;
    system("pause");
    return 0;
}
2023/11/8 18:55
加载中...