[补档]两个奇怪的大水题

导引

这是两道由OSU(貌似是一个我没有听说过的游戏)引申出的大水题(淼到不行啊喂),壹佰万行代码哦。

T1 OSU!

题目

osu 是一款群众喜闻乐见的休闲软件。

我们可以把osu的规则简化与改编成以下的样子:

一共有n次操作,每次操作只有成功与失败之分,成功对应1,失败对应0,n次操作对应为1个长度为n的01串。在这个串中连续的 X个1可以贡献X^3 的分数,这x个1不能被其他连续的1所包含(也就是极长的一串1,具体见样例解释)

现在给出n,以及每个操作的成功率,请你输出期望分数,输出四舍五入后保留1位小数。

INPUT

第一行有一个正整数n,表示操作个数。接下去n行每行有一个[0,1]之间的实数,表示每个操作的成功率。

OUTPUT

只有一个实数,表示答案。答案四舍五入后保留1位小数。

SAMPLE

INPUT

3

0.5

0.5

0.5

OUTPUT

6.0

n<=100000

样例说明(其实并不存在,只是我瞎说的而已= =)

{0,0,0} 0

{0,0,1} 1

{0,1,0} 1

{0,1,1} 2^3=8

{1,0,0} 1

{1,0,1} 1+1=2

{1,1,0} 2^3=8

{1,1,1} 3^3=27

总期望=(0+1+1+8+1+2+8+27)/8=6

解题报告

好水啊= =

其实就是个递推,我们要求3次方,为了方便,我们可以先推出1次方和2次方,再去推3次方,我们要用到几个及其高(jian)深(dan)的高(xiao)等(xue)数(shu)学(xue)定(gong)理(shi):

  (x+y)^2=x^2+2xy+y^2

  (x+y)^3=x^3+3(x^2)y+3x(y^2)+y^3

然后就可以推了

 1 #include<iostream>
 2 #include<cstring>
 3 #include<cstdio>
 4 using namespace std;
 5 double f[100001],s[100001],t[100001];
 6 int n;
 7 double x[100001];
 8 int main(){
 9     scanf("%d",&n);
10     for(int i=1;i<=n;i++)
11         scanf("%lf",&x[i]);
12     for(int i=1;i<=n;i++){
13         f[i]=(f[i-1]+1)*x[i];
14         s[i]=(s[i-1]+f[i-1]*2+1)*x[i];
15         t[i]=t[i-1]+(s[i-1]*3+f[i-1]*3+1)*x[i];
16 //      cout<<i<<‘ ‘<<f[i]<<‘ ‘<<s[i]<<‘ ‘<<t[i]<<endl;
17     }
18     printf("%.1lf",/*f[n]+s[n]+*/t[n]);
19 }

T2 Tyvj1952 Easy

题目

某一天WJMZBMR在打osu~~~但是他太弱了,有些地方完全靠运气:(

我们来简化一下这个游戏的规则

有n次点击要做,成功了就是o,失败了就是x,分数是按comb计算的,连续a个comb就有a*a分,comb就是极大的连续o。

比如ooxxxxooooxxx,分数就是2×2+4×4=4+16=20。

Sevenkplus闲的慌就看他打了一盘,有些地方跟运气无关要么是o要么是x,有些地方o或者x各有50%的可能性,用?号来表示。

比如oo?xx就是一个可能的输入。

那么WJMZBMR这场osu的期望得分是多少呢?

比如oo?xx的话,?是o的话就是oooxx => 9,是x的话就是ooxxx => 4

期望自然就是(4+9)/2 =6.5了

INPUT

第一行一个整数n,表示点击的个数

接下来一个字符串,每个字符都是ox?中的一个

OUTPUT

一行一个浮点数表示答案

四舍五入到小数点后4位

如果害怕精度跪建议用long double或者extended

SAMPLE

INPUT

4

????

OUTPUT

4.1250

n<=300000

osu很好玩的哦

WJMZBMR技术还行(雾),x基本上很少呢

解题报告

话说最后那句话真是interesting呢= =

其实跟上面那道题一样,只是把概率给出的方式变得委(zhi)婉(zhang)了

显然,o的概率为1,x的概率为0,?的概率为0.5

然后?

然后就变成了上面那道题的二次方版,但要注意递推的时候的某些细节

 1 #include<iostream>
 2 #include<cstring>
 3 #include<cstdio>
 4 using namespace std;
 5 double f[300001],s[300001];
 6 int n;
 7 char op[300005];
 8 double x;
 9 int main(){
10     scanf("%d%s",&n,op+1);
11     for(int i=1;i<=n;i++){
12         if(op[i]==‘o‘)
13             x=1.0;
14         if(op[i]==‘?‘)
15             x=0.5;
16         if(op[i]==‘x‘)
17             x=0.0;
18         f[i]=(f[i-1]+1)*x;
19         s[i]=s[i-1]+(f[i-1]*2+1)*x;//cout<<i<<‘ ‘<<f[i]<<‘ ‘<<s[i]<<endl;
20     }
21     printf("%.4f",s[n]);
22 }

话说OSU到底是什么啊= =

还有,我最近好像一直在做水题啊,这样下去不就只能在欢声笑语中打出GG了么= =(水题骑脸怎么输)

时间: 2024-12-17 02:37:00

[补档]两个奇怪的大水题的相关文章

[补档]各种奇怪的韩信问题

这是两道奇怪的韩信问题 韩信点兵&丧心病狂的韩信大点兵 T1 [COGS 1786]韩信点兵 题目 韩信是中国军事思想"谋战"派代表人物,被后人奉为"兵仙"."战神"."王侯将相"韩信一人全任."国士无双"."功高无二,略不世出"是楚汉之时人们对其的评价.作为统帅,他率军出陈仓.定三秦.擒魏.破代.灭赵.降燕.伐齐,直至垓下全歼楚军,无一败绩,天下莫敢与之相争. 相传,韩信带兵打

大水题(water)

题目描述dzy 定义一个 $n^2$ 位的数的生成矩阵 $A$ 为一个大小为 $n \times n$ 且 Aij 为这个数的第 $i \times n+j-n$ 位的矩阵.现在 dzy 有一个数 $n^2$ 位的数 k,他想知道所有小于等于 k 的数的 $n \times n$ 生成矩阵有多少种.(如果不足 $n^2$ 位则补前缀零)输入输出格式输入格式第一行一个数 $n$,第二行一个 $n^2$ 位的数 $k$输出格式仅一行表示答案,答案可能很大,你只需输出答案对 $10^9 + 7$ 取模

Pythagorean Triples CodeForces - 707C 推理题,大水题

给定一个数n(1 <= n <= 1e9),判断这个数是否是一个直角三角形的边长,如果是,则输出另外两条边(1 <= x <= 1e18),否则输出-1. 参考题解:http://blog.csdn.net/harlow_cheng/article/details/69055614 首先,当n <= 2 的时候无解,其他时候都有解 假设n是直角边,a是斜边,则n^2 + b^2 = a^2; n^2 = (a + b)*(a - b); ①假设n是偶数,则另(a - b) =

BZOJ_1621_[Usaco2008_Open]_Roads_Around_The_Farm_分岔路口(模拟+大水题)

描述 http://www.lydsy.com/JudgeOnline/problem.php?id=1621\(n\)头奶牛,刚开始在一起,每次分成\(x\)和\(x+m\)两部分,直到不能再分,问最后一共有几部分. 分析 可以知道当前奶牛数\(n=x+x+m\),所以可以继续分的必要条件是\(n-m>=2\),然后dfs就好了... 对于大数据,\(m=1000\)和\(m=1\)并没有什么区别,所以可以认为搜索时候一直是二分的,所以有\(log_2^n\)层,最下面一层有\(2^{log_

PAT甲题题解-1101. Quick Sort (25)-大水题

快速排序有一个特点,就是在排序过程中,我们会从序列找一个pivot,它前面的都小于它,它后面的都大于它.题目给你n个数的序列,让你找出适合这个序列的pivot有多少个并且输出来. 大水题,正循环和倒着循环一次,统计出代码中的minnum和maxnum即可,注意最后一定要输出'\n',不然第三个测试会显示PE,格式错误. #include <iostream> #include <cstdio> #include <algorithm> #include <map&

UVA12709 Falling Ants(超级大水题)

转载请注明出处:http://blog.csdn.net/u012860063 题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=4447 Ps:此题超级水,但是光看题目就会被吓一跳.确实题目很长,不过有用的语句少之又少,介绍一大堆与AC没有半毛钱关系的东西,汗颜. 此题告诉我们题目长不一定是最难得题,反而有时候是最简单的题,就看你有

UVA 100 The 3n + 1 problem(超级大水题)

The 3n + 1 problem Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Description Problems in Computer Science are often classified as belonging to a certain class of problems (e.g., NP, Unsolvable, Recursive). In this problem you

两个奇怪的取地址符号

function Fun(x: Integer): Integer; asm   mov ecx, &x   dec ecx          {汇编中的 dec 是减 1 指令, 和 Delphi 是一样的}   mov @Result, ecx  {在本例中去掉 @ 也可以, 暂时不知怎么回事} end; 去掉两个符号,对结果没有任何影响:function Fun(x: Integer): Integer; asm   mov ecx, x   dec ecx          {汇编中的

第三届山西省赛1004 一道大水题(scanf)

一道大水题 时间限制: C/C++ 2000ms; Java 4000ms 内存限制: 65535KB 通过次数: 44 总提交次数: 1020 问题描述 Dr. Pan作为上兰帝国ACM的总负责人,对队员的队员的训练也是日常关心,他要求每周要有一位队员出一道题目.不知过了多少年,终于轮到Shiyiliang出题了,他费尽脑汁,终于出了一道大水题 给定一个偶数n,n的取值范围为[-1e18,1e18],要求一对整数x,y满足以下条件: 1.x*y==n 2.x与n必须同号,即如果n>0则x>0