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

题目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. linux环境下nginx配置

    1.反向代理配置 #  nginx/conf/nginx.conf

  2. MongoDB模糊查询

    模糊查询简介MongoDB查询条件可以使用正则表达式,从而实现模糊查询的功能.模糊查询可以使用$regex操作符或直接使用正则表达式对象. MySQL  MongoDB select * from s ...

  3. MySQL5.6基于mysql-proxy实现读写分离

    已经搭建好MySQL主从架构 10.205.22.185 #mysql-proxy 10.205.22.186 #master 10.205.22.187 #slave 1.安装mysql-proxy ...

  4. vue本人常用插件汇总(常更新)

    1. 移动端UI插件 mint-ui http://mint-ui.github.io/#!/zh-cn 2.vue状态管理vuex,持久化插件:vuex-persist https://github ...

  5. css3 媒体查询的学习。

    1.什么是媒体查询 媒体查询可以让我们根据设备显示器的特性(如视口宽度.屏幕比例.设备方向:横向或纵向)为其设定CSS样式,媒体查询由媒体类型和一个或多个检测媒体特性的条件表达式组成.媒体查询中可用于 ...

  6. 笔记-python异常信息输出

    笔记-python异常信息输出 1.      异常信息输出 python异常捕获使用try-except-else-finally语句: 在except 语句中可以使用except as e,然后通 ...

  7. 5,MongoDB 之 "$" 的奇妙用法

    在MongoDB中有一个非常神奇的符号 "$" "$"  在 update 中 加上关键字 就 变成了 修改器 其实 "$" 字符 独立出现 ...

  8. Hibernate---数据操作示例BY实体映射文件

    创建一个Student.java类:该类需要一个无参的构造函数,以及属性的get/set方法 public class Student implements Serializable { privat ...

  9. Spring---加载配置文件的几种方法(org.springframework.beans.factory.BeanDefinitionStoreException)

    Spring中的几种容器都支持使用xml装配bean,包括:XmlBeanFactory ,ClassPathXmlApplicationContext ,FileSystemXmlApplicati ...

  10. Android stadio 工具使用

    android staido 有logcat窗口,她可以显示log信息.还有run窗口. 我以前一直忽略了run窗口,其实蛮重要,蛮好用的.他只会显示你当前运行的进程的log,不用你再去设置filld ...