點分治...有很多細節的點分治題
我用了尤拉函式+費馬小定理求的非質數乘法逆元
然後發現題目保證和10互質....不需要這麼麻煩,其實直接套擴歐求逆元就行了
這題依然是滿足可減性的資訊,所以每一步容斥一次就行
#include#define endl '\n'#define ll long long
#define ull unsigned long long
#define fi first
#define se second
#define mp make_pair
#define pii pair#define all(x) x.begin(),x.end()
#define io ios::sync_with_stdio(false)
#define show(x) cout<<#x<<"="<=a;--ii)
#define forn(i,x) for(int i=head[x];i;i=e[i].next)
using namespace std;
const int maxn=1e5+10,maxm=2e5+10;
const int inf=0x3f3f3f3f;
const int mod=1e9+7;
const double pi=acos(-1.0);
int casn,n,k;
ll val[maxn],pw[maxn],phi,inv[maxn],m;
ll pow_mod(ll a,ll b,ll c=m,ll ans=1)
return ans;
}ll euler(ll n)
}if(a>1) res=res/a*(a-1);
return res;
}void init()
}class graphe[maxm];
int head[maxn],nume,n,sz[maxn],maxt,stree[maxn];
void add(int a,int b,ll c=0);head[a]=nume;}
int vis[maxn],num[maxn],all,mid;
void getmid(int now=1,int pre=0)
int tmp=max(sz[now]-1,all-sz[now]);
if(maxt>tmp) maxt=tmp,mid=now;
}//base
ll ans,in[maxn],out[maxn];
mapcnt;
void init(int n)
ll getout(int now,int pre,int d)
sum+=cnt[out[now]];
ll tmp=(m-in[now])%m*inv[d]%m;
if(out[now]==tmp) sum--;
return sum;
} void getin(int now,int pre,int d)
} ll getans(int now,int d=0)
void divide(int now)
} void solve()
}g;int main()
g.solve();
cout
}
Codeforces 976E 題解報告
1 當把所有的倍數2 a都加到同一health上,health增加的最多 2 先計算每乙個creature的hp dmg,按該值對所有的creature排序 再求和,i include using namespace std const int n 200 1000 9 int hp n dmg n...
codeforces 1030E 暴力 思維)
題目 題意 給定一些數,可將區間 l r 中某些數的二進位制位的1的位置更換,使得最終區間所有數異或和為0,求這樣的區間個數。思路 在那裡瞎dp了好久,wa的很徹底,借鑑了一下別人的思路。區間合法的條件是 這個區間1的個數為偶數,並且區間中二進位制位1最多的乙個數的二進位制個數小於等於和的一半。我們...
Codeforces 1270E 構造 數學
有 n 個二維平面上的點,每兩個點之間連一條線段,將這些點劃分為兩個非空的集合 a b 同乙個集合內的兩點之間線段用黃色標註,不同集合的兩點之間線段用藍色標註,使距離相同的線段顏色相同。先將所有點的座標以其中乙個點作為原點轉化一下,使其中必定有乙個點是 0,0 然後將所有點按奇偶分為四組 0代表偶數...