#include<bits/stdc++.h>
#define int long long
using namespace std;
const int p=1e9+3;
int T,n,m,a,fac[100010]={1};
signed main()
{
for(int i=1;i<=100000;i++) fac[i]=fac[i-1]*i%p;
scanf("%lld",&T);
while(T--)
{
int res=1,ans=1;
scanf("%lld %lld",&n,&m);
for(int i=1;i<=n;i++) scanf("%lld",&a),res=res*fac[a]%p;
for(int i=1;i<=m;i++) scanf("%lld",&a),ans=ans*fac[a]%p;
if(res==ans) puts("equal");
else puts("unequal");
}
return 0;
}
注意到 #define int long long 而 main 函数必须返回一个 int 值,所以不能使用 int main()。
那怎么办呢?通常使用 signed main,因为 signed 等效替代于 signed int,也就是有符号整型,这与 int 别无二致,并且不会导致奇怪的 CE。
int本来就是signed int。int = signed int = signed,就像unsigned = unsigned int
当你不确定过程中会不会爆 int 的时候,可以这么写。
同样的字节数,如果保存符号位,范围为正负,数字位相对少一,绝对值范围小
总结:
头文件声明#define int long long,防止爆int
举例
#include <iostream>
#include <cstring>
#include <algorithm>
#define int long long
using namespace std;
const int N = 1e5+10;
int c[N];
signed main()
{
int n;
cin>>n;
for (int i = 1; i <= n; i ++ ) cin>>c[i];
int m,p,s,ss;
cin>>m>>p>>s>>ss;
c[p]+=s;
int ans=1;
int d,t;//d代表dragon,t代表tiger;
d=t=0;
for(int i=1;i<m;i++) d+=c[i]*(m-i);
for(int i=m+1;i<=n;i++) t+=c[i]*(i-m);
int shiqi=abs(d-t);
int tmp=shiqi;
for(int i=1;i<=n;i++){
int shiqix=abs(m-i)*ss;
if(i<m){
if(abs(d+shiqix-t)<tmp){
ans=i;
tmp=abs(d+shiqix-t);
}
}
if(i>m){
if(abs(d-t-shiqix)<tmp){
ans=i;
tmp=abs(d-t-shiqix);
}
}
}
if(tmp==shiqi) ans=m;
cout<<ans;
re
turn 0;
}