显而易见的暴力骗分。

T1想到了bitset但是发现MLE后弃了,部分分都没拿。

T2想到正解贪心打暴力过不了大样例弃了。

T3牛逼题暴力。

考场没什么大失误,还可以。

不要轻易放弃每一个思路,可能再优化一下就是正解。不要知足于暴力。

T1:世界线

经典问题:求DAG中每一个点能到达多少点。

很容易想到bitset,但是这题卡空间让人愣了一下。

其实很简单,分两次跑,第一次处理出每一个点能到前30000号点里的哪些点。

第二次同理处理后30000个点。这样内存就减半了。

时间复杂度不变。O(n2/32)

 #include<cstdio>
#include<bitset>
using namespace std;
bitset<>b[];long long ans;
int n,m,fir[],l[],to[],cnt,a,bs,in[],q[],qt,in2[];
void link(int a,int b){l[++cnt]=fir[a];fir[a]=cnt;to[cnt]=b;in[b]++;}
int main(){
scanf("%d%d",&n,&m);ans=-m;
for(int i=;i<=m;++i)scanf("%d%d",&a,&bs),link(bs,a);
for(int i=;i<=n&&i<=;++i)b[i][i]=;
for(int i=;i<=n;++i)in2[i]=in[i];
for(int i=;i<=n;++i)if(!in[i])q[++qt]=i;
for(int qh=;qh<=qt;++qh)for(int j=fir[q[qh]];j;j=l[j]){
b[to[j]]|=b[q[qh]];
in[to[j]]--;
if(!in[to[j]])q[++qt]=to[j];
}
for(int i=;i<=n;++i)ans+=b[i].count(),b[i].reset();
for(int i=;i<=n;++i)b[i][i-]=;
qt=;
for(int i=;i<=n;++i)if(!in2[i])q[++qt]=i;
for(int qh=;qh<=qt;++qh)for(int j=fir[q[qh]];j;j=l[j]){
b[to[j]]|=b[q[qh]];
in2[to[j]]--;
if(!in2[to[j]])q[++qt]=to[j];
}
for(int i=;i<=n;++i)ans+=b[i].count();
printf("%lld\n",ans-n);
}

思路积累:

  • bitset求所有能互相到达的点对。
  • 分多次跑节约空间。
  • bitset常数很小。

T2:时间机器

直接贪心。

运用单调性,把供给与需求的左端点排序,然后对于每一个需求找最小的能覆盖它的右端点。

最优性/贪心正确性比较显然。

 #include<cstdio>
#include<algorithm>
#include<set>
using namespace std;
struct ps{
int opt,l,r,num,ord;
friend bool operator<(ps a,ps b){return a.r<b.r;}
}p[];
bool com(ps a,ps b){return a.l<b.l||(a.l==b.l&&a.opt>b.opt);}
multiset<ps>ss;
int n,m,t,lft[];
int main(){//freopen("machine2.in","r",stdin);
scanf("%d",&t);
while(t--){
scanf("%d%d",&n,&m);ss.clear();
for(int i=;i<=n;++i)scanf("%d%d%d",&p[i].l,&p[i].r,&p[i].num),p[i].ord=p[i].opt=;
for(int j=;j<=m;++j)scanf("%d%d%d",&p[n+j].l,&p[n+j].r,&p[n+j].num),
lft[j]=p[n+j].num,p[n+j].ord=j,p[n+j].opt=;
sort(p+,p++n+m,com);//for(int i=1;i<=n+m;++i)printf("%d %d\n",p[i].l,p[i].opt);
for(int i=;i<=n+m;++i)
if(p[i].opt)ss.insert(p[i]);//,puts("+");
else while(p[i].num){//puts("-");printf("%d\n",ss.size());printf("%d -> ",p[i].num);
if(ss.lower_bound((ps){,,p[i].r,,})==ss.end())goto fal;
ps gt=*ss.lower_bound((ps){,,p[i].r,,});
int Num=lft[gt.ord];
if(Num>p[i].num)lft[gt.ord]-=p[i].num,p[i].num=;
else p[i].num-=Num,ss.erase(ss.lower_bound((ps){,,p[i].r,,}));//printf("%d\n",p[i].num);
}
puts("Yes");continue;
fal:puts("No");
}
}

思路积累:

  • 二位限制的贪心可以先排序一维再做。(CDQ)
  • 把需求和供给等不同操作放在一起排序后处理。(CDQ,莫队思想)

T3:密码

神仙题。跟题解。

求$\sum\limits_{i=1}^{n} \sum\limits_{j=0}^{i} [C_i^j \ mod\  p^k==0] $

组合数可以表示为阶乘形式,设$f[i]$表示i的阶乘分解质因数后因子p的个数。

那么问题转化为$\sum\limits_{i=1}^{n} \sum\limits_{j=0}^{i} [f[i]-f[j]-f[i-j]>k]$

对于n的阶乘,其含有的因子p个数为$\sum n/p_i$

组合数$C_n^m$也就可以转化为$\sum (n/p^i + m/p^i + (n-m)/p^i) $

$\sum$后面的项的值只可能是0或1,那么考虑其含义:p进制下两数相加不超过n而加法过程当中的进位次数

问题就是p进制下两数相加不超过n而加法过程当中的进位次数大于等于k的方案数

p进制数位dp。dp[i][j][k][l]表示考虑到第i位,已进位j次,是否受限制,这一位是否需要进位(后两维大小为1)

枚举p进制下每一位中[0,p)的取值,复杂度$O(log_p^n \times p^2)$

但是其实很多枚举所进入的下一层状态是完全相同的,不用枚举,所有方案数都是等差数列之和。根据含义推即可。

至于进制转化,while高精下模一下除一下即可。

 #include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
#define mod 100000000
#define Mod 1000000007
#define L lim[al]
int lim[],l,p,k,pw[];char N[];
int dp[][][][];
#define DP dp[al][up][islim][nup]
struct Int{
long long a[],ws;
friend int operator%(Int &a,int b){
for(int i=a.ws-;i;--i)a.a[i-]+=a.a[i]%b*mod,a.a[i]/=b;
int res=a.a[]%b;a.a[]/=b;
while(a.ws&&!a.a[a.ws-])a.ws--;
return res;
}
}n;
long long sch(int al,int up,int islim,int nup){
if(~DP)return DP;
if(al==l+)return DP=(up>=k&&!nup);
if(nup){
if(!islim)return DP=(sch(al+,up,,)*((p-1ll)*p/%Mod)+sch(al+,up+,,)*((p+1ll)*p/%Mod))%Mod;
else return DP=(sch(al+,up,,)*((*p-1ll-L)*L/%Mod)+sch(al+,up+,,)*((*p-L+1ll)*L/%Mod)
+sch(al+,up,,)*(p-L-)+sch(al+,up+,,)*(p-L))%Mod;
}else{
if(!islim)return DP=(sch(al+,up,,)*((1ll+p)*p/%Mod)+sch(al+,up+,,)*((p-1ll)*p/%Mod))%Mod;
else return DP=(sch(al+,up,,)*((L+1ll)*L/%Mod)+sch(al+,up+,,)*((L-1ll)*L/%Mod)
+sch(al+,up,,)*(L+)+sch(al+,up+,,)*L)%Mod;
}
}
int main(){//freopen("password9.in","r",stdin);
pw[]=;for(int i=;i<=;++i)pw[i]=pw[i-]*;
scanf("%s%d%d",N,&p,&k);
while(N[l])l++;reverse(N,N+l);
for(int com=;com<l;++com) n.a[com/]+=(N[com]-)*pw[com%];
n.ws=(l-)/+;l=;
while(n.ws)lim[++l]=n%p;
reverse(lim+,lim+l+);
if(k>l){puts("");return ;}
memset(dp,0xff,sizeof dp);
printf("%lld\n",sch(,,,));
}

[考试反思]0910csp-s模拟测试42:追求的更多相关文章

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  8. [考试反思]1003csp-s模拟测试58:沉淀

    稳住阵脚. 还可以. 至少想拿到的分都拿到了,最后一题的确因为不会按秩合并和线段树分治而想不出来. 对拍了,暴力都拍了.挺稳的. 但是其实也有波折,险些被卡内存. 如果内存使用不连续或申请的内存全部使 ...

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

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

随机推荐

  1. java第2天:类,对象,封装和构造方法

    1 面向对象简述 将 {1,3,45,56,78,90}转化为[1,3,45,56,78,90] 1-2 方法1:面向过程 代码块 public class test { public static ...

  2. 前后端分离————VUE+node(express)

    前后端分离----VUE+node(express) vue作为前端的框架,node(express)作为后端的框架.无数据库,使用端口保存数据. VUE: 使用vue-cli构建vue项目(vuea ...

  3. Xshell、Xftp 5、6 解决“要继续使用此程序,您必须应用最新的更新或使用新版本”

    今天打开Xshell.Xftp,突然弹出“要继续使用此程序,您必须应用最新的更新或使用新版本”. 后来经过一番搜索发现,XShell配置文件中写入了强制升级时间,这个版本是2017年12月27日发布的 ...

  4. BZOJ 4392 卡牌游戏

    Description 奶牛贝茜是卡牌游戏的狂热爱好者, 但是令人吃惊的, 她缺乏对手. 不幸的是, 任何牧 群里的其他牛都不是好对手. 他们实在是太差了 , 实际上, 他们玩卡牌游戏时会遵循一种完全 ...

  5. python自动化测试三部曲之request+django实现接口测试

    国庆期间准备写三篇博客,介绍和总结下接口测试,由于国庆期间带娃,没有按照计划完成,今天才完成第二篇,惭愧惭愧. 这里我第一篇博客的地址:https://www.cnblogs.com/bainianm ...

  6. Vue3都使用Proxy了,你更应该了解Proxy

    vue3.0的pre-alpha版代码已经开源了,就像作者之前放出的消息一样,其数据响应这一部分已经由ES6的Proxy来代替Object.defineProperty实现,感兴趣的同学可以看其实现源 ...

  7. Linux下聊天和文件传输软件

    全平台聊天软件 米聊 官网地址: http://www.miliao.com 潮信 官网地址: https://www.chaoxin.com

  8. 代码审计之create_function()函数

    0x00 create_function()简介 适用范围:PHP 4> = 4.0.1,PHP 5,PHP 7 功能:根据传递的参数创建匿名函数,并为其返回唯一名称. 语法: create_f ...

  9. shark恒破解笔记4-API断点GetPrivateProfileStringA

    这小节是通过断在GetPrivateProfileStringA,然后找到注册码的. 1.运行程序输入假码111111,提示重启.通过这判断这是一个重启来验证的,那么它是如何来验证的呢?观察程序目录下 ...

  10. opencv::Sobel算子

    卷积应用-图像边缘提取 卷积应用-图像边缘提取 边缘是什么 – 是像素值发生跃迁的地方,是图像的显著特征之一, 在图像特征提取.对象检测.模式识别等方面都有重要的作用. 如何捕捉/提取边缘 – 对图像 ...