[问答题]
“天资、学问、处事、做人”的理解
D题的前置知识是整形的数据范围以及对应二进制中的位移操作对应的结果,向右过多位移也会“溢出”而不是直接成为了0,向左位移可以理解为*2,既然是✖️2那就得放进模运算中随时保持取模,取模可以顺便学习一下乘法逆元(费马小定理)
void solve() {
    ll n,k;cin>>n>>k;
    ll cnt=0; bool find=false;
    rep(i,1,n) {    ll x;cin>>x;
      if (!find) {  if (i&1) {
                    cnt+=x;
            }else {
                cnt-=x; if (cnt<0) {
                    cnt=abs(cnt); if (cnt>60) {
                        find=true;
                    }
                    k>>=cnt;cnt=0; if (k==0) {
                        find=true;
                    }
                }
            }
        }
    } if (find)cout<<0<<endl; else {
        k%=mod;
        (k*=_pow(2,cnt,mod,1))%=mod;
        cout<<k<<endl;
    }
}

发表于 今天 17:33:27 回复(1)