前言:

早上完全起不来了,9点被回来的舍友叫醒,orz


JZOJ 3461 小麦亩产一千八

题目

假设第0个格子有1粒麦子,第1个格子有p粒麦子,之后每一个格子放入前两个格子的小麦数之和的小麦,若第a个格子有x粒麦子,问是否存在p,若存在,问第b个格子有多少粒麦子,否则输出-1(给出a,x,p)


分析

按照这样,得到数列1,p,p+1,2p+1,3p+2,5p+3,8p+5……1,p,p+1,2p+1,3p+2,5p+3,8p+5……1,p,p+1,2p+1,3p+2,5p+3,8p+5……,所以很容易发现系数以及常数项都是斐波那契数列,所以容易得出代码


代码

#include <cstdio>
using namespace std;
long long a,x,b,f[21]={0,1};
int main(){for (int i=2;i<=20;i++) f[i]=f[i-1]+f[i-2];while (scanf("%lld%lld%lld",&a,&x,&b)==3){if ((x-f[a-1])%f[a]) puts("-1");//不存在p粒麦子的情况else{int z=(x-f[a-1])/f[a];//找到pprintf("%lld\n",f[b]*z+f[b-1]);//输出答案} }return 0;
}

JZOJ 3462 休息

题目

每一次将所有的书划分为尽量少的连续部分,使得每一部分的书的高度都是单调下降,然后将其中所有不少于2 本书的区间全部翻转。重复执行以上操作,最后使得书的高度全部单调上升。问最少需要翻转多少次。


分析

做第一次翻转,再求逆序对。
Reason:因为不能保证直接求逆序对是最优的,所以要模拟第一次翻转,then为什么要求逆序对,因为把单调上升连续子序列转变后,那么再翻转就是在中间翻转,所以直接求逆序对就行了。


代码

#include <cstdio>
#include <cctype>
#include <algorithm>
using namespace std;
int n,a[100001],b[100001]; long long ans;
int in(){int ans=0; char c=getchar();while (!isdigit(c)) c=getchar();while (isdigit(c)) ans=ans*10+c-48,c=getchar();return ans;
}
void merge(int l,int mid,int r){int low=l,high=mid+1,x=0;while (low<=mid&&high<=r){if (a[low]<=a[high]) b[++x]=a[low++];else b[++x]=a[high++],ans+=mid-low+1;//求逆序对}while (low<=mid) b[++x]=a[low++];while (high<=r) b[++x]=a[high++];for (int j=1;j<=x;j++) a[l+j-1]=b[j];
}
void mergesort(int l,int r){if (l<r){int mid=(l+r)/2;mergesort(l,mid);mergesort(mid+1,r);merge(l,mid,r);}
}
int main(){n=in(); int j=1;for (int i=1;i<=n;i++) a[i]=in();for (int i=1;i<n;i++)if (a[i]<a[i+1]){if (i-j>=1) for (int k=j;k<=(j+i)>>1;k++) //翻转a[k]^=a[i-k+j],a[i-k+j]^=a[k],a[k]^=a[i-k+j]; if (i-j>=1) ans++; j=i+1;}if (n-j>=1) for (int k=j;k<=(j+n)>>1;k++) //翻转a[k]^=a[n-k+j],a[n-k+j]^=a[k],a[k]^=a[n-k+j]; if (n-j>=1) ans++; mergesort(1,n);//归并排序return !printf("%lld",ans);
}

#JZOJ 3463 军训

题目

学号为1−n1-n1−n的学生,把他们分班,必须按照学号顺序,问在满足所有班的欠扁最高值之和不得超过Limit下,女友数之和最多的班级答案最小,保证有解


分析

二分女友数的答案,然后dpdpdp,f[i]f[i]f[i]表示分到学号iii时的欠扁最高值之和,then再用队列维护当前的班级,当然还要用STLSTLSTL中高级的multisetmultisetmultiset红黑树,满足删除,插入,查询是否存在或相等。
为什么要这么做,因为当枚举j∣1≤j≤ij|1\leq j\leq ij∣1≤j≤i时会相对应增加时间,所以可以用骚操作找出最优的jjj


代码

#include <cstdio>
#include <cctype>
#include <set>
using namespace std; multiset<int>ms;
int n,l,r,lrp,s[20001],rp[20001],f[20001],q[20001];
int in(){int ans=0; char c=getchar();while (!isdigit(c)) c=getchar();while (isdigit(c)) ans=ans*10+c-48,c=getchar();return ans;
}
int min(int a,int b){return (a<b)?a:b;}
int max(int a,int b){return (a>b)?a:b;}
bool check(int mid){f[0]=0; int x,y,j=1,head=1,tail=1; ms.clear();for (int i=1;i<=n;i++){while (s[i]-s[j-1]>mid) j++;//找出合法的jwhile (head<tail&&q[head]<j){//出队if (head+1<tail) ms.erase(ms.find(f[q[head]]+rp[q[head+1]]));//删除不合法head++;}while (head<tail&&rp[q[tail-1]]<=rp[i]){//如果当前最大值不满足if (head+1<tail&&ms.find(f[q[tail-2]]+rp[q[tail-1]])!=ms.end()) ms.erase(ms.find(f[q[tail-2]]+rp[q[tail-1]]));//出队tail--;}q[tail++]=i; if (head+1<tail) ms.insert(f[q[tail-2]]+rp[i]);//找出新的可能f[i]=f[j-1]+rp[q[head]]; if (!ms.empty()) f[i]=min(f[i],*ms.begin());//dp}return f[n]<=lrp;//在范围内
}
int main(){n=in(); lrp=in(); int x;for (int i=1;i<=n;i++) rp[i]=in(),x=in(),s[i]=s[i-1]+x,l=max(l,x); r=s[n];//l是最大的女友值,r是总和(分成一个班)while (l<r){//二分(最大值最小)int mid=(l+r)>>1;if (check(mid)) r=mid; else l=mid+1;}                                return !printf("%d",l);
}

JZOJ 3464 秀姿势

题目

一个序列,删去kkk个数字,使连续且相同的子序列最长。


分析

用一个队列维护当前kkk个数字,用sss存下队列中不同的数字,并用哈希统计答案


代码

#include <cstdio>
#include <cctype>
#include <queue>
#define p 200003
#define max(a,b) (a>b)?a:b
using namespace std;
int n,k,x,ans,hash[p],sash[p],s; queue<int>q;
int in(){int ans=0; char c=getchar();while (!isdigit(c)) c=getchar();while (isdigit(c)) ans=ans*10+c-48,c=getchar();return ans;
}
int locate(int x){int pos=x%p,i=0;while (i<p&&hash[(pos+i)%p]&&hash[(pos+i)%p]!=x) i++;return (pos+i)%p;
}
int main(){n=in(); k=in();for (int i=1;i<=n;i++){x=in(); int pos=locate(x); q.push(x);//进入队列if (!sash[pos]){//该数字不存在hash[pos]=x; s++;//加入while (s>k+1){//只能有k个不同的数字int pos1=locate(q.front()); q.pop(); sash[pos1]--; if (!sash[pos1]) hash[pos1]=0,s--;//删除}} sash[pos]++; ans=max(ans,sash[pos]); //统计答案}return !printf("%d",ans);
}

后续:OTL

2018.07.19【2018提高组】模拟C组相关推荐

  1. 2018.07.19 仿优酷网页小项目

    时间:2018.07.19 大一下学期暑假 地点:成都-实习 项目类型:HTML+CSS仿优酷网页 制作时间:两天 网页源码: <!doctype html> <html> & ...

  2. 单片机学习日志—电子秒表的设计(2018.07.19)

    学习日志                     姓名:王瑶      日期:2017.07.19 今日学习任务 秒表设计程序的改进和完善   今日任务完成情况 (详细说明本日任务是否按计划完成,开发 ...

  3. 2018.07.17【省赛模拟】模拟B组 比赛总结

    题目 [GDKOI2003]最大公共子串 [题目描述] 从一个给定的串中删去(不一定连续地删去)0个或0个以上的字符,剩下的字符按原来的顺序组成的串是该串的字串.例如:"", &q ...

  4. 2018.07.17【省赛模拟】模拟B组 比赛题解(总结)

    今天一看排名,what the,又垫底了,新初二第一YYT287.5,第二WYD120 T1: 最大公共子串 分类讨论+DP 题目描述 从一个给定的串中删去(不一定连续地删去)0个或0个以上的字符,剩 ...

  5. JZOJ5857 【NOIP提高组模拟A组2018.9.8】没有上司的舞会

    题目 Description "那么真的有果尔德施坦因这样一个人?"他问道. "是啊,有这样一个人,他还活着.至于在哪里,我就不知道了." "那么那个 ...

  6. JZOJ 5281. 【NOIP提高组模拟A组8.15】钦点

    Description Input Output Sample Input 4 4 2 a a b b a a b b c c d d c c d d 1 1 3 3 2 2 3 1 1 3 2 2 ...

  7. 【二分,找规律】Day 14 提高组模拟C组 T1 小麦亩产一千八

    题目大意 给定斐波那契的第aaa项,求出第b" role="presentation">bbb项,默认第0项为1 解题思路 方法一:递推 找到规律后O(b)O(b) ...

  8. JZOJ 5814. 【NOIP提高A组模拟2018.8.14】 树

    梦游中的你来到了一棵 N 个节点的树上. 你一共做了 Q 个梦, 每个梦需要你从点 u 走到点 v 之后才能苏醒, 由于你正在梦游, 所以每到一个节点后,你会在它连出去的边中等概率地选择一条走过去, ...

  9. 2018.12.08【NOIP提高组】模拟B组总结(未完成)

    2018.12.08[NOIP提高组]模拟B组总结 diyiti 保留道路 进化序列 B diyiti Description 给定n 根直的木棍,要从中选出6 根木棍,满足:能用这6 根木棍拼出一个 ...

最新文章

  1. SBO_SP_TransactionNotification 存储过程的应用
  2. python自学书籍顺序-python:入门到实践书籍学习(六)
  3. 排球计分程序(八)——验证编辑方法(Edit method)和编辑视图(Edit view)
  4. stm32 输入捕获学习(二)
  5. 2019日历全年一张_带上这份2019全年活动日历,旅行打卡不迷路
  6. Mysql 索引的基础(下)
  7. 字符集ASCII、GBK、UNICODE、UTF在储存字符时的区别
  8. 备份文件时,添加时间戳
  9. 电信光猫改桥接还在苦苦破解超级密码吗?
  10. (原创)安卓抓包方案分享
  11. 项目管理工具与技术---项目风险管理中的工具与技术
  12. 正弦定理和余弦定理_高中数学,正弦定理和余弦定理的应用举例,含高频考点及详细解析...
  13. 进入故障恢复控制台从此不需要密码
  14. 浙大毕业演讲 --- 马一浮
  15. 小侃设计模式(八)-装饰者模式
  16. javaweb企业员工考勤管理系统案例
  17. 关于vue 动态引入(异步加载import和require)组件的方法和坑(按需懒加载组件,动态生成路由)babel-plugin-dynamic-import-node 优化编译速度
  18. 《通信原理》多径衰落信道仿真1
  19. 利用最小二乘法做线性回归
  20. java菜单栏尺寸设置_java – 如何设置JMenuItem的大小?

热门文章

  1. Houdini 自定义节点参数面板 hou.ParmTemplate学习笔记
  2. 日本大阪大学万伟伟研究员介绍基于WRS系统机器人的快速集成方法和应用
  3. Hadoop Notes I
  4. 北京高校应届生就业招聘信息网址
  5. 三冲IPO,亨达海天能否敲开美股上市大门?
  6. 我TM吹爆 VIM - 安装入门,部署
  7. 选拔赛proA:经营小卖部
  8. mpirun 遇到 forrtl: severe (174): SIGSEGV, segmentation fault occurred
  9. 【Python】用OpenCC将繁体字转为简体字
  10. 计算机网络辅助英语写作,计算机网络及课件辅助大学英语写作教学的研究