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

题目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. MySQL中事物的详解

    1. 事物的定义及特性 事务是一组操作数据库的SQL语句组成的工作单元,该工作单元中所有操作要么同时成功,要么同时失败.事物有如下四个特性,ACID简称“酸性”. 1)原子性:工作单元中所有的操作要么 ...

  2. 8-1 python 接口开发(提供数据、返回session_id)

    1.接口开发,根据不同查询条件返回数据库查询结果 import flask import tools import json server = flask.Flask(__name__) #新建一个服 ...

  3. Delphi中DLL的创建和使用(转)

    Delphi中DLL的创建和使用     1.DLL简介:   2.调用DLL:   3.创建DLL:   4.两个技巧:   5.初始化:   6.例外处理.            1.DLL简介  ...

  4. PHP 微信公众号真正正确的客服头像上传

    首先我们来看官方文档 这TM的搞笑呢 什么破玩意儿! 需要条件 1 需要有一个客服的账号 (废话) 2 一致jpg格式的图片(扯蛋) 完整流程 1 获取access_token 2获取账号 3 $ur ...

  5. Codeforces Round #392 (Div. 2) Unfair Poll

    C. Unfair Poll time limit per test 1 second memory limit per test 256 megabytes input standard input ...

  6. Leetcode 538. 把二叉搜索树转换为累加树

    题目链接 https://leetcode.com/problems/convert-bst-to-greater-tree/description/ 题目描述 大于它的节点值之和. 例如: 输入: ...

  7. 笔记-爬虫-selenium常用方法

    笔记-爬虫-selenium常用方法 1.      查找元素 常用的查找方法 find_element_by_name find_element_by_xpath find_element_by_l ...

  8. 基于HDP版本的YDB安装部署(转)

    第三章 YDB依赖环境准备 一.硬件环境 硬件如何搭配,能做到比较高的性价比,不存在短板.合理的硬件搭配,对系统的稳定性也很关键. 1.CPU不是核数越高越好,性价比才是关键. 经常遇到很多的企业级客 ...

  9. TouTiao开源项目 分析笔记13 最后一个订阅号的实现主页面

    1.实现订阅号的基础类 1.1.本地订阅号的Bean类==>MediaChannelBean public class MediaChannelBean implements Parcelabl ...

  10. error: unknown host service 的详细解决办法

    问题情况描述: 有时候,你在cmd 窗口 adb shell 的时候,出现error: unknown host service. 问题解决办法: 这就要怪可恶的360手机助手了,你在任务管理器里面把 ...