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:破绽的更多相关文章

  1. [考试反思]0718 NOIP模拟测试5

    最后一个是我...rank#11 rank#1和rank#2被外校大佬包揽了. 啊...考的太烂说话底气不足... 我考场上在干些什么啊!!! 20分钟“切”掉T2,又27分钟“切”掉T1 切什么切, ...

  2. [CSP模拟测试43、44]题解

    状态极差的两场.感觉现在自己的思维方式很是有问题. (但愿今天考试开始的一刻我不会看到H I J) A 考场上打了最短路+贪心,水了60. 然而正解其实比那30分贪心好想多了. 进行n次乘法后的结果一 ...

  3. 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 ...

  4. [考试反思]0814NOIP模拟测试21

    前两名是外校的240.220.kx和skyh拿到了190的[暴力打满]的好成绩. 我第5是170分,然而160分就是第19了. 在前一晚上刚刚爆炸完毕后,心态格外平稳. 想想前一天晚上的挣扎: 啊啊啊 ...

  5. [考试反思]0729NOIP模拟测试10

    安度因:哇哦. 安度因:谢谢你. 第三个rank1不知为什么就来了.迷之二连?也不知道哪里来的rp 连续两次考试数学都占了比较大的比重,所以我非常幸运的得以发挥我的优势(也许是优势吧,反正数学里基本没 ...

  6. [考试反思]1109csp-s模拟测试106:撞词

    (撞哈希了用了模拟测试28的词,所以这次就叫撞词吧) 蓝色的0... 蓝色的0... 都该联赛了还能CE呢... 考试结束前15分钟左右,期望得分300 然后对拍发现T2伪了写了一个能拿90分的垃圾随 ...

  7. [考试反思]0909csp-s模拟测试41:反典

    说在前面:我是反面典型!!!不要学我!!! 说在前面:向rank1某脸学习,不管是什么题都在考试反思后面稍微写一下题解. 这次是真的真的运气好... 这次知识点上还可以,但是答题策略出了问题... 幸 ...

  8. [考试反思]0816NOIP模拟测试23

    210 210 210 170 还可以.暴力打满就rk4了? 但不管怎么说,总算是在改完题之后理直气壮的写考试反思了. T1是个dp,说水也不太水.(当然某脸只要A掉了一道题就要说那是水题) 我的思路 ...

  9. [考试反思]0714/0716,NOIP模拟测试3/4

    这几天时间比较紧啊(其实只是我效率有点低我在考虑要不要坐到后面去吹空调) 但是不管怎么说,考试反思还是要写的吧. 第三次考试反思没写总感觉缺了点什么,但是题都刷不完... 一进图论看他们刷题好快啊为什 ...

随机推荐

  1. Java 学习笔记之 线程Yield

    线程Yield: yield()方法的作用是放弃当前的CPU资源,将它让给其他的任务去占用CPU执行时间,但放弃的时间不确定,有可能刚刚放弃,马上又获得CPU时间片. public class Yie ...

  2. java中不创建使用第三方变量,交换两个数的值

    1.直接使用算术运算法交换 先把两个数的和赋值给其中一个,然后做减法.例如num1=num1+num2; 此时num2(交换之后)就等于num1减去num2:废话不多说,直接上代码 public cl ...

  3. 手把手教你安装Eclipse最新版本的详细教程 - 大佬的鸡肋,菜鸟的盛宴(非常详细,非常实用)

    简介 首先声明此篇文章主要是针对测试菜鸟或者刚刚入门的小伙们或者童鞋们,大佬就没有必要往下看了. 写这篇文章的由来是因为后边要用这个工具,但是由于某些原因有部分小伙伴和童鞋们可能不会安装此工具,为了方 ...

  4. spring5 源码深度解析----- 事务增强器(100%理解事务)

    上一篇文章我们讲解了事务的Advisor是如何注册进Spring容器的,也讲解了Spring是如何将有配置事务的类配置上事务的,实际上也就是用了AOP那一套,也讲解了Advisor,pointcut验 ...

  5. BZOJ 1345: [Baltic2007]序列问题Sequence

    1345: [Baltic2007]序列问题Sequence Time Limit: 5 Sec  Memory Limit: 162 MBSubmit: 1180  Solved: 633[Subm ...

  6. git基础命令详解

    一些必须要知道的概念 git的三个工作区域:工作目录.暂存区.git仓库. 工作目录:其实就是本地文件磁盘上的文件或目录: 暂存区:是一个文件,保存了下次提交的文件列表信息,一般在git仓库目录中: ...

  7. Python_散点图与折线图绘制

    在数据分析的过程中,经常需要将数据可视化,目前常使用的:散点图  折线图 需要import的外部包  一个是绘图 一个是字体导入 import matplotlib.pyplot as plt fro ...

  8. Linux系统基础

    Linux系统基础 目录   简介 0x01 Linux文件与目录管理 0x02 Linux系统用户以及用户组管理 0x03文档的压缩与打包 0x04 apt安装软件 0x05 进程管理 标签 Lin ...

  9. C#读取邮件附件的方法

    基于需求需要从邮件里读取附件,从网络搜索整理如下: 1 使用 Spire.Email 从官网下载安装并引用,地址:https://www.e-iceblue.com/Download/email-fo ...

  10. opencv实践::直线检测

    问题描述 寻找英语试卷填空题的下划线,这个对后期的切图与自动 识别都比较重要. 解决思路 方法: 通过图像形态学操作来寻找直线,霍夫获取位置信息与显示. #include <opencv2/op ...