牛客周赛 Round 49
牛客周赛 Round 49
\(A\) 牛客 NC275421 嘤嘤不想做计几喵 \(AC\)
-
顺序结构。
点击查看代码
int main() { ll a,b; cin>>a>>b; cout<<a-b-b*10<<endl; return 0; }
\(B\) 牛客 NC275501 嘤嘤不想打怪兽喵 \(AC\)
-
递归求解。
点击查看代码
ll ask(ll x) { return (x==1)?1:2*ask(x/2)+1; } int main() { ll h,i; cin>>h; cout<<ask(h)<<endl; return 0; }
\(C\) 牛客 NC275503 嘤嘤不想买东西喵 \(AC\)
-
将 \(a_{i}\) 减 \(x\) 后等价于 luogu P1115 最大子段和 。
点击查看代码
ll a[100010]; int main() { ll n,x,sum=0,ans=0,i; cin>>n>>x; for(i=1;i<=n;i++) { cin>>a[i]; a[i]-=x; sum=max(a[i],sum+a[i]); ans=max(ans,sum); } cout<<ans<<endl; return 0; }
\(D\) 牛客 NC275631 嘤嘤不想求异或喵 \(AC\)
-
把式子拆成前缀异或的形式,有 \(\bigoplus\limits_{i=l}^{r}i=(\bigoplus\limits_{i=1}^{r}i)\bigoplus(\bigoplus\limits_{i=1}^{l-1}i)\) 。以下只讨论 \(\bigoplus\limits_{i=1}^{r}i\) 的解法。
-
由 \((2k) \bigoplus (2k+1)=1\) ,把 \(\bigoplus\limits_{i=1}^{r}i\) 拆成 \(1 \bigoplus (\bigoplus\limits_{i=2}^{r}i)=1 \bigoplus \begin{cases} \bigoplus\limits_{i=1}^{\frac{r-1}{2}}1 & (r-1) \bmod 2=0 \\ r \bigoplus (\bigoplus\limits_{i=1}^{\left\lfloor\frac{r-1}{2}\right\rfloor}1) & (r-1) \bmod 2=1 \end{cases}\) ,即 \(\bigoplus\limits_{i=1}^{r}i=\begin{cases} r & r \bmod 4=0 \\ 1 & r \bmod 4=1 \\ r+1 & r \bmod 4=2 \\ 0 & r \bmod 4=3 \end{cases}\) 。
-
特判边界。
点击查看代码
ll ask(ll x) { if(x%4==0) { return x; } if(x%4==1) { return 1; } if(x%4==2) { return x+1; } if(x%4==3) { return 0; } return 114514; } int main() { ll t,l,r,i,j; cin>>t; for(i=1;i<=t;i++) { cin>>l>>r; cout<<(ask(r)^ask(l-1))<<endl; } return 0; }
\(E\) 牛客 NC275518 嘤嘤不想解方程喵 \(AC\)
-
等价于求 \(a_{1}b_{2}x^{2}+(b_{1}b_{2}+a_{2})x+(b_{2}c_{1}+c_{2})=0\) 的解的数量。
-
大力分讨。
- 非方程
- 无解
- 无数组解
- 一元一次方程
- 一组解
- 二元一次方程
- 两组解
- 一组解
- 无解
- 非方程
-
懒得用高精。人生苦短,我用 Python 。
点击查看代码
t=int(input()) for i in range(t): a1,b1,c1,a2,b2,c2=[int(x) for x in input().split()] a=a1*b2 b=b1*b2+a2 c=b2*c1+c2 if a==0: if b==0: if c==0: print("INF") else: print(0) else: print(1) else: if b*b>4*a*c: print(2) if b*b==4*a*c: print(1) if b*b<4*a*c: print(0)
\(F\) 牛客 NC275523 嘤嘤不想找最小喵
-
对于 \(i \in [1,n-2k]\) ,有 \(i+2k \in [2k+1,n],i+k \in [k+1,n]\) ,三段一位位判断不如哈希起来后一起判断。
-
选个好点的模数和进制。
点击查看代码
const ull base=133311111; ull s[500010],a[500010],jc[500010]; void sx_hash(ull s[],ull a[],ull len) { for(ull i=0;i<=len;i++) { a[i]=(i==0)?0:a[i-1]*base+s[i]; } } ull ask_hash(ull a[],ull l,ull r) { return a[r]-a[l-1]*jc[r-l+1]; } int main() { ull n,i,k; cin>>n; for(i=0;i<=n;i++) { jc[i]=(i==0)?1:jc[i-1]*base; } for(i=1;i<=n;i++) { cin>>s[i]; } sx_hash(s,a,n); for(k=1;k<=n;k++) { if(ask_hash(a,1,n-2*k)+ask_hash(a,2*k+1,n)==2*ask_hash(a,k+1,n-k)) { cout<<k<<endl; break; } } return 0; }
总结
- 开
long long
。 - \(E\)
- 记得判断方程的存在性。
- 速通 Python 要提上日程了。
- \(F\)
- 进制要大于值域。
本文来自博客园,作者:hzoi_Shadow,原文链接:https://www.cnblogs.com/The-Shadow-Dragon/p/18277000,未经允许严禁转载。
版权声明:本作品采用 「署名-非商业性使用-相同方式共享 4.0 国际」许可协议(CC BY-NC-SA 4.0) 进行许可。