原代码:
#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的就过了?