NOIp 0904 出题报告
T1 huajitree
纯模拟,把S拆成二进制查一下有多少个1,然后把这个数和N*M求一下gcd,除一下输出就好了。说求期望值可能对新高一不太友好….
//huajitree
//2016.8.22
//by Cydiater
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <queue>
#include <map>
#include <cstring>
#include <string>
#include <algorithm>
#include <cmath>
#include <ctime>
#include <iomanip>
using namespace std;
#define FILE "huajitree"
#define ll long long
#define up(i,j,n) for(int i=j;i<=n;i++)
#define down(i,j,n) for(int i=j;i>=n;i--)
const int oo=0x3f3f3f3f;
inline ll read(){
,f=;
;ch=getchar();}
+ch-';ch=getchar();}
return x*f;
}
ll S,ans=,N,M;
namespace solution{
inline ll gcd(ll a,ll b){?a:gcd(b,a%b);}
void init(){
N=read();M=read();S=read();
ans=;
}
void slove(){
){ans+=S%;S/=;}
}
void output(){
ll d=gcd(ans,N*M);
)cout<<ans/d<<'/'<<N*M/d;
");
}
}
int main(){
freopen(FILE".in","r",stdin);
freopen(FILE".out","w",stdout);
using namespace solution;
init();
slove();
output();
;
}
T2 pack
起名叫pack是为了衔接剧情QAQ,60分裸的DP,会DP就应该会,如果学过DP这个的60分没写出来就应该考虑补一下DP了。
所有数据都是随机的..所以加上一些奇淫技巧也许能暴力A掉?
给出状态转移方程:
首先把h和v的前缀和都搞出来


//NOIp by Cydiater right
//by Cydiater
//2016.8.24
#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <algorithm>
#include <queue>
#include <map>
#include <ctime>
#include <cstdlib>
#include <iomanip>
#include <cmath>
using namespace std;
#define ll long long
#define up(i,j,n) for(int i=j;i<=n;i++)
#define down(i,j,n) for(int i=j;i>=n;i--)
#define FILE "pack"
;
const int oo=0x3f3f3f3f;
inline ll read(){
,f=;
;ch=getchar();}
+ch-';ch=getchar();}
return x*f;
}
ll N,sum[MAXN],h[MAXN],q[MAXN],head,tail,f[MAXN];
namespace solution{
void init(){
N=read();
memset(sum,,sizeof(sum));
memset(h,,sizeof(h));
memset(f,,sizeof(f));
up(i,,N){
sum[i]=sum[i-]+read();
h[i]=h[i-]+read();
}
}
inline double col(int x,int y){
double t1=f[y]-f[x];
double t2=sum[y]-sum[x];
return t1/t2;
}
void slove(){
head=;tail=;q[++tail]=;
up(i,,N){
])<h[i])head++;
f[i]=f[q[head]]+(sum[i]-sum[q[head]])*h[i];
],q[tail])>col(q[tail],i))tail--;
q[++tail]=i;
}
}
void output(){
cout<<f[N]<<endl;
}
}
int main(){
freopen(FILE".in","r",stdin);
freopen(FILE".out","w",stdout);
using namespace solution;
init();
slove();
output();
;
}
T3 block
我太弱啦出不了第三题,这是BZOJ上的一道题,所以说这个的题解你随便一搜成片的都是,我简单废话一下,本题所需要的数据结构就是线段树,简单的说就是用线段树维护连通性,高二的各位神犇你们说良心不良心呀。
怎么用线段树维护连通性呢?
反正我是用一个线段树里维护6个值,分别是
左上到左下的连通性
左上到右下的连通性
左上到右上的连通性
左下到右下的连通性
左下到右上的连通性
右上到右下的连通性
维护四个值好像也没什么问题,具体的自己思考
然后合并什么的就很好(ma)搞(fan)了
具体的实现可以参考我180行的代码,虽然写的很丑..
COGS上有一个神犇90行就解决了,你们也可以去看看他的代码
//BZOJ 1018
//by Cydiater
//2016.8.24
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cstdlib>
#include <string>
#include <ctime>
#include <cmath>
#include <queue>
#include <map>
#include <iomanip>
#include <algorithm>
using namespace std;
#define FILE "block"
#define ll long long
#define up(i,j,n) for(int i=j;i<=n;i++)
#define down(i,j,n) for(int i=j;i>=n;i--)
;
const int oo=0x3f3f3f3f;
inline int read(){
,f=;
;ch=getchar();}
+ch-';ch=getchar();}
return x*f;
}
struct Tree{
bool luru;/*left up to right up*/
bool ldrd;/*left down to right down*/
bool lurd;/*left up to right down*/
bool ldru;/*left down to right up*/
bool luld;/*left up ro left down*/
bool rurd;/*right up to right down*/
}t[MAXN<<];
][MAXN],pipe[MAXN];
;
];
namespace solution{
Tree reload(Tree a,Tree b,bool upedge,bool downedge){
Tree c;
c.luld=a.luld;c.rurd=b.rurd;
c.luru=(a.luru&upedge&b.luru)|(a.lurd&downedge&b.ldru);
c.ldrd=(a.ldrd&downedge&b.ldrd)|(a.ldru&upedge&b.lurd);
c.lurd=(c.luru&c.rurd)|(c.luld&c.ldrd)|(a.luru&upedge&b.lurd)|(a.lurd&downedge&b.ldrd);
c.ldru=(c.ldrd&c.rurd)|(c.luld&c.luru)|(a.ldrd&downedge&b.ldru)|(a.ldru&upedge&b.luru);
c.luld=c.luld|(c.lurd&c.ldrd)|(c.ldru&c.luru)|(a.luru&upedge&b.luld&downedge&a.ldrd);
c.rurd=c.rurd|(c.lurd&c.luru)|(c.ldru&c.ldrd)|(b.luru&upedge&a.rurd&downedge&b.ldrd);
return c;
}
void build(int leftt,int rightt,int root){
if(leftt==rightt){
t[root].luru=t[root].ldrd=;
t[root].lurd=t[root].ldru=t[root].luld=t[root].rurd=;
return;
}
;
t[root].luru=t[root].ldrd=t[root].lurd=t[root].ldru=t[root].luld=t[root].rurd=;
build(leftt,mid,root<<);
build(mid+,rightt,root<<|);
}
void updata1(int leftt,int rightt,int root){
if(leftt>k||rightt<k) return;
if(leftt==k&&rightt==k){
t[root].luld=t[root].rurd=t[root].lurd=t[root].ldru=v;
return;
}
;
updata1(leftt,mid,root<<);
updata1(mid+,rightt,root<<|);
t[root]=reload(t[root<<],t[root<<|],toright[][mid],toright[][mid]);
}
void updata2(int leftt,int rightt,int root){
if(leftt>k||rightt<k) return;
if(leftt==k&&rightt==k) return;
;
updata2(leftt,mid,root<<);
updata2(mid+,rightt,root<<|);
t[root]=reload(t[root<<],t[root<<|],toright[][mid],toright[][mid]);
}
Tree get(int leftt,int rightt,int root){
Tree a,b,c;
if(leftt>=limleft&&rightt<=limright) return t[root];
;
<=limleft) ,rightt,root<<|);
);
else{
a=);
b=,rightt,root<<|);
c=reload(a,b,toright[][mid],toright[][mid]);
}
return c;
}
void slove(){
memset(toright,,sizeof(toright));
while(scanf("%s",s)!=EOF){
]=='E')break;
]=='O'){
c1=read();r1=read();c2=read();r2=read();
if(r1==r2&&c1!=c2){
k=r1;v=;pipe[k]=;
updata1(,N,);
}
if(r1!=r2&&c1==c2){
r1=min(r1,r2);k=r1;
toright[c1-][r1]=;
updata2(,N,);
}
}
]=='C'){
c1=read();r1=read();c2=read();r2=read();
if(r1>r2){
swap(r1,r2);
swap(c1,c2);
}/*make sure that r1<=r2*/
if(r1==r2&&c1!=c2){
k=r1;v=;pipe[k]=;
updata1(,N,);
}
if(r1!=r2&&c1==c2){
r1=min(r1,r2);
toright[c1-][r1]=;k=r1;
updata2(,N,);
}
}
]=='A'){
c1=read();r1=read();c2=read();r2=read();
if(c1==c2&&r1==r2){puts("Y");continue;}
if(r1>r2){
swap(r1,r2);
swap(c1,c2);
}/*make sure that r1<=r2*/
limleft=;limright=r1;Tree go_left=,N,);
limleft=r1;limright=r2;Tree go_mid=,N,);
limleft=r2;limright=N;Tree go_right=,N,);
if(r1==r2&&c1!=c2){
if(go_left.rurd||go_right.luld||go_mid.luld)puts("Y");
else puts("N");
}
if(r1!=r2&&c1==c2){
){
if((go_left.rurd&go_mid.ldrd&go_right.luld)||go_mid.luru||(go_left.rurd&go_mid.ldru)||(go_right.luld&go_mid.lurd))puts("Y");
else puts("N");
}else{
if((go_left.rurd&go_mid.luru&go_right.luld)||go_mid.ldrd||(go_left.rurd&go_mid.lurd)||(go_right.luld&go_mid.ldru))puts("Y");
else puts("N");
}
}
if(r1!=r2&&c1!=c2){
){/*left up to right down*/
if((go_left.rurd&go_mid.ldrd)||go_mid.lurd||(go_left.rurd&go_mid.ldru&go_right.luld)||(go_mid.luru&go_right.luld))puts("Y");
else puts("N");
}else{/*left down to right up*/
if((go_left.rurd&go_mid.luru)||go_mid.ldru||(go_left.rurd&go_mid.lurd&go_right.luld)||(go_mid.ldrd&go_right.luld))puts("Y");
else puts("N");
}
}
}
}
}
}
int main(){
freopen(FILE".in","r",stdin);
freopen(FILE".out","w",stdout);
using namespace solution;
N=read();
build(,N,);
slove();
;
}
小结
这套题对新高一可能不太友好,但是这些知识点全都是在NOIp范围内的,可能一些比较偏?但是一些零碎的东西还是要学的。个人以为NOIp2016想进top5这套题应该要拿到230分以上吧..
没什么可说的了,感谢滑稽大师cdc友情出演。
NOIp 0904 出题报告的更多相关文章
- NOIP 2017 解题报告
---恢复内容开始--- NOIP 2017 的题真的很难啊,怪不得当年我这个萌新爆零了(当然现在也是萌新)越学越觉得自己什么都不会. 想要成为强者要把这些好题都弄懂弄透 至少现在6道题我都比较陌生 ...
- NOIP 2000解题报告
题目简单,思路很快就有,关键是代码实现能力,大概3个多小时完成.第一题:题目大意:将一个10进制数N转换成-B进制数 (负进制转换):B<=20, N(-32768<=N<=3276 ...
- NOIP 2001解题报告
第一题: 有形如:ax3+bx2+cx+d=0 这样的一个一元三次方程.给出该方程中各项的系数(a,b,c,d 均为实数),并约定该方程存在三个不同实根(根的范围在-100至100之间),且根与 ...
- NOIP 2003解题报告
第一题(神经网络): 题目大意,给出一些点,每个点都有2个值,c和u,给出一些有向边,权值为w.入度为0的点的c已知,其它点的c未知,每个入度不为0的点node的c等于sum(c[k]*w[k][no ...
- NOIP 2006 解题报告
第一题: 在Mars星球上,每个Mars人都随身佩带着一串能量项链.在项链上有N颗能量珠.能量珠是一颗有头标记与尾标记的珠子,这些标记对应着某个正整数.并且,对于相邻的两颗珠子,前一颗珠子的尾标记一定 ...
- Luogu P1082 同余方程(NOIP 2012) 题解报告
题目传送门 [题目大意] 求关于x的同余方程 ax≡1(mod b)的最小整数解. [思路分析] 由同余方程的有关知识可得,ax≡1(mod b)可以化为ax+by=1,此方程有解当且仅当gcd(a, ...
- [日常] NOIp 2018 滚粗记
考试前预感到自己会滚大粗 然后发现确实滚了个大粗 ==== €€£ WARNING ==== 因为是后补的所以更新速度比较慢 最后决定把半成品扔出来 预计本周末放假会更完吧 2019.2.25 upd ...
- NOIP2018退役祭
退役感受 在写下这个标题的时候,我的心情是复杂的,无非就是感觉像对一位将要赶往战场的士兵说:"你的战争已经输掉了." 退役了,没有什么好说的.无论再怎么抱怨这题出的真烂也无法改变了 ...
- NOIP 2018 普及组 解题报告
目录 标题统计 题目链接 思路 代码 龙虎斗 题目链接: 思路 代码 摆渡车 题目链接: 思路 对称二叉树 题目链接 思路: 先来解释一下为毛现在才来发解题报告: 其实博主是参加过NOIP 2018普 ...
随机推荐
- vue.js+boostrap最佳实践
一.为什么要写这篇文章 最近忙里偷闲学了一下vue.js,同时也复习了一下boostrap,发现这两种东西如果同时运用到一起,可以发挥很强大的作用,boostrap优雅的样式和丰富的组件使得页面开发变 ...
- JVM内存管理------杂谈(借此也论一论obj=null)
各位园友好,LZ是从某网站转战过来的博主,看到这里很多博主都称看友们为园友,LZ斗胆模仿一下,不过以前,LZ其实都是称看友们为猿友的.之前LZ在某网站已经写了一系列文章,已经全部复制到了园内的新博客, ...
- SQL Server Data Tools – Business Intelligence for Visual Studio 2012安装时提示“The CPU architecture....”的解决方法
SQL Server Data Tools – Business Intelligence for Visual Studio 2012,一个很强大的工具,下载地址:http://www.micros ...
- AVL树插入操作实现
为了提高二插排序树的性能,规定树中的每个节点的左子树和右子树高度差的绝对值不能大于1.为了满足上面的要求需要在插入完成后对树进行调整.下面介绍各个调整方式. 右单旋转 如下图所示,节点A的平衡因子(左 ...
- MVC————扩展方法MvcHtmlString
使用前: public static class MyHtmlHelper { public static string GroupPage(this HtmlHelper helper) { str ...
- <html>中的action
现在发现html中的许多标签都具有重要属性,而且这些属性是需要用于数据的传输的,虽然说html着重在于数据的显示,但是 在浏览器与服务器之间的交互,需要有数据参与传输,而数据传输的标准,就依赖于htm ...
- 42-stat 显示文件的信息
显示文件的信息 stat [options] [file-list] 参数 file-list指定stat所显示的一个或多个文件的路径名 选项 -f 显示文件系 ...
- RabbitMQ 工作队列
创建一个工作队列用来在工作者(consumer)间分发耗时任务. 工作队列的主要任务是:避免立刻执行资源密集型任务,然后必须等待其完成.相反地,我们进行任务调度:我们把任务封装为消息发送给队列.工作进 ...
- java基础语法要点<二>(基于1.8)
注解(元数据) 从jdk5 开始,java支持在源文件中嵌入补充信息,称为注释(annotation).注释不会改变程序的动作,也就不会改变程序的语义.但在开发和部署期间,各种工具可以使用这类信息.元 ...
- lucene-查询query->QueryParser
对于搜索引擎(比如Google和百度)来讲,很多情况下只需要用户在输入框内输入所需查询的内容,然后再单击“搜索”就可以了,其余的事情全部交给搜索引擎去处理,最后搜索引擎会把检索到的结果显示出来.那么搜 ...