B

题解

$f[i][(gcd(prime[j]*prime[k]\%P,P))]=\sum\limits_{k=1}^{k<=num} f[i-1][k]*phi(\frac{P}{prime[j]})$

关于$phi(\frac{P}{prime[j]})$理解

$phi(\frac{P}{prime[j]})$是求$prime[j]$代表的数的个数

$P=k_0*prime[j]$

$x_1=k_1*prime[j]$

$x_2=k_2*prime[j]$

.......

要求代表$prime[j]$数个数就是求$k_1$,$k_2$个数$(k_0,k_1,k_2等互质)$(不互质$gcd就是别的数了$)

移项显然与$k_0$互质数个数就是$phi(\frac{P}{prime[j]})$

代码

#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define A 55
const ll mod=1e9+7;
ll f[A][23333],phi[A*A],prm[A*A],to[A*A][A*A];
ll n,m,P;
ll meng(ll x,ll k){
ll ans=1;
for(;k;k>>=1,x=x*x%mod)
if(k&1)
ans=ans*x%mod;
return ans;
}
ll gcd(ll x,ll y){
if(y==0) return x;
return gcd(y,x%y);
}
ll p(ll x){
ll ans=x;
for(ll i=2;i*i<=x;i++){
if(x%i==0){
ans=ans/i*(i-1);
while(x%i==0) x/=i;
}
}
if(x>1) ans=ans/x*(x-1);
return ans;
}
void fen(ll x){
for(ll i=1;i*i<=x;i++){
if(x%i==0){
prm[++prm[0]]=i;
if(i*i!=x) prm[++prm[0]]=x/i;
}
}
sort(prm+1,prm+prm[0]+1);
}
void pre_work(){
fen(P);
for(ll i=1;i<=prm[0];i++)
phi[i]=p(P/prm[i]);
for(ll j=1;j<=prm[0];j++){
for(ll pre=1;pre<=prm[0];pre++){
ll g=gcd(prm[j]*prm[pre]%P,P);
to[j][pre]=lower_bound(prm+1,prm+prm[0]+1,g)-prm;
}
}
}
void work(){
for(ll i=2;i<=n;i++)
for(ll j=1;j<=prm[0];j++)
for(ll pre=1;pre<=prm[0];pre++)
(f[i][to[j][pre]]+=f[i-1][pre]*phi[j]%mod)%=mod;
}
void sub_task(){
pre_work();
for(ll j=1;j<=prm[0];j++)
f[1][j]=phi[j];
work();
for(ll i=1,a;i<=m;i++){
scanf("%lld",&a);
a=lower_bound(prm+1,prm+prm[0]+1,gcd(a,P))-prm;
printf("%lld ",f[n][a]*meng(phi[a],mod-2)%mod)%mod;
}
printf("\n");
}
int main(){
scanf("%lld%lld%lld",&n,&m,&P);
sub_task();
return 0;
}

C

题解

三分,对于怎么看出来三分,这可能是个套路,你觉得这个题你用贪心做不了(但非常像贪心),二分答案会被hack,然后你$dp$也难以做,你三分就可以了

三分$check$贪心做,很水,瞎jb差分一下,我会说贪心我考试时就写对了吗?

注意细节,细节很多,不要死于细节

代码

/*
n*log^2
*/
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define A 222222
struct node{
ll l,r;
friend bool operator < (const node & a,const node &b){
return a.l==b.l?a.r>b.r:a.l<b.l;
}
}wat[A];
ll n,m,t,ans=0x7fffffffffffff,maxx=0,cnt=0;
ll p[A],lef[A],now[A],c[A];
ll check(ll x){
ll sum=0;
for(ll i=1;i<=n;i++){
now[i]=max(p[i]-x,0ll);
c[i]=0;
}
for(ll i=1;i<=n;i++){
ll nowid=lef[i];
c[i]+=c[i-1];
if(lef[i]==0) continue ;
ll cha=c[i];
// printf("i=%lld c[i]=%lld c[i-1]=%lld\n",i,c[i],c[i-1]);
// printf("i=%lld now+cha=%lld\n",i,now[i]+cha);
if(now[i]+cha>0){
sum+=now[i]+cha;
c[i]-=(now[i]+cha);
c[wat[nowid].r+1]+=now[i]+cha;
now[i]=0;
}
}
for(ll i=1;i<=n;i++){
ll cha=c[i];
// printf("now=%lld x=%lld cha=%lld\n",now[i],x,cha);
if(now[i]+cha>0) return 0x7fffffffff;
}
return sum+x*t;
}
int main(){
// freopen("da.in","r",stdin);
// freopen("ans.bf","w",stdout);
scanf("%lld%lld%lld",&n,&m,&t);
for(ll i=1;i<=n;i++){
scanf("%lld",&p[i]);
maxx=max(maxx,p[i]);
}
for(ll i=1;i<=m;i++){
scanf("%lld%lld",&wat[i].l,&wat[i].r);
}
sort(wat+1,wat+m+1);
for(ll i=1;i<=m;i++){
if(!lef[wat[i].l])
lef[wat[i].l]=i;
}
for(ll i=1;i<=n;i++)
if(wat[lef[i-1]].r>=i){
if(wat[lef[i-1]].r>wat[lef[i]].r)
lef[i]=lef[i-1];
}
ll l=0,r=maxx;
while(l<r){
ll len=(r-l);
ll lmid=l+len/3,rmid=r-len/3; ll lnow=check(lmid),rnow=check(rmid);
// printf("l=%lld r=%lld\n",l,r);
if(lnow>=rnow) l=lmid+1;
else r=rmid-1;
ans=min(ans,lnow);
ans=min(ans,rnow);
}
// printf("%lld\n",check(5));
printf("%lld\n",ans);
}

csp-c模拟测试43「A·B·C」的更多相关文章

  1. NOIP模拟测试19「count·dinner·chess」

    反思: 我考得最炸的一次 怎么说呢?简单的两个题0分,稍难(我还不敢说难,肯定又有人喷我)42分 前10分钟看T1,不会,觉得不可做,完全不可做,把它跳了 最后10分钟看T1,发现一个有点用的性质,仍 ...

  2. csp-s模拟测试44「D·E·F」

    用心出题,用脚造数据 乱搞场 1 #include<bits/stdc++.h> 2 #define re register 3 #define int long long 4 #defi ...

  3. NOIP模拟测试30「return·one·magic」

    magic 题解 首先原式指数肯定会爆$long$ $long$ 首先根据欧拉定理我们可以将原式换成$N^{\sum\limits_{i=1}^{i<=N} [gcd(i,N)==1] C_{G ...

  4. csp-s模拟测试42「世界线·时间机器·密码」

    $t3$不会 世界线 题解 题目让求的就是每个点能到点的数量$-$出度 设每个点能到的点为$f[x]$ 则$f[x]=x \sum\limits_{y}^{y\in son[x]} U f[y]$ 用 ...

  5. NOIP模拟测试38「金·斯诺·赤」

    金 辗转相减见祖宗 高精 #include<bits/stdc++.h> using namespace std; #define A 2000 #define P 1 #define N ...

  6. NOIP模拟测试28「阴阳·虎·山洞」

    写这几个题解我觉得我就像在按照官方题解抄一样 阴阳 题解 将题目中给的阴阳看作黑色和白色 首先我们观察到最后生成图中某种颜色必须是竖着单调递增或竖着单调递减 类似这样 否则不满足这个条件 但合法染色方 ...

  7. NOIP模拟测试20「周·任·飞」

    liu_runda出的题再次$\%\%\%\%\%\%\%\%\%\%\%\%\%\%\%\%\%\%$ 任 题解 题目中为什么反复强调简单路径,没有环 没有环的图中点数-边数=联通块数 前缀和维护边 ...

  8. NOIP模拟测试23「mine·water·gcd」

    mine 题解 一道比较水的dp 考试因为初始化挂掉了只有$80$分 代码有注释 #include<bits/stdc++.h> using namespace std; //无脑dp # ...

  9. NOIP模拟测试16「Drink·blue·weed」

    话说这次考试 Drink 非常棒的一道卡常练习题,适合练习卡常 真的很棒 前置卡常知识 1.char要比int快 char是最快的 输出putchar,输入getchar 在这个题快了7000豪 2. ...

随机推荐

  1. 想要测试Dubbo接口?测试的关键点在哪里?

    Dubbo接口如何测试? 这个dubbo如何测试,dubbo接口测试什么玩意儿?   RPC的有一个类型,叫Dubbo接口. 那这个接口如何测试?测试的关键点在哪里? 这个面试问题,我觉得大家可能就有 ...

  2. LINQ之方法语法

    上节讲到使用linq的查询关键字进行查询,这节讲一下linq查询的另一种方式--linq方法. 使用linq方法语法,必须要会用lambda表达式,配合lambda表达式才能体会到linq的优雅便捷. ...

  3. 纯vue3实现的svg可视化web组态编辑器。主要用于物联网mqtt实时系统图

    vue就是边做这个项目边学的 代码可能有点乱 还望各位大神勿喷 如果代码对您有帮助 麻烦辛苦帮我点个star 预览地址 https://svg.yaolunmao.top 如何使用 # 克隆项目 gi ...

  4. IPC机制key值的各位组成

    key_t ftok(const char *_pathname, int _proj_id) key值的第31~24位为ftok()第二个参数的低8位: key值的第23~16位为ftok()第一个 ...

  5. 在微信框架模块中,基于Vue&Element前端的后台管理功能介绍

    微信开发包括公众号.企业微信.微信小程序等方面的开发内容,需要对腾信的微信API接口进行封装:包括事件.菜单.订阅用户.多媒体文件.图文消息.消息群发.微信支付和企业红包.摇一摇设备.语义理解.微信小 ...

  6. Linux netperf网络性能测试

    Linux netperf网络性能测试 (2013-10-14 16:07:48) 转载▼     网络性能测量的五项指标 1. 可用性(availability) 测试网络性能的第一步是确定网络是否 ...

  7. TrueCrypt与CryptSetup双系统全盘加密(图文)

    http://blog.topsec.com.cn/truecrypt%E4%B8%8Ecryptsetup%E5%8F%8C%E7%B3%BB%E7%BB%9F%E5%85%A8%E7%9B%98% ...

  8. Linux_yum工具基本概述

    一.什么是yum 1️⃣:yum是yellowdog update manager的简称,它能够实现rpm管理的所有操作,并能够自动解决各rpm包之间的依赖关系. 2️⃣:yum是rpm的前端工具,是 ...

  9. Sqli-labs-master通关解析(持续更新中。。。)

    大多情况下:SQL注入其实就是构造正确的mysql命令,让网页回显本不应该让我们看到的数据(如用户的账号和密码). 第一关-联合查询注入 查库 // 查看当前页面在的数据库 ?id=-1' union ...

  10. unity texture 占用内存大小对比

    打包多种类型的项目,空项目和10张放在Resources文件夹中的图为比较案例.以下是比较数据. IPHONE: 1.空项目----空间占用量42.3MB----IPA大小10MB 2.10张1200 ...