4/14 二分答案+数学
Posted 钟钟终
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了4/14 二分答案+数学相关的知识,希望对你有一定的参考价值。
P3853 [TJOI2007]路标设置
二分答案。放路标时两个路标间为了满足给定的空旷系数要放多个路标,当能整除时得减去一个,因为系数正好为x。
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=2e5+5;
const int inf=0x3f3f3f3f;
int len,n,k,l,r,a[N],ans;
bool check(int x)
int num=0;
for(int i=2;i<=n;i++)
if(a[i]-a[i-1]>x)
num+=(a[i]-a[i-1])/x;
if((a[i]-a[i-1])%x==0)
num--;
if(num>k)
return 0;
return 1;
signed main()
cin>>len>>n>>k;
for(int i=1;i<=n;i++)
cin>>a[i];
sort(a+1,a+n+1);
l=0,r=len;
while(l<=r)
int mid=(l+r)/2;
if(check(mid))
ans=mid,r=mid-1;
else
l=mid+1;
cout<<ans<<endl;
return 0;
P5431 【模板】乘法逆元 2
并不好用线性求逆元,范围太大了。
而且开卡在了550ms以内,总会报re。用上快读和计算k的幂使用优化。
#include<bits/stdc++.h>
#define int long long
using namespace std;
char ch;
inline void read(int &x)
x=0;
for(ch=getchar();ch<'0'||ch>'9';ch=getchar());
for(;ch>='0'&&ch<='9';ch=getchar())
x=(x<<3)+(x<<1)+(ch&15);
const int N=5e6+5;
const int mod=1e9+7;
const int inf=0x3f3f3f3f;
int n,p,k,inv[N],a[N],c[N],kk[N];
int fastpow(int x,int y)
int res=1;
while(y)
if(y&1)
res*=x,res%=p;
x*=x,x%=p;
y>>=1;
return res%p;
int get_inv(int x)
return fastpow(x,p-2);
signed main()
read(n),read(p),read(k);
//inv[1]=1;
//for(int i=2;i<=N;i++)
// inv[i]=(p-p/i)*inv[p%i]%p;
c[0]=1;
int ans=0;
for(int i=1;i<=n;i++)
read(a[i]);
c[i]=c[i-1]*a[i]%p;
inv[n]=get_inv(c[n]);
for(int i=n-1;i>=1;i--)
inv[i]=inv[i+1]*a[i+1]%p;
int inv_k=get_inv(k),kk=fastpow(k,n);
for(int i=n;i>=1;i--)
ans=(ans+inv[i]*c[i-1]%p*kk%p)%p;
kk=kk*inv_k%p;
cout<<ans<<endl;
return 0;
以上是关于4/14 二分答案+数学的主要内容,如果未能解决你的问题,请参考以下文章