关于0x7f……7f
查看原帖
关于0x7f……7f
935012
Max6700楼主2023/7/5 20:45

原代码:

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

int n;

unsigned long long sum=1;
unsigned long long t[10000];
unsigned long long ans;

struct aa
{
    int a;
    int b;
    
    void in()
    {
        cin>>a>>b;
        sum*=a;
    }
}x[10000];


int main(){
    std::ios::sync_with_stdio(0);
    cin>>n;
    
    for(int i=1;i<=n;i++)
        x[i].in();
    
    for(int i=1;i<=n;i++)
        t[i]=sum/x[i].a;
        
    for(int i=1;i<=n;i++)
        for(unsigned long long j=t[i];j<=1e30;j+=t[i])
            if(j%x[i].a==1)
            {
                ans+=j*x[i].b%sum;
                break;
            }
    cout<<ans%sum;
    
    return 0;
}

看似完美简洁明了(?

可惜最后一个的T了QAQ

然后重新借鉴对比某题解后……

其实这个做法就是看完那个题解后自己打的

现代码:

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

int n;

unsigned long long sum=1;
unsigned long long t[10000];
unsigned long long ans;

struct aa
{
    int a;
    int b;
    
    void in()
    {
        cin>>a>>b;
        sum*=a;
    }
}x[10000];


int main(){
    std::ios::sync_with_stdio(0);
    cin>>n;
    
    for(int i=1;i<=n;i++)
        x[i].in();
    
    for(int i=1;i<=n;i++)
        t[i]=sum/x[i].a;
        
    for(int i=1;i<=n;i++)
        for(unsigned long long j=t[i];j<=0x7f7f7f7f7f7f;j+=t[i])//注意这不同
            if(j%x[i].a==1)
            {
                ans+=j*x[i].b%sum;
                break;
            }
    cout<<ans%sum;
    
    return 0;
}

Q:为啥把1e30改成那什么0x7f7f的就过了?

2023/7/5 20:45
加载中...