题不难,可我答的不够好。

  T1时间太长,忘了公式又推了半天。边码对拍边试公式,大概开考40分钟才A掉。

  T2想的太少,还是思路差一点拔高,大众分都能想到,应该能顺着想出来线段树思路。

  T3。。。。。因为给的时间过少,set建边不会,摸索半天,大概30分钟才把边建出来,然后打的时候发现我的dfs思路死了就剩10min了,立马想到他tarjan+topu,然后10分钟码完了撞了一个变量名,爆0了。

  这次考试大概比较简单,但是问题有

1.线段树的运用不够灵活,一般是能够化出来一个式子,把和变量有关的放到一块,扔到树上,然后用常量进行判断修改查询等。

2.T3有向图无向图搞混,这是不应该的,在确定要用图论来做的时候,先判断用哪部分知识。

  T1:裸catalan,没了。

#include<iostream>
#include<cstdio>
using namespace std;
const int N=2000020,mod=20100403;
int fac[N],inv[N];
inline int rd()
{int s=0,w=1;char cc=getchar();for(;cc<'0'||cc>'9';cc=getchar()) if(cc=='-') w=-1;for(;cc>='0'&&cc<='9';cc=getchar()) s=(s<<3)+(s<<1)+cc-'0';return s*w;
}
int qpow(int a,int k)
{int ans=1;for(;k;k>>=1,a=1ll*a*a%mod) if(k&1) ans=1ll*ans*a%mod;return ans;
}
int C(int n,int m)
{if(n<m) return 0;return 1ll*fac[n]*inv[n-m]%mod*inv[m]%mod;
}
int main()
{//freopen("data.in","r",stdin);//freopen("data.out","w",stdout);int n=rd(),m=rd();fac[0]=1;if(n<m) return puts("0"),0;for(int i=1;i<=n+m;i++) fac[i]=1ll*fac[i-1]*i%mod;inv[n+m]=qpow(fac[n+m],mod-2);for(int i=n+m;i>=1;i--) inv[i-1]=1ll*inv[i]*i%mod;printf("%d\n",(C(n+m,n)-C(n+m,m-1)+mod)%mod);
}
/*
g++ 1.cpp -o 1
./1
4 3
*/

View Code

  T2:线段树思路很顺利,不知为什么他们都沉迷于排序二分。暴力$O(nm)$很好打,考虑要优化哪部分,因为$O(m)$的部分每次都不一样,所以不优化它,考虑优化每一轮的计算,我们要的是一段能喝的权值和,只要排除不能喝的贡献即可,咋就不能喝了,$c[i]<ans+i$就不行了,就是当前的答案和这一轮他之前和他自己的消耗的次数,变量放一边$c[i]-i>=ans$为合法,只要区间最小值,然后如果都合法,那么直接加整个区间的贡献,否则对点挨个删,删到合法后加贡献,注意删完一个区间后边的排序就少一$c[i]-i$应该加一,然后就没了。每个点最多删一次,复杂度$O(nlogn)$

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int N=100020;
long long inf=0x7ffffffffffffff;
long long f[N],a[N],c[N],w[N];
struct tree{long long w,c,f,p;}tr[N*4];
inline long long rd()
{long long s=0,w=1;register char cc=getchar();for(;cc<'0'||cc>'9';cc=getchar()) if(cc=='-') w=-1;for(;cc>='0'&&cc<='9';cc=getchar()) s=(s<<3)+(s<<1)+cc-'0';return s*w;
}
inline void updata(int k)
{tr[k].w=tr[k<<1].w+tr[k<<1|1].w;tr[k].c=min(tr[k<<1].c,tr[k<<1|1].c);if(tr[k<<1].c<=tr[k<<1|1].c) tr[k].p=tr[k<<1].p;else tr[k].p=tr[k<<1|1].p;
}
inline void modify(int k,int l,int r,int w){tr[k].c+=w;tr[k].f+=w;}
inline void down(int k,int l,int r)
{int mid=l+r>>1;modify(k<<1,l,mid,tr[k].f);modify(k<<1|1,mid+1,r,tr[k].f);tr[k].f=0;
}
void build(int k,int l,int r)
{if(l==r){tr[k].c=c[l]-l;tr[k].w=1;tr[k].p=l;return;}int mid=l+r>>1;build(k<<1,l,mid);build(k<<1|1,mid+1,r);updata(k);
}
void cut(int k,int l,int r,int id)
{if(l==r){tr[k].w=0,tr[k].c=inf;return;}int mid=l+r>>1;if(tr[k].f)down(k,l,r);if(id<=mid) cut(k<<1,l,mid,id);else cut(k<<1|1,mid+1,r,id);updata(k);
}
void add(int k,int l,int r,int x,int y,int w)
{if(l==x&&r==y){modify(k,l,r,w);return;}int mid=l+r>>1;if(tr[k].f) down(k,l,r);if(y<=mid) add(k<<1,l,mid,x,y,w);else if(x>mid) add(k<<1|1,mid+1,r,x,y,w);else add(k<<1,l,mid,x,mid,w),add(k<<1|1,mid+1,r,mid+1,y,w);updata(k);
}
int main()
{int n=rd(),m=rd();long long x=rd();for(int i=1;i<=n;i++) w[i]=rd();for(int i=1;i<=n;i++) a[i]=rd();for(int i=1;i<=n;i++){c[i]=(x-w[i])/a[i]+1;if(c[i]<0) c[i]=0;}build(1,1,n);long long ans=0;while(m--){while(tr[1].c<ans){int t=tr[1].p;cut(1,1,n,t);add(1,1,n,t,n,1);}ans+=tr[1].w;}printf("%lld\n",ans);
}
/*
g++ -std=c++11 2.cpp -o 2
./2
5 2 20
15 14 13 12 12
1 1 1 1 1
*/

View Code

  T3:sb题,正解$O(n^{2})$,我服了,最终还是看出来topu了,也打出来了,但是太紧张导致撞变量了。

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int N=100020;
long long inf=0x7ffffffffffffff;
long long f[N],a[N],c[N],w[N];
struct tree{long long w,c,f,p;}tr[N*4];
inline long long rd()
{long long s=0,w=1;register char cc=getchar();for(;cc<'0'||cc>'9';cc=getchar()) if(cc=='-') w=-1;for(;cc>='0'&&cc<='9';cc=getchar()) s=(s<<3)+(s<<1)+cc-'0';return s*w;
}
inline void updata(int k)
{tr[k].w=tr[k<<1].w+tr[k<<1|1].w;tr[k].c=min(tr[k<<1].c,tr[k<<1|1].c);if(tr[k<<1].c<=tr[k<<1|1].c) tr[k].p=tr[k<<1].p;else tr[k].p=tr[k<<1|1].p;
}
inline void modify(int k,int l,int r,int w){tr[k].c+=w;tr[k].f+=w;}
inline void down(int k,int l,int r)
{int mid=l+r>>1;modify(k<<1,l,mid,tr[k].f);modify(k<<1|1,mid+1,r,tr[k].f);tr[k].f=0;
}
void build(int k,int l,int r)
{if(l==r){tr[k].c=c[l]-l;tr[k].w=1;tr[k].p=l;return;}int mid=l+r>>1;build(k<<1,l,mid);build(k<<1|1,mid+1,r);updata(k);
}
void cut(int k,int l,int r,int id)
{if(l==r){tr[k].w=0,tr[k].c=inf;return;}int mid=l+r>>1;if(tr[k].f)down(k,l,r);if(id<=mid) cut(k<<1,l,mid,id);else cut(k<<1|1,mid+1,r,id);updata(k);
}
void add(int k,int l,int r,int x,int y,int w)
{if(l==x&&r==y){modify(k,l,r,w);return;}int mid=l+r>>1;if(tr[k].f) down(k,l,r);if(y<=mid) add(k<<1,l,mid,x,y,w);else if(x>mid) add(k<<1|1,mid+1,r,x,y,w);else add(k<<1,l,mid,x,mid,w),add(k<<1|1,mid+1,r,mid+1,y,w);updata(k);
}
int main()
{int n=rd(),m=rd();long long x=rd();for(int i=1;i<=n;i++) w[i]=rd();for(int i=1;i<=n;i++) a[i]=rd();for(int i=1;i<=n;i++){c[i]=(x-w[i])/a[i]+1;if(c[i]<0) c[i]=0;}build(1,1,n);long long ans=0;while(m--){while(tr[1].c<ans){int t=tr[1].p;cut(1,1,n,t);add(1,1,n,t,n,1);}ans+=tr[1].w;}printf("%lld\n",ans);
}
/*
g++ -std=c++11 2.cpp -o 2
./2
5 2 20
15 14 13 12 12
1 1 1 1 1
*/

View Code

 

转载于:https://www.cnblogs.com/starsing/p/11375000.html

20190818考试反思相关推荐

  1. 考试用计算机反思800字,考试反思作文800字

    [考试] 作者: 武佳硕 2017年 5月6日 星期六 晴 今天我们进行了一场在英华初中免费生考试前测试. 虽然这次考试,不会算我们的真实成绩,但是老师要测我们的考试状态,一开始我还自信满满地认为我能 ...

  2. 高一计算机课期中考试总结反思,2017高一数学期中考试反思总结

    引导语:数学新课改的基本理念是:学有价值的数学,反映出学生实践能力和创新意识方面的不足,应引起我们的高度重视,学生的动手能力还有待提高.以下是百分网小编分享给大家的2017高一数学期中考试反思总结,欢 ...

  3. 计算机一级B考试总结500字,期中考试反思作文500字

    作文开头: 1.期中考试反思期中考试的成绩下来了,我才刚刚八十分.这简直是个耻辱,尤其是语文刚刚八十,站在b.. 本文<期中考试反思作文500字>由小学生作文大全编辑老师整理发表,欢迎在下 ...

  4. 计算机英语反思总结怎么写,英语考试反思总结(精选10篇)

    英语考试反思总结(精选10篇) 总结是把一定阶段内的有关情况分析研究,做出有指导性结论的书面材料,它能够给人努力工作的动力,为此要我们写一份总结.那么如何把总结写出新花样呢?下面是小编为大家整理的英语 ...

  5. 计算机英语反思总结怎么写,英语考试反思总结

    总结是把一定阶段内的有关情况分析研究,做出有指导性结论的书面材料,它能够给人努力工作的动力,为此要我们写一份总结.那么如何把总结写出新花样呢?下面是小编为大家整理的英语考试反思总结(精选10篇),欢迎 ...

  6. 单元测试总结反思_语文单元考试反思

    语文单元考试反思 导语:在语文单元考试之后,我们首先要做好的就是写好考试反思,以下是小编为大家整理的语文单元考试反思,欢迎大家阅读与借鉴! 语文单元考试反思(1) 这次的语文考试中最大的问题和以前一样 ...

  7. 计算机学业水平考试反思总结8百,考试反思总结范文(精选5篇)

    考试反思总结范文(精选5篇) 总结是事后对某一阶段的学习或工作情况作加以回顾检查并分析评价的书面材料,它可以帮助我们有寻找学习和工作中的规律,因此我们需要回头归纳,写一份总结了.你想知道总结怎么写吗? ...

  8. 四年级计算机考试反思,考试反思四年级作文

    考试反思四年级作文 在日常的学习.工作.生活中,大家都接触过作文吧,作文是经过人的思想考虑和语言组织,通过文字来表达一个主题意义的记叙方法.相信许多人会觉得作文很难写吧,以下是小编收集整理的考试反思四 ...

  9. 计算机没考好的检讨书300百以上,考试反思检讨书300字(精选10篇)

    考试反思检讨书300字(精选10篇) 在学习.工作.生活中出现了失误后,为了避免再犯,我们常常被要求写检讨书,以对出现的过错进行反省,请注意写检讨要把原因讲清楚.问题来了,检讨书应该怎么写?下面是小编 ...

最新文章

  1. CoreAnimation —— CATransaction(隐式动画)
  2. Win32 API、VC++、C# 文件操作函数的初步比较
  3. 私有化仓库的 GO 模块使用实践
  4. 浏览器检测,移动网络的在线离线及网络状态
  5. win7连接sftp_SFTP远程连接服务器上传下载文件-vs2013项目实例
  6. UE4 蓝图通信:接口调用
  7. poi实现word转html并返回html内容(Java版)
  8. linux修改宽带拨号密码,Linux下ADSL拨号配置
  9. Python xlwt 操作 excel 表格基础(二):冻结窗口、设置加密保护、打印设置等
  10. 下一代无服务器的发展形态: Serverless2.0
  11. 计算机网络适配器找不到,网络适配器不见了怎么办?电脑Windows网络适配器不见了的5个解决方法...
  12. 使用Amazon SageMaker RL 和Unity训练强化学习智能体
  13. 利用Python脚本给图片批量添加文字水印
  14. 像踢球一样玩转Redux和React
  15. 才智杂志社才智杂志才智编辑部2022年第36期目录
  16. 如何快速的安装cnpm
  17. 将excel表格数据转换为xml文本数据
  18. NAT ,BFD ,NQA 实验
  19. MySQL燕十八老师课程笔记:第九课:having筛选
  20. 电机坐标变换simulink仿真(笔记)

热门文章

  1. 南邮23考研复试上机[1006最大公约数和最小公倍数]
  2. 微信小程序之引入使用Vant Weapp组件
  3. emui9.1是鸿蒙系统吗,EMUI9.1系统再次更新,可惜用户不买账,原来大家期待鸿蒙公测...
  4. Pycharm一键生成代码块
  5. light动名词_动名词专项训练
  6. Real_time实时语义分割网络 SegNet, ENet, ICNet, BiSeNet,ShelfNet
  7. 11尺寸长宽 iphone_iPhone 11多大英寸?
  8. Proxmox支持虚拟机和容器的虚拟化平台
  9. flask+链家+福州房产信息网
  10. java托盘 不见了,win7系统任务栏托盘图标消失不见了如何找回