啊...表示一大早还没睡醒就开始打比赛(开始前一分钟的我还在桌子上趴着休眠)...表示题目思路清奇(尤其C题)...但是我还是太蒻了...\(D\)题暴力都没打...题解正式开始之前先\(\%\)一下\(\color{#FF6161}{风浔凌}\)巨佬\(qwq\)...\(320\)真是太强了\(\%\%\%\)...
\(A\) 你好诶加币
题目描述:就是简单的\(a+b\)啊- \(a=0\ or\ b=0:\)此时\(a+b\)显然在\(long\ long\)范围内,直接输出\(a+b\)即可
- \(a>0\ and\ b>0:\)此时有可能会爆\(long\ long\),但是又不能直接求和判断
(所以就说不可解啊(逃)),此时可以间接判断,\(\because a,b\in[1,INF]\) \(\therefore INF-b\in[0,INF-1]\) \(\because a+b>INF\Leftrightarrow a>INF-b\) \(\therefore\)在\(long\ long\)范围内可以判断\(a+b\)是否爆\(long\ long\),若不爆\(long\ long\)则输出\(a+b\),否则输出\("hello, \%lld\backslash n"\) - \(a<0\ and\ b<0:\)同理,间接判断\(a+b\)是否爆\(long\ long\),若不爆\(long\ long\)则输出\(a+b\),否则输出\("hello, \%lld\backslash n"\)
- \((a>0\ and\ b<0)or(a<0\ and\ b>0):\)此时不会爆\(long\ long\),直接输出\(a+b\)即可
\(AC\)代码:
#include//N165A#include #include #include #include #include #include using namespace std;const long long INFZ=9223372036854775807LL,INFF=-9223372036854775808LL;long long a,b;int main(){ scanf("%lld%lld",&a,&b); if(a==0||b==0){ printf("%lld\n",a+b); return 0; } if(a>0&&b>0){ if(INFZ-a b){ printf("\"hello, %%lld\\n\"\n"); return 0; } printf("%lld\n",a+b); return 0; } printf("%lld\n",a+b); return 0;}
\(B\) 最后一次
题目描述:求不超过\(n(n\in[2,10^{12}])\)的最大质数 题目本质:就是求不超过\(n\)的最大质数啊\(AC\)代码:
#include//N165B#include #include #include #include #include #include using namespace std;const int N=1e6;bool notpr[N+6];int pr[80000],cntpr;long long n;void pre(){ notpr[0]=notpr[1]=true; for(int i=2;i<=N;i++){ if(!notpr[i]){ pr[++cntpr]=i; } for(int j=1;j<=cntpr&&i*pr[j]<=N;j++){ notpr[i*pr[j]]=true; if(i%pr[j]==0){ break; } } }}bool isprime(long long x){ if(x<2){ return false; } if(x==2||x==3){ return true; } int lmt=(int)sqrt(x); for(int i=1;i<=cntpr&&pr[i]<=lmt;i++){ if(x%pr[i]==0){ return false; } } return true;}int main(){ pre(); scanf("%lld",&n); if(n==2){ printf("2\n"); return 0; } if(n==3){ printf("3\n"); return 0; } if(isprime(n)){ printf("%lld\n",n); return 0; } for(;n>2;--n){ if(isprime(n)){ printf("%lld\n",n); return 0; } } return 0;}
\(C\) 选择颜色
题目描述:求一个长度为\(n(n\in[3,10^9])\)的有序环用\(c(c\in[3,100])\)种颜色染色,相邻颜色不相同的染色方式有多少种 题目本质:小学组合数学题\(AC\)代码:
#include//N165C#include #include #include #include #include #include using namespace std;const int MOD=10007;const int C=100;int n,c;int ans;int base[C][C],f[C],repcc[C][C],repc1[C];void pre(){ f[0]=0; for(int i=1;i >=1; }}long long llqpow(int base,int u){ long long rep=1; while(u){ if(u&1){ rep*=base; rep%=MOD; } base*=base; base%=MOD; u>>=1; } return rep;}int main(){ scanf("%d%d",&n,&c); pre(); ans=llqpow(c-1,n-1); qpow(n-2); ans-=f[0]; ans%=MOD; ans+=MOD; ans%=MOD; ans*=c; ans%=MOD; printf("%d\n",ans); return 0;}
\(D\) 合法括号序列\(\color{#55ACEE}{表示这题还没过...暂且咕着qwq}\)
题目描述: 题目本质: 思路: 详解:\(AC\)代码: