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;
}

View Code

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);
}    

View Code

转载于:https://www.cnblogs.com/znsbc-13/p/11524078.html

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. NOIP模拟测试21「折纸·不等式」

    折纸 题解 考试时无限接近正解,然而最终也只是接近而已了 考虑模拟会爆炸,拿手折纸条试一试,很简单 考你动手能力 代码 #include<bits/stdc++.h> using name ...

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

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

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

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

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

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

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

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

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

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

最新文章

  1. OS_CORE.C(5)
  2. les物流执行系统_物流LES系统上线啦
  3. Php的定界符有哪些了,php中定界符
  4. 30个免费资源:涵盖机器学习、深度学习、NLP及自动驾驶
  5. 一文看懂Microsoft Azure的十年变迁
  6. 【读书笔记】iOS-简单的数据驱动程序
  7. Java8 Stream新特性详解及实战
  8. 【毕业设计】stm32智能车牌识别系统 - 单片机 嵌入式
  9. validate.js 插件表单校验
  10. PAT_乙级_1012_筱筱
  11. 《别看了,你学不会的》——Redis原理与实战(一)
  12. 业绩归因 绩效评估 - 各种收益率计算方法
  13. 大学生必备:用Python实现shua课自由,又是美好的一天
  14. 电力电子技术简答题及其答案
  15. 牛客小白月赛25 C 白魔法师 并查集
  16. 爬虫实战——爬取小说《从你的全世界路过》
  17. [旭日X3派] 初识篇 - 01
  18. 同步传输与异步传输【转载】
  19. R语言与数据分析(3)-R软件安装
  20. win如何恢复误删文件

热门文章

  1. shell开启飞行模式_今天才知道,原来手机的飞行模式用处那么多,看完涨知识了...
  2. redis 发布订阅实际案例_【赵强老师】Redis的消息发布与订阅
  3. C++中绘图工具EasyX基本操作
  4. java 子类tostring,JAVA中Object类的toString()方法,objecttostring
  5. 万维网发布服务 w3svc 已停止 除非万维_万维网和互联网的区别
  6. java iterator获取索引_2020年Java面试题最新整理(1625)
  7. 工程师总结:单片机C语言编程心得
  8. c程序怎么改为java程序_如何将Java程序的入口点更改为C签名?
  9. mysql索引命名规范_mysql使用规范-索引规范
  10. ns-3文件编译出错总结