[考试反思]0914csp-s模拟测试43:破绽
T1会正解。爆int了,代码里一大堆long long但是有一个地方落了。-70分。
离考试结束还有19秒的时候发现手模样例爆负数了,没来得及改。
T2没想。打暴力了。然而实际很好想。。。早读5分钟就想出来了。可是考场上没好好想。。。
T3打的是正解,不知道哪错了,爆零。
关键经验:考场上如果不会MLE的话,#define int long long很稳!!!
要根据部分分一步一步想思路,不要嫌弃部分分少,因为它可能就是正解的钥匙。
单单这一场考试,总排名直接滚蛋到第9左右。
如果目标还高于省一的话,没有再失手任何一次的机会了。
细致。坚持。稳重。
T1:A
不难。记得开long long就行。
加和乘,那么最后一定可以表示为$ T=S×x+a*y $的形式,其中x是b的整次幂。
接下来把y表示为b进制,把每一位求和即为最优决策。
#include<cstdio>
long long min(long long a,long long b){return a<b?a:b;}
long long S,T,a,m,ans=1e18,mt;
int main(){
scanf("%lld%lld%lld%lld",&S,&T,&a,&m);
if((T-S)%a==)ans=(T-S)/a;
while(S<T/m){
mt++;S*=m;
if((T-S)%a)continue;
long long et=mt,tms=(T-S)/a;
for(int i=;i<=mt;++i)et+=tms%m,tms/=m;
ans=min(ans,et+tms);
}
printf("%lld\n",ans);
}
思路积累:
- long long
- 出题人数据极其毒瘤
T2:B
好题。
和正解不一样,代码量与代码性能很好,但是代价是思维量很大。
我们可以把p质因数分解,得到$p=p_1^{t_1} \times p_2^{t_2} \times ... \times p_u^{t_u}$
然后我们对于u个相同但是p为$p_i^{t_i}$的子问题求解。
思想类似与CRT,根据乘法计数原理,答案相乘即为最后答案。
我们对于两个子问题,其中的每个方案都对应着一个序列,序列每个数都不超过$p_i^{t_i}$。
那么每次合并两个序列时,我们能唯一确定最后对于p的序列,类似与CRT思想,是一一对应的。
现在考虑子问题。
我们有性质,当gcd(a,p)==gcd(b,p)时,得到a和b的方案数相等。
那么,因为我们现在在考虑对于$p_i^{t_i}$的子问题,所以gcd一定是$p_i$的整次幂,或者0。
设dp[i][j][k]表示对于第i种质因子,已经选了j个数,目前是gcd是k-1次(如果k=0表示已经乘成了0)
考虑转移,0的情况特判,不然在模$p_i^{t_i}$的意义下次数是单调不减的。
0次可以转移到$0~{t_i}$次,1次可以转移到$1~{t_i}$次...
考虑转移的系数是多少。以${p_i==2,k==2}$为例。
0次可以转移到0次及以上的所有数,转移1份。
1次可以转移到1次及以上,转移目标少了一半,故转移的份数加倍.
而1次的数的数量恰好是0次的数的数量的1/2,但是转移的份数又是2倍,那么总系数还是没有变化。
同理可以推广到高次,转移系数全都相同。
现在在于如何求出系数,暴力搞一下其中任意一种情况就行,可以用欧拉函数,也可以简单容斥。
至于乘完后取模得0的情况,特殊处理即可。因为如果是0了以后一定都是0,所以不会转移出去。
只要暴力处理最后一层,用全部选法减去非0选法即可。
总复杂度$O((n+m)\times \sum\limits_{i=1}^{u}t_i)$略低于O((n+m)log p)
#include<cstdio>
#define mod 1000000007
#define int long long
int pow(int b,int t,int a=){for(;t;t>>=,b=b*b%mod)if(t&)a=a*b%mod;return a;}
int p,n,m,ps[],tms[],dp[][][],sum[][][],cp,cs[];
main(){
scanf("%lld%lld%lld",&n,&m,&p);
for(int i=;i*i<=p;++i)if(p%i==){
ps[++cp]=i;cs[cp]=;
while(p%i==)p/=i,tms[cp]++,cs[cp]*=i;
cs[cp]=cs[cp]/i*(i-);
}
if(p!=)ps[++cp]=p,cs[cp]=p-,tms[cp]=;
for(int i=;i<=cp;++i){
for(int j=;j<=tms[i];++j)dp[i][][j]=,sum[i][][j]=j;
for(int j=;j<=n;++j)for(int k=;k<=tms[i];++k)
(dp[i][j][k]+=sum[i][j-][k]*cs[i])%=mod,
sum[i][j][k]=(sum[i][j][k-]+dp[i][j][k])%mod;
dp[i][n][]=pow(cs[i]/(ps[i]-)*ps[i],n);
int al=,lim=cs[i]/(ps[i]-),x=lim*ps[i]-;
for(int k=tms[i];k;--k)(dp[i][n][]+=mod-dp[i][n][k]*(x/lim-al)%mod)%=mod,al=x/lim,lim/=ps[i];
}
for(int r=;r<=m;++r){
int q,ans=;scanf("%lld",&q);
for(int i=;i<=cp;++i){
int req=q%(cs[i]/(ps[i]-)*ps[i]),ccp=;
if(req==)goto re;
while(req%ps[i]==)ccp++,req/=ps[i];ccp++;
re: (ans*=dp[i][n][ccp])%=mod;
}
printf("%lld ",ans);
}
}
T3:C
三分函数+贪心。
三分特殊加热器的次数,费用是个单峰函数。
然后就是线段覆盖问题,依次考虑每盆植物的mxr表示能覆盖i的区间的最大右端点是mxr[i]
每盆植物还需要p次的话,那么就对[i,mxr[i]]区间都进行p次就好。
操作是区间减,单点查询,可以用差分。
#include<cstdio>
#include<algorithm>
using namespace std;
#define int long long
int n,m,t,mxr[],w[],cf[],ans=12345678901234567ll;
int check(int mid){
int fee=mid*t,tot=;
for(int i=;i<=n;++i)cf[i]=max(w[i]-mid,0ll)-max(w[i-]-mid,0ll);
for(int i=;i<=n;++i){
tot+=cf[i];
if(tot>&&mxr[i]<i)return 12345678901234567ll;
if(tot>)fee+=tot,cf[mxr[i]+]+=tot,cf[i+]-=tot;
}
ans=min(ans,fee);
return fee;
}
main(){//freopen("1.in","r",stdin);
scanf("%lld%lld%lld",&n,&m,&t);
for(int i=;i<=n;++i)scanf("%lld",&w[i]);
for(int i=,l,r;i<=m;++i)scanf("%lld%lld",&l,&r),mxr[l]=max(mxr[l],r);
int l=,r=;
for(int i=;i<=n;++i)mxr[i]=max(mxr[i-],mxr[i]);
while(l<r-)
if(check(l+r>>)<check((l+r>>)+))r=(l+r>>)+;
else l=l+r>>;
check(l);check(l+);check(l+);
printf("%lld\n",ans);
}
思路积累:
- 三分函数,根据含义或者打表发现单峰性质
- 线段树
- 贪心:线段覆盖问题,如何处理后效性
- 差分:区间加减单点查询的优化
[考试反思]0914csp-s模拟测试43:破绽的更多相关文章
- [考试反思]0718 NOIP模拟测试5
最后一个是我...rank#11 rank#1和rank#2被外校大佬包揽了. 啊...考的太烂说话底气不足... 我考场上在干些什么啊!!! 20分钟“切”掉T2,又27分钟“切”掉T1 切什么切, ...
- [CSP模拟测试43、44]题解
状态极差的两场.感觉现在自己的思维方式很是有问题. (但愿今天考试开始的一刻我不会看到H I J) A 考场上打了最短路+贪心,水了60. 然而正解其实比那30分贪心好想多了. 进行n次乘法后的结果一 ...
- csp-c模拟测试43「A·B·C」
B 题解 $f[i][(gcd(prime[j]*prime[k]\%P,P))]=\sum\limits_{k=1}^{k<=num} f[i-1][k]*phi(\frac{P}{prime ...
- [考试反思]0814NOIP模拟测试21
前两名是外校的240.220.kx和skyh拿到了190的[暴力打满]的好成绩. 我第5是170分,然而160分就是第19了. 在前一晚上刚刚爆炸完毕后,心态格外平稳. 想想前一天晚上的挣扎: 啊啊啊 ...
- [考试反思]0729NOIP模拟测试10
安度因:哇哦. 安度因:谢谢你. 第三个rank1不知为什么就来了.迷之二连?也不知道哪里来的rp 连续两次考试数学都占了比较大的比重,所以我非常幸运的得以发挥我的优势(也许是优势吧,反正数学里基本没 ...
- [考试反思]1109csp-s模拟测试106:撞词
(撞哈希了用了模拟测试28的词,所以这次就叫撞词吧) 蓝色的0... 蓝色的0... 都该联赛了还能CE呢... 考试结束前15分钟左右,期望得分300 然后对拍发现T2伪了写了一个能拿90分的垃圾随 ...
- [考试反思]0909csp-s模拟测试41:反典
说在前面:我是反面典型!!!不要学我!!! 说在前面:向rank1某脸学习,不管是什么题都在考试反思后面稍微写一下题解. 这次是真的真的运气好... 这次知识点上还可以,但是答题策略出了问题... 幸 ...
- [考试反思]0816NOIP模拟测试23
210 210 210 170 还可以.暴力打满就rk4了? 但不管怎么说,总算是在改完题之后理直气壮的写考试反思了. T1是个dp,说水也不太水.(当然某脸只要A掉了一道题就要说那是水题) 我的思路 ...
- [考试反思]0714/0716,NOIP模拟测试3/4
这几天时间比较紧啊(其实只是我效率有点低我在考虑要不要坐到后面去吹空调) 但是不管怎么说,考试反思还是要写的吧. 第三次考试反思没写总感觉缺了点什么,但是题都刷不完... 一进图论看他们刷题好快啊为什 ...
随机推荐
- 常用注解@Controller、@Service、@Autowired
@Controller.@Service在spring-context-5.1.10.RELEASE.jar包下,所在包如下 @Autowired在spring-beans-5.1.10.RELEAS ...
- docker升级后启动报错400 Client Error: Bad Request ("Unknown runtime specified docker-runc")
宝塔面板docker升级后启动容器时报错400 Client Error: Bad Request ("Unknown runtime specified docker-runc" ...
- Asp.Net Core中Session使用
web程序中,Session是一个无法避开的点. 最近新开项目,打算从开始搭建一个基础的架子,后台用户登录成功后,需要保存session. 新建的asp.net core的模板已经包含了Session ...
- Json模块(dumps、loads、dump、load)函数篇
# dumps.loads函数 """json.dumps()用于将dict类型的数据转成strjson.loads()用于将str类型的数据转成dict. " ...
- RAID 10 配置流程
1.在虚拟机中再添加5块硬盘: 2.fdisk -l 可以查看当前虚拟机中的磁盘情况. 3.使用mdadm命令创建RAID10,名称为”/dev/md0″. -C代表创建操作,-v显示创建过程,-a ...
- App上下左右滑动封装
#coding=utf-8 from appium import webdriver from time import sleep caps = { "platformName": ...
- RAW网络编程
LWIP提供了三种的可以被应用程序直接调用的接口API: (1) 低水平的,基于内核/回调函数的API(后面称 RAW API) 适用于数据量不大,没有os的MCU (2) ...
- Git基本使用指南
一.概述 1. Git与SVN比较 目前用到最广泛的版本控制软件就是SVN和Git,那么这两者之间有什么不同之处呢? 1) SVN(Subversion)是集中式管理的版本控制器,而Gi ...
- python编程系列---tcp客户端的简单实现
实现流程如下: """ TCP客户端实现流程1. 创建一个tcp 客户端对象2. 与服务端建立连接3. 通过tcp socket 收发数据4. 关闭连接 关闭tcp &q ...
- 《HelloGitHub》第 43 期
兴趣是最好的老师,HelloGitHub 就是帮你找到兴趣! 简介 分享 GitHub 上有趣.入门级的开源项目. 这是一个面向编程新手.热爱编程.对开源社区感兴趣 人群的月刊,月刊的内容包括:各种编 ...