UOJ224 NOI2016 旷野大计算 构造、造计算机
这段时间请不要找Itst聊天,Itst已经做疯了
事实证明大模拟题不可做
query 1
送分,加起来一起乘即可
I I + < - O
query 2
送分
I - < + S O
query 3
送分,把原数扩大$INF$倍,再调用$s$函数即可
默认下面的$INF=2^{100}$
I < S C -0.5 < O
query 4
好火啊qaq
因为我们的操作只允许我们放大到无穷大和缩小到趋近于$0$,所以我们考虑当$x$趋近于$0$时式子会趋向于什么
因为$s'(x) = ((1+e^{-x})^{-1}) ' = -(1+e^{-x})^{-2} \times (1+e^{-x})'$
$(1+e^{-x}) ' = (e^{-x}) ' = -e^{-x}$
所以$s'(x) = \frac{e^{-x}}{(1 + e^{-x})^2}$
将$0$带入得$s'(0)=\frac{1}{4}$
也就是说当$x$趋近于$0$时,函数可以近似为一个一次函数:$y=\frac{1}{4}x + 0.5$
而$s(x \times INF)$在$x<0$时等于$0$
所以不妨求$s(\frac{x}{INF} + INF \times s(x \times INF))$
如果$x<0$,括号内部的值趋向于$0$,得到的结果为$\frac{x}{4INF}+0.5$,那么取负、加上$0.5$、乘上$8INF$之后得到了$-2x$,加上$x$就得到了$-x$。
如果$x>0$,括号内部的值为$INF$,得到的结果为$1$。那么取负、加上$0.5$、乘上$8INF$、加上$x$之后得到了$4INF + x$,与我们需要的条件不符
那么我们只需要最后减去$4INF \times s(x \times INF)$即可满足条件了
当输入为$0$时会很尴尬地得到$0.5$的结果,我们只需要给$0$加上或减去$eps$就可以了
I C -0.0000000000000000000000001 < S < > + S - C 0.5 < + + O
query 5
送分,模拟题,注意不要对$2^0$项左移即可
freopen("nodes5.out" , "w" , stdout);
queue < int > q;
;
; i >= ; --i){
puts("I");
++cnt;
if(i)
printf("< %d %d\n" , cnt++ , i);
q.push(cnt);
}
){
printf("+ %d " , q.front());
q.pop();
printf("%d\n" , q.front());
q.pop();
q.push(++cnt);
}
printf("O %d\n" , q.front());
query 6
贼卡常
设$p$为当前数,$k$从$31$到$1$用$query\ 3$的方法检验$p-2^k$是否为正,如果为正减去$2^k$
$k=0$时可以直接输答案,无需判断。
考虑我们每一次使用$query\ 3$的方法时都需要乘上$INF$,常数太大,我们考虑在输入这个数据之后直接乘上$INF$,这样就不用每一次都左移。
使用浮点数计算二进制次幂。
可能会存在$p=2^k$,导致$s((p-2^k) \times INF)=0.5$的情况产生,我们只需要将$2^k -= eps$就不会有这种问题发生了。
freopen("nodes6.out" , "w" , stdout);
puts("I");
puts("< 1 100");
;
; i > ; --i){
printf("C %d -%.7lf\n" , cur , pow(2.0 , i-0.0001));
printf();
printf();
printf( , i);
printf();
printf();
cur += ;
}
printf("> %d 100\n" , cur);
printf();
query 7
实际上直接交样例可以在$Luogu$上$AC$,但是$UOJ\ Hack$了
用$query\ 6$的方法拆二进制,如果我们做按位加法,只有$11$不满足我们的要求
也就是说和为$2$时答案为$0$,否则和原来一样
设和为$x$,不难想到$ans=x +(-(s(x - 1.5) \times 2))$
freopen("nodes7.out" , "w" , stdout);
queue < int > que1 , que2 , que3;
puts("I");
puts("< 1 100");
cur = ;
; i > ; --i){
printf("C %d -%.7lf\n" , cur , pow(2.0 , i-0.0001));
printf();
que1.push(cur + );
printf( , i);
printf();
printf();
cur += ;
}
printf("> %d 100\n" , cur);
que1.push(cur + );
puts("I");
printf();
cur += ;
; i > ; --i){
printf("C %d -%.7lf\n" , cur , pow(2.0 , i-0.00000000001));
printf();
que2.push(cur + );
printf( , i);
printf();
printf();
cur += ;
}
printf("> %d 100\n" , cur);
que2.push(cur + );
++cur;
; i >= ; --i){
printf("+ %d %d\n" , que1.front() , que2.front());
++cur;
que1.pop();
que2.pop();
printf("C %d -1.5\n" , cur++);
printf("< %d 200\n" , cur++);
printf("S %d\n" , cur++);
printf("< %d 1\n" , cur++);
printf("- %d\n" , cur++);
printf( , cur);
++cur;
if(i)
printf("< %d %d\n" , cur++ , i);
que3.push(cur);
}
){
printf("+ %d " , que3.front());
que3.pop();
printf("%d\n" , que3.front());
que3.pop();
que3.push(++cur);
}
printf("O %d\n" , que3.front());
query 8
考虑找到一个点$x0$使得$s'(x0)=0.1$
然后用跟$query\ 4$相似的方法,将$\frac{x}{INF}+x0$代入$s$就可以得到$0.1x0 + 0.1\frac{x}{INF}$
然后还原就可以了
关于这个$x0$我是直接蒯的数据可以二分求上面导数式子的零点
freopen("nodes8.out" , "w" , stdout);
puts("I");
puts("> 1 96");
puts("C 2 -0.9624236501192068949955178268487368462703686687713210393220363376803277");
puts("S 3");
puts("C 4 -0.2763932022500210303590826331268723764559381640388474275729102754589479");
puts("< 5 95");
puts("O 6");
query 9
使用冒泡排序(虽然我自己写的冒泡排序不知道怎么无限$WA$)
伪代码长这样:
->
->
t = val[i] + val[j];
val[j] = min(val[i]-val[j] , ) + val[j];
val[i] = t - val[j];
然后考虑如何实现上面的min函数
跟$query\ 4$的实现很像:求$s(\frac{x}{INF} + INF \times s(x \times INF))$,减$0.5$,乘$4INF$,减$s(x\times INF)\times 2INF$即可
freopen("nodes9.out" , "w" , stdout);
] = {};
; i <= ; ++i){
puts("I");
num[i] = i;
}
cur = ;
; i <= ; ++i){
; j <= ; ++j){
printf("+ %d %d\n" , num[i] , num[j]);
printf("- %d\n" , num[i]);
printf();
printf();
printf();
printf();
printf();
printf();
printf( , cur + );
printf();
printf();
printf();
printf();
printf( , cur + );
printf();
printf();
printf( , cur + );
num[i] = cur + ;
num[j] = cur + ;
cur += ;
}
}
; i <= ; ++i)
printf("O %d\n" , num[i]);
query 10
TBC
调$query\ 9$调太久了,不想写了,然后就随便蒯了一份代码把结果蒯了
尾声
这题目真养生~
UOJ224 NOI2016 旷野大计算 构造、造计算机的更多相关文章
- [NOI2016]旷野大计算
Subtask0 造计算机神题.给一个忠告:珍爱生命,远离旷野大计算...... 代码在这里:戳我 Subtask1 给定\(a,b\):求\(-2a-2b\). 熟悉操作环境:\([-(a+b)]& ...
- [JZOJ4763] 【NOIP2016提高A组模拟9.7】旷野大计算
题目 题目大意 给你一个数列,有很多个询问,询问一段区间内,某个数乘它的出现次数的最大值,也就是带权众数. 思考历程 第一次看到这道题,立马想到了树套树之类的二位数据结构,发现不行.(就算可以也很难打 ...
- noi2016旷野大作战
玩了差不多两个小时61分 大概第9个点可以再拿5-6分 但是挺麻烦的并不想搞.. 这道题还是比较考验智商的??以及对那个特殊的ln函数的应用 感觉题目出的挺好的 看了题解 发现第4个点的确我应该想不到 ...
- 【JZOJ4763】【NOIP2016提高A组模拟9.7】旷野大计算
题目描述 输入 输出 样例输入 5 5 9 8 7 8 9 1 2 3 4 4 4 1 4 2 4 样例输出 9 8 8 16 16 数据范围 解法 离线莫队做法 考虑使用莫队,但由于在删数的时候难以 ...
- [luogu1737]旷野大计算
- Microsoft Azure 大计算 – 宣布收购 GreenButton
数据以及令人不可思议的计算能力,正在改变我们日常业务的经营方式,从科学和工程到媒体和金融,各行各业的客户正逐渐意识到什么是可能的.我们对整个基因组进行分析,以研制新药物.我们构建金融和保险模型, ...
- 【XSY3413】Lambda - 造计算机初步——邱奇-图灵论题与lambda演算
题意: 关于邱奇-图灵论题的一点思考 这道题起源于计算机科学史上一个非常著名的问题——邱奇-图灵论题,这个论题是可计算性理论的基石,关于它的思考与证明几乎贯穿了整个计算机科学史,涵盖了数学.算法理论. ...
- sql server 大数据, 统计分组查询,数据量比较大计算每秒钟执行数据执行次数
-- 数据量比较大的情况,统计十分钟内每秒钟执行次数 ); -- 开始时间 ); -- 结束时间 declare @num int; -- 结束时间 set @begintime = '2019-08 ...
- NOI2010~NOI2018选做
[NOI2010] [NOI2010]海拔 高度只需要0/1,所以一个合法方案就是一个割,平面图求最小割. [NOI2010]航空管制 反序拓扑排序,每次取出第一类限制最大的放置,这样做答案不会更劣. ...
随机推荐
- api接口签名认证的一种方式
请求方 try { using (var client = new HttpClient()) { StringContent content = new StringContent(strParam ...
- 如何解决用CMake未定义引用`JNI_CreateJavaVM'?
我需要从C ++运行Java,一般来说问题已经解决,但我的make系统或脚本出了问题,有一个创建JVM的C ++文件: #include <jni.h> #include <iost ...
- spring资源访问接口和资源加载接口
spring 资源访问接口 JDK提供的资源访问类,如java.net.URL.File等,不能很好地满足各种资源的访问需求,比如缺少从类路径或者Web容器的上下文中获取资源的操作类. 鉴于此,spr ...
- Python创建空DataFrame及添加行数据
# 创建空DataFrame df = pd.DataFrame(columns = ['YJML','EJML','SJML','WZLB','GGXHPZ','CGMS']) # 插入数据(忽略索 ...
- 洗礼灵魂,修炼python(38)--面向对象编程(8)—从算术运算符进一步认识魔法方法
上一篇文章了解了魔法方法,相信你已经归魔法方法至少有个概念了,那么今天就进一步的认识魔法方法.说这个之前,大脑里先回忆一下算术操作符. 什么是算术操作符?忘记没有?忘记了的自己倒回去看我前面的博文或者 ...
- python第三十天-类
编程范式 编程是程序员用特定的语法+数据结构+算法组成的代码来告诉计算机如何执行任务的过程 , 一个程序是程序员为了得到一个任务结果而编写的一组指令的集合,正所谓条条大路通罗马,实现一个任务的方式有很 ...
- C#语言————第一章 第一个C#程序
第一章 第一个C#程序 ******************C#程序*************** ①:建立项目:文件-->新建-->项目-->c#-->控制台程 ...
- 第四章 Hyper-V 2012 R2 网络配置
尼玛的我不高兴写了,所以下面的文档我直接把原来的pdf给转换出来,加了点自己的注解,我写的话会写自己觉得终于的章节. 在搭建虚拟化平台时,网络的虚拟化是一个非常重要的环节,如何保障网络的持续可用并 ...
- git撤销本地提交但未push的记录
### git撤销本地提交但未push的记录 前言:有时候本地执行commit命令或者cherry-pick命令后发现提交了不需要提交的东西,就需要把已提交的commit记录撤销下来,简单做下记录 撤 ...
- IntelliJ IDEA src下新建包, 没有层级结构
新建项目后再src先右键点击新建包 com.example , 然后想在com.example 包中包含其他包, 当点击src新建包后,出现如图的情况 解决: 继续在src上右键新建package ...