求助为什么long long改为int反而能通过
查看原帖
求助为什么long long改为int反而能通过
1262270
138smart楼主2025/1/26 18:44
#include <bits/stdc++.h>
using namespace std;
//枚举每个点,考虑其横向删除和纵向删除的情况来枚举剩余的点,
// 0 1 2 3表示上右下左
//复杂度为o(n方)
int get(vector<long long>x,vector<long long>vx,int n){
    //先考虑竖着切的时候,即考虑横坐标变化
    int ans=1;
    for(int i=1;i<=n;i++){
        unordered_map<long long,int>haxi;
        int cnt=1;//无论什么时候都会跟着i的飞机,其本身算一个
        
        for(int j=1;j<=n;j++){
            if(i==j)continue;
            int d=x[i]-x[j];
            //统一右为正,速度也是右为正
            int dv= vx[j]-vx[i];
            //负距正速,正距负速才能相交
            if(dv==0){//如果距离为0要么无解要么无穷多解
                if(d!=0)continue;//无解
                cnt++;//无穷多解
            }
            else{
                long long t=d/dv;//正确的计算,有一个为负才能追上
                if(t<0||d%dv!=0)continue;//如果不是正或者不是整数无解
                haxi[t]++;
            }
            
        }
        
        ans=max(ans,cnt);//先考虑一架都没有的情况先
        for(auto &it : haxi){
        ans=max(ans,it.second+cnt);
    	}
    }
    return ans;
}
int main(){
    int n;
    int ans=1;
    scanf("%d",&n);
    vector<long long>x(n+1);
    vector<long long>vx(n+1);
    vector<long long>y(n+1);
    vector<long long>vy(n+1);
    for(int i=1;i<=n;i++){
        long long x0,y0,v;
        char c;
        scanf("%d %d %d %c",&x0,&y0,&v,&c);
        x[i]=x0;y[i]=y0;
        if(c=='U'){
            vx[i]=0;
            vy[i]=v;
        }
        else if(c=='D'){
            vx[i]=0;
            vy[i]=-v;
        }
        else if(c=='R'){
            vx[i]=v;
            vy[i]=0;
        }
        else if(c=='L'){
            vx[i]=-v;
            vy[i]=0;
        }
        //else cout<<"cnm"<<endl;
    }
    //solve
    ans=max(ans,get(x,vx,n));
    ans=max(ans,get(y,vy,n));
    printf("%lld",ans);
    return 0;
}

改了一整天,发现将d,dv的数据类型由long long 改成int就通过了。但我还是不明白,为什么int可以long long却不行。

2025/1/26 18:44
加载中...