CF Parity Alternated Deletions(排序+奇偶性)
作者:互联网
考虑差分,定义:ll getXorSum(ll x)函数,求[1,x]上元素取模运算的和。最后答案即为:getXorSum(b)-getXorSum(a)
设计getXorSum函数,易看出以下性质:
1.对于属于区间[l,r)的元素i,i进行取模运算的值必为0;
2.对于[l,r)左边的元素i,取模运算的值为i;
3.对于[l,r)右边的元素i,通过imod(r-1),将其映射到[1,r-1]区间上(若imod(r-1)≡0 视作将i映射到r-1位置),那么取模运算的值可以划归为①、②中的一种
分类讨论:
①: x<l, ans=$\sum_{i=1}^{x}i$
②: x>=l&&x<r, ans=$\sum_{i=1}^{l-1}i$
③: x>=r, ans=$(\frac{x}{r-1})\times\sum_{i=1}^{l-1}i +\sum_{i=1}^{min(xmod(r-1),l-1)}i$
另外记得开ll,不开ll见祖宗。
#include <bits/stdc++.h> using namespace std; typedef long long ll; ll a, b, l, r; ll getSum(ll x) {return x*(x+1)>>1;} ll getXorSum(ll x) { if(x<l) return getSum(x); else if(x<r) return getSum(l-1); return getSum(l-1)*(x/(r-1))+getSum(min(x%(r-1),l-1)); //一步写也是可以的 //return getSum(l-1)*(x/(r-1))+getSum(min(x%(r-1),l-1)); } int main() { while(cin>>a>>b>>l>>r){ cout<<getXorSum(b)-getXorSum(a)<<endl; } return 0; } /*
标签:Deletions,Parity,运算,取模,ll,元素,奇偶性,long,getXorSum 来源: https://www.cnblogs.com/ChenyangXu/p/10710445.html