分数爆炸的一天··但也学了很多

题目1:活动安排

  给定n个活动的开始时间与结束时间··只有一个场地··要求保留尽量多的活动且时间不冲突···场地数n<=100000

  考点:贪心

  直接将结束时间按照升序排序,然后从小到大取不冲突的即可··很像hdu4343,然而我做的时候有点搞麻烦了

  

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<ctime>
#include<cctype>
#include<string>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=1e5+;
struct node{int l,r;}q[N],a[N];
int n,stk[N],top=;
inline int R(){
char c;int f=;
for(c=getchar();c<''||c>'';c=getchar());
for(;c<=''&&c>='';c=getchar()) f=(f<<)+(f<<)+c-'';
return f;
}
inline bool cmp(node a,node b){
if(a.l==b.l) return a.r>b.r;
else return a.l<b.l;
}
inline void pre(){
sort(q+,q+n+,cmp);
for(int i=;i<=n;i++){
while(top&&q[i].l>=q[stk[top]].l&&q[i].r<=q[stk[top]].r) top--;
stk[++top]=i;
}
n=;
for(int i=;i<=top;i++) a[++n]=q[stk[i]];
}
int main(){
//freopen("arrange.in","r",stdin);
//freopen("arrange.out","w",stdout);
n=R();
for(int i=;i<=n;i++){
int h=R(),m=R();q[i].l=h*+m;
h=R();m=R();
q[i].r=h*+m;
}
pre();
int head=,tail,ans=;
while(head<=n){
if(head<=n) ans++;
else break;
tail=head+;
while(tail<=n){
if(a[tail].l>=a[head].r) break;
else tail++;
}
if(tail>n) break;
else head=tail;
}
cout<<ans<<"\n";
}

题目2:最佳序列

  给定n个非负整数序列,要求找出长度大于l,小于r的区间,使得区间的平均数最大,n<=20000

  考点:二分+单调队列

  首先看到平均数要想到老套路:将每个值减去平均数转化成区间和大于0的问题

  求最大的平均数自然想到二分··然后用单调队列判断是否有可行解即可

#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<ctime>
#include<cctype>
#include<string>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<queue>
using namespace std;
const int N=2e4+;
const double eps=1e-;
inline int R(){
char c;int f=;
for(c=getchar();c<''||c>'';c=getchar());
for(;c<=''&&c>='';c=getchar()) f=(f<<)+(f<<)+c-'';
return f;
}
int n,l,r,num[N],minn,maxx;
double ans=,sum[N];
inline bool jud(double k){
for(int i=;i<=n;i++) sum[i]=(double)num[i]-k,sum[i]+=sum[i-];
deque<int>que;
for(int i=l;i<=n;i++){
while(!que.empty()&&sum[que.back()]>=sum[i-l]) que.pop_back();
que.push_back(i-l);
if(sum[i]>=sum[que.front()]) return true;
while(!que.empty()&&que.front()<=i-r) que.pop_front();
}
return false;
}
int main(){
//freopen("a.in","r",stdin);
//freopen("a.out","w",stdout);
n=R(),l=R(),r=R();minn=,maxx=;
for(int i=;i<=n;i++) num[i]=R(),minn=min(minn,num[i]),maxx=max(maxx,num[i]);
double le=minn,ri=maxx;
while(ri-le>eps){
double mid=(le+ri)/;
if(jud(mid)) ans=max(ans,mid),le=mid;
else ri=mid;
}
printf("%0.4f\n",ans);
return ;
}

题目3:回文子串

  给定两个串s和t··将s与t拆开后组成新的字符串,但新串的字母的顺序为原来s与t的顺序··求新串能够包含的最长回文子串长度,s与t的长度均小于50

  考点:dp

  哎··dp还是太弱了··开始时完全没思路

  用f[i][j][k][l]表示s串从前往后已经取出了i个,从后往前已经取出了k了,t串从前往后已经取出了j个,从后往前已经取出了l个组成的字符串的最长回文子串长度

  转移看代码吧··懒得写了

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<ctime>
#include<cctype>
#include<string>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=;
char s[N],t[N];
int ans,f[N][N][N][N],n,m;
int main()
{
//freopen("a.in","r",stdin);
scanf("%s%s",s+,t+);
n=strlen(s+);m=strlen(t+);
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
for(int k=n;k>=i-;k--)
for(int l=m;l>=j-;l--){
if(i<k&&s[i]==s[k]) f[i+][j][k-][l]=max(f[i+][j][k-][l],f[i][j][k][l]+);
if(j<l&&t[j]==t[l]) f[i][j+][k][l-]=max(f[i][j+][k][l-],f[i][j][k][l]+);
if(i<=k&&j<=l){
if(s[i]==t[l]) f[i+][j][k][l-]=max(f[i+][j][k][l-],f[i][j][k][l]+);
if(s[k]==t[j]) f[i][j+][k-][l]=max(f[i][j+][k-][l],f[i][j][k][l]+);
}
}
for(int i=;i<=n;i++)
for(int j=;j<=m;j++)
for(int k=i;k>=i-;k--)
for(int l=j;l>=j-;l--){
if(i==k&&j>l) ans=max(ans,f[i][j][k][l]+);
if(i>k&&j==l) ans=max(ans,f[i][j][k][l]+);
if(i>k&&j>l) ans=max(ans,f[i][j][k][l]);
}
cout<<ans<<endl;
return ;
}

题目4:赌博游戏

  最近西雅图的高中校园里流行这样一个游戏。

  我们有一个骰子,这个骰子有M个面,分别写着1..M,并且是个公平的骰子,换句话说,一次投掷时每个面朝上的概率是相同的。

  游戏的组织者使用这个骰子进行N次投掷,并且告诉玩家点数v出现了至少一次。那么玩家需要猜测N次投掷的点数之和。如果猜对了,就赢得了这个游戏。

  小宇也喜欢玩这个游戏。在一次游戏中,她猜测了一个正整数sum,于是她想知道猜对的概率是多少。

  数据满足:1≤N,M≤50;1≤v≤M;1≤sum≤N*M。

  考点:概率dp 

  简单的概率dp题··用f[j][i][0/1]表示已经掷出了i次骰子,总和为j,是否掷出了v的概率

  dp方程看代码

#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<ctime>
#include<cctype>
#include<cstring>
#include<string>
#include<algorithm>
using namespace std;
double f[][][];
int n,m,v,sum;
int main(){
//freopen("a.in","r",stdin);
scanf("%d%d%d%d",&n,&m,&v,&sum);
for(int i=;i<=m;i++){
if(i==v) f[i][][]=1.0/m;
else f[i][][]=1.0/m;
}
for(int i=;i<n;i++)
for(int j=;j<=i*m;j++)
for(int k=;k<=m;k++){
if(k!=v) f[j+k][i+][]+=f[j][i][]*1.0/m,f[j+k][i+][]+=f[j][i][]*1.0/m;
else f[j+v][i+][]+=(f[j][i][]*1.0/m+f[j][i][]*1.0/m);
}
double tot=;
for(int i=;i<=n*m;i++) tot+=f[i][n][];
printf("%0.8f",f[sum][n][]/tot);
return ;
}

NOIP2017赛前模拟11月2日总结的更多相关文章

  1. NOIP2017赛前模拟11月6日—7日总结

    收获颇丰的两天··· 题目1:序列操作 给定n个非负整数,进行m次操作,每次操作给出c,要求找出c个正整数数并将它们减去1,问最多能进行多少操作?n,m<=1000000 首先暴力贪心肯定是每次 ...

  2. NOIP2017赛前模拟11月4日总结:

    第一次挂0·····有点感伤···主要是因为时间分配太不合理了··花2个半小时搞第一题最后还wa完了··第二题很简单花了30分钟打完但没打对拍结果wa完···第三题暴力可以拿20分的但没时间打了··· ...

  3. NOIP2017赛前模拟10月30日总结

    题目1: n个人参赛(n<=100000),每个人有一个权值··已知两个人权值绝对值之差小于等于K时,两个人都有可能赢,若大于则权值大的人赢···比赛为淘汰制,进行n-1轮·问最后可能赢的人有多 ...

  4. 11月30日《奥威Power-BI智能分析报表制作方法》腾讯课堂开课啦

    这么快一周就过去了,奥威公开课又要与大家见面咯,上节课老师教的三种报表集成方法你们都掌握了吗?大家都知道,学习的结果在于实际应用,想要熟练掌握新内容的要点就在于去应用它.正是基于这一要点,每一期的课程 ...

  5. 11月23日《奥威Power-BI报表集成到其他系统》腾讯课堂开课啦

    听说明天全国各地区都要冷到爆了,要是天气冷到可以放假就好了.想象一下大冷天的一定要在被窝里度过才对嘛,索性明天晚上来个相约吧,相约在被窝里看奥威Power-BI公开课如何?        上周奥威公开 ...

  6. 11月16日《奥威Power-BI基于SQL的存储过程及自定义SQL脚本制作报表》腾讯课堂开课啦

           上周的课程<奥威Power-BI vs微软Power BI>带同学们全面认识了两个Power-BI的使用情况,同学们已经迫不及待想知道这周的学习内容了吧!这周的课程关键词—— ...

  7. 11月09日《奥威Power-BI vs微软Power BI》腾讯课堂开课啦

    上过奥威公开课的同学可能有一个疑问:奥威Power-BI和微软Power BI是同一个吗,为什么叫同样的名字?正如这个世界上有很多个John.Jack.Marry…一样,奥威Power-BI和微软Po ...

  8. 2016年11月30日 星期三 --出埃及记 Exodus 20:21

    2016年11月30日 星期三 --出埃及记 Exodus 20:21 The people remained at a distance, while Moses approached the th ...

  9. 2016年11月29日 星期二 --出埃及记 Exodus 20:20

    2016年11月29日 星期二 --出埃及记 Exodus 20:20 Moses said to the people, "Do not be afraid. God has come t ...

随机推荐

  1. ABAP 调用远程rfc

    ABAP 调用rfc DESTINATION附加项后面接的是远程目标名称,该目标在事务SM59中设定,其中包含连接和登录远程系统所需的全部参数信息.如果调用的就是本机的RFC目标,则DESTINATI ...

  2. 使用select2 宽度自适应

    加一个CSS属性:style = "width : 100%"

  3. ajaxfileupload多文件上传 - 修复只支持单个文件上传的bug

    搜索: jquery ajaxFileUpload AjaxFileUpload同时上传多个文件 原生的AjaxFileUpload插件是不支持多文件上传的,通过修改AjaxFileUpload少量代 ...

  4. oracle中序列,同义词的创建

    序列 序列是用来生成唯一,连续的整数的数据库对象.序列通常用来自动生成主机那或唯一键的值.序列可以按升序排序, 也可以按降序排序.例如,销售流水表中的流水号可以使用序列自动生成. 创建序列语法: cr ...

  5. python错误处理之try...except...finally...错误处理机制。

    今天学习了python的错误处理. 在程序处理的过程中,经常会出现错误,一旦出错就会非常麻烦.所以有的高级语言通常都内置了一套  try...exept...finaly...的错误处理机制,pyth ...

  6. Python的输入和输出问题详解

    输出用print()在括号中加上字符串,就可以向屏幕上输出指定的文字.比如输出'hello, world',用代码实现如下: >>> print('hello, world') pr ...

  7. B1086 就不告诉你 (15分)

    B1086 就不告诉你 (15分) 做作业的时候,邻座的小盆友问你:"五乘以七等于多少?"你应该不失礼貌地围笑着告诉他:"五十三."本题就要求你,对任何一对给定 ...

  8. HDU 6386 Age of Moyu

    Problem Description Mr.Quin love fishes so much and Mr.Quin’s city has a nautical system,consisiting ...

  9. 3,Flask 中的模板语言 Jinja2 及 render_template 的深度用法

    Flask中默认的模板语言是Jinja2 现在我们来一步一步的学习一下 Jinja2 捎带手把 render_template 中留下的疑问解决一下 首先我们要在后端定义几个字符串,用于传递到前端 S ...

  10. 发布“豪情”设计的新博客皮肤-darkgreentrip

    豪情 (http://www.cnblogs.com/jikey/)是一名在上海的前端开发人员,长期驻扎在园子里.他为大家设计了一款新的博客皮肤——darkgreentrip. 以下是该博客皮肤的介绍 ...