Written with StackEdit.

\(noip\)爆炸后就好久没考试了...结果今天又被抓去,感觉很慌啊...

  • 考完了.过来填坑.

T1

Description

使得\(x^x\)达到或超过\(n\)位数字的最小正整数\(x\)是多少?

Input

输入一个正整数\(n(n<=2*10^9)\)。

Output

输出使得\(x^x\)达到\(n\)位数字的最小正整数\(x\)。

Sample Input

11

Sample Output

10

Solution

  • \(x^x\geq 10^{n-1}\).对\(10\)去取对数,等价于\(xlog_{10}x\geq n-1.\)
  • 二分\(x\),用\(cmath\)库自带的\(log10\)函数检验即可.
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. inline int read()
  4. {
  5. int out=0,sgn=1;
  6. char jp=getchar();
  7. while(jp!='-' && (jp>'9' || jp<'0'))
  8. jp=getchar();
  9. if(jp=='-')
  10. jp=getchar(),sgn=-1;
  11. while(jp>='0' && jp<='9')
  12. out=out*10+(jp-'0'),jp=getchar();
  13. return out*sgn;
  14. }
  15. using namespace std;
  16. long long fpow(int a,int b)
  17. {
  18. long long s=1;
  19. while(b)
  20. {
  21. if(b&1)
  22. s*=a;
  23. a*=a;
  24. b>>=1;
  25. }
  26. return s;
  27. }
  28. double count(long long x)
  29. {
  30. double y=x*1.0;
  31. return y*log10(y);
  32. }
  33. int main()
  34. {
  35. freopen("xx.in","r",stdin);
  36. freopen("xx.out","w",stdout);
  37. int n=read();
  38. double x=(n-1)*1.0;
  39. long long L=1,R=1000000000000000000;
  40. long long ans=R+1;
  41. while(L<=R)
  42. {
  43. long long mid=(L+R)>>1;
  44. if(count(mid)>=x)
  45. R=mid-1,ans=min(ans,mid);
  46. else
  47. L=mid+1;
  48. }
  49. cout<<ans<<endl;
  50. return 0;
  51. }

T2

Description

和所有人一样,奶牛喜欢变化。它们正在设想新造型的牧场。奶牛建筑师\(Hei\)想建造围有漂亮白色栅栏的三角形牧场。她拥有\(N(3≤N≤40)\)块木板,每块的长度\(L_i(1≤L_i≤40\))都是整数,她想用所有的木板围成一个三角形使得牧场面积最大。

请帮助\(Hei\)小姐构造这样的牧场,并计算出这个最大牧场的面积。

Input

第\(1\)行:一个整数\(N.\)

第\(2..N+1\)行:每行包含一个整数,即是木板长度。

Output

仅一个整数:最大牧场面积乘以\(100\)然后舍尾的结果。如果无法构建,输出\(-1\)。

Sample Input

5 1 1 3 3 4

Sample Output

692

HINT

\(692=\)舍尾后的(\(100×\)三角形面积),此三角形为等边三角形,边长为\(4\)。

Solution

  • 考场上做不出来...怒水了一发\(dfs\),居然有\(70pts.\)

  • 将所有的木板当作背包,木板的长度作为背包的重量。与普通背包问题不同的是,这里有两个背包。所以,我们要求的不是重量\(w\)是否能得到,而是一个重量二元组\((w0, w1)\)是否能得到。求解的方法与普通背包问题基本相同,只不过状态是二维的。

  • 求得所有可以得到的二元组后,枚举所有的二元组。对于任意的\((w_0, w_1),w_0, w_1,w—w_0—w_1(w\)表示所有背包的总重量)即是对应的三角形三边之长(可能是非法三角形)。这些三角形中面积最大者就是我们所求的答案。

  1. #include<iostream>
  2. #include<cmath>
  3. #include<cstdio>
  4. using namespace std;
  5. int main()
  6. {
  7. freopen("pasture.in" , "r", stdin );
  8. freopen("pasture.out", "w", stdout);
  9. bool f[841][841]= {0};
  10. int n,b[40],i,j,s=0,k;
  11. double m=0,p,t;
  12. cin>>n;
  13. for(i=0; i<n; i++)
  14. {
  15. cin>>b[i];
  16. s+=b[i];
  17. }
  18. f[0][0]=true;
  19. for(k=0; k<n; k++)
  20. for(i=s/2; i>=0; i--)
  21. for(j=i; j>=0; j--)
  22. if(f[i][j])
  23. {
  24. f[i][j+b[k]]=true;
  25. f[i+b[k]][j]=true;
  26. }
  27. p=s/2.0;
  28. for(i=1; i<p; i++)
  29. for(j=1; j<=i; j++)
  30. if(f[i][j]==true&&((i+j)>(s-i-j))&&((i-j)<(s-i-j)))
  31. {
  32. t=p*(p-i)*(p-j)*(p-(s-i-j));
  33. if(m<t) m=t;
  34. }
  35. if(m<=0)cout<<"-1"<<endl;
  36. else cout<<int(sqrt(m)*100)<<endl;
  37. return 0;
  38. }

T3

【问题描述】

小\(N\)最近学习了位运算,她发现\(2\)个数\(xor\)之后数的大小可能变大也可能变小,\(and\)之后都不会变大,\(or\)之后不会变小。于是她想算出以下的期望值:现在有 \(N\)个数排成一排,如果她随意选择一对\(l,r\)并将下标在\(l\)和\(r\)中间(包括\(l,r\))的数\((xor,and,or)\)之后,期望得到的值是多少呢?取出每一对\(l,r\) 的概率都是相等的。(\(l>r\)也被视作有意义).

Input

第一行\(1\)个正整数\(N\)。

第二行\(N\)个非负整数代表数列.

Output

一行\(3\)个数,分别表示\(xor\)的期望,\(and\)的期望,\(or\)的期望,保留\(3\)位小数。

Sample Input

2

4 5

Sample Output

2.750 4.250 4.750

HINT

\(30\%\)数据中\(1<=N<=1000.\)

对于另外的\(30\%\)数据数列中只包含\(0\)和\(1\).

对于\(100\%\)的数据\(1<=N<=100000\),数列中的数 \(\leq 10^9.\)

Solution

  • 可以先求出每个的区间的\((xor,and,or)\)总和,再除以区间总数.
  • 显然,每一位可以分开计算.下面以\(xor\)为例.
  • 考虑对于每一位,有若干个\(0/1\),只用考虑贡献为\(1\)的区间,显然这样的区间内有奇数个\(1\).
  • 令\(f[i][0/1]\)为区间右端点为\(i\),区间内有偶数/奇数个\(1\)的区间数目.这里只考虑\(l\leq r\),最终答案可以通过简单操作得到.
  • \(and,or\)的计算方法类似,适当修改一下\(0/1\)这一位的定义就可以了.
  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. #define rg register
  4. #define il inline
  5. inline int read()
  6. {
  7. int out=0,sgn=1;
  8. char jp=getchar();
  9. while(jp!='-' && (jp>'9' || jp<'0'))
  10. jp=getchar();
  11. if(jp=='-')
  12. jp=getchar(),sgn=-1;
  13. while(jp>='0' && jp<='9')
  14. out=out*10+(jp-'0'),jp=getchar();
  15. return out*sgn;
  16. }
  17. const int MAXN=1e5+10;
  18. int a[MAXN];
  19. int x[MAXN][40];
  20. long long f[MAXN][2];
  21. int n,lim=0;
  22. long long tot=0;
  23. double xor1=0,and1=0,or1=0;
  24. long long xor2=0,and2=0,or2=0;
  25. il void dp_xor(int j)
  26. {
  27. f[0][0]=0,f[0][1]=0;
  28. long long res=0;
  29. for(rg int i=1;i<=n;++i)
  30. {
  31. #define val x[i][j]
  32. if(val)
  33. {
  34. f[i][0]=f[i-1][1];
  35. f[i][1]=f[i-1][0]+1;
  36. }
  37. else
  38. {
  39. f[i][0]=f[i-1][0]+1;
  40. f[i][1]=f[i-1][1];
  41. }
  42. res+=f[i][1];
  43. }
  44. xor2+=res<<j;
  45. }
  46. il void dp_and(int j)
  47. {
  48. f[0][1]=0;
  49. long long res=0;
  50. for(rg int i=1;i<=n;++i)
  51. {
  52. #define val x[i][j]
  53. if(val)
  54. f[i][1]=f[i-1][1]+1;
  55. else
  56. f[i][1]=0;
  57. res+=f[i][1];
  58. }
  59. and2+=res<<j;
  60. }
  61. il void dp_or(int j)
  62. {
  63. f[0][0]=f[0][1]=0;
  64. long long res=0;
  65. for(rg int i=1;i<=n;++i)
  66. {
  67. #define val x[i][j]
  68. if(val)
  69. {
  70. f[i][0]=0;
  71. f[i][1]=f[i-1][0]+f[i-1][1]+1;
  72. }
  73. else
  74. {
  75. f[i][0]=f[i-1][0]+1;
  76. f[i][1]=f[i-1][1];
  77. }
  78. res+=f[i][1];
  79. }
  80. or2+=res<<j;
  81. }
  82. void solve_xor()
  83. {
  84. for(rg int i=0;i<=lim;++i)
  85. dp_xor(i);
  86. xor2<<=1;
  87. for(rg int i=1;i<=n;++i)
  88. xor2-=1LL*a[i];
  89. xor1=1.0*xor2/(1.0*n*n);
  90. }
  91. void solve_and()
  92. {
  93. for(rg int i=0;i<=lim;++i)
  94. dp_and(i);
  95. and2<<=1;
  96. and2-=tot;
  97. and1=1.0*and2/(1.0*n*n);
  98. }
  99. void solve_or()
  100. {
  101. for(rg int i=0;i<=lim;++i)
  102. dp_or(i);
  103. or2<<=1;
  104. or2-=tot;
  105. or1=1.0*or2/(1.0*n*n);
  106. }
  107. int main()
  108. {
  109. freopen("nine.in","r",stdin);
  110. freopen("nine.out","w",stdout);
  111. n=read();
  112. for(rg int i=1;i<=n;++i)
  113. {
  114. a[i]=read();
  115. tot+=1LL*a[i];
  116. int k=a[i];
  117. int j=-1;
  118. while(k)
  119. {
  120. ++j;
  121. x[i][j]=k&1;
  122. k>>=1;
  123. }
  124. lim=max(lim,j);
  125. }
  126. if(lim<0)
  127. {
  128. puts("0.000 0.000 0.000");
  129. return 0;
  130. }
  131. // cerr<<lim<<endl;
  132. solve_xor();
  133. solve_and();
  134. solve_or();
  135. printf("%.3lf %.3lf %.3lf\n",xor1,and1,or1);
  136. //cout<<xor2<<' '<<and2<<' '<<or2<<' '<<endl;
  137. return 0;
  138. }
  139. //2 4 5

test20181219(期末考试)的更多相关文章

  1. 复旦大学2015--2016学年第二学期高等代数II期末考试情况分析

    一.期末考试成绩班级前几名 胡晓波(90).杨彦婷(88).宋卓卿(85).唐指朝(84).陈建兵(83).宋沛颖(82).王昊越(81).白睿(80).韩沅伯(80).王艺楷(80).张漠林(80) ...

  2. 复旦大学2014--2015学年第二学期(14级)高等代数II期末考试第八大题解答

    八.(本题10分)  设 $A,B$ 为 $n$ 阶半正定实对称阵, 求证: $AB$ 可对角化. 分析  证明分成两个步骤: 第一步, 将 $A,B$ 中的某一个简化为合同标准形来考虑问题, 这是矩 ...

  3. 复旦大学2015--2016学年第一学期高等代数I期末考试情况分析

    一.期末考试成绩班级前几名 胡晓波(93).宋沛颖(92).张舒帆(91).姚人天(90).曾奕博(90).杨彦婷(90).白睿(88).唐指朝(87).谢灵尧(87).蔡雪(87) 二.总成绩计算方 ...

  4. 复旦大学2014--2015学年第二学期高等代数II期末考试情况分析

    一.期末考试成绩班级前几名 钱列(100).王华(92).李笑尘(92).金羽佳(91).李卓凡(91).包振航(91).董麒麟(90).张钧瑞(90).陆毕晨(90).刘杰(90).黄成晗(90). ...

  5. 复旦大学2014--2015学年第一学期高等代数I期末考试情况分析

    一.期末考试成绩班级前几名 金羽佳(92).包振航(91).陈品翰(91).孙浩然(90).李卓凡(85).张钧瑞(84).郭昱君(84).董麒麟(84).张诚纯(84).叶瑜(84) 二.总成绩计算 ...

  6. nyoj 757 期末考试【优先队列+贪心】

    期末考试 时间限制:1000 ms  |  内存限制:65535 KB 难度:2   描述 马上就要考试了,小T有许多作业要做,而且每个老师都给出来了作业要交的期限,如果在规定的期限内没 交作业就会扣 ...

  7. 复旦大学2016--2017学年第一学期高等代数I期末考试情况分析

    一.期末考试成绩班级前十名 宁盛臻(100).朱民哲(92).徐钰伦(86).范凌虎(85).沈伊南(84).何陶然(84).丁知愚(83).焦思邈(83).董瀚泽(82).钱信(81) 二.总成绩计 ...

  8. 2012 B 中国近现代史纲要》课程期末考试试卷

    湖南人文科技学院2013年3月公共课 2011级<中国近现代史纲要>课程期末考试试卷B 考核方式:(开卷)                                    考试时量: ...

  9. 2012 A 《中国近现代史纲要》课程期末考试试卷

    湖南人文科技学院2012—2013学年第1学期公共课 2011级<中国近现代史纲要>课程期末考试试卷 考核方式:(开卷)                                   ...

随机推荐

  1. 字符数组(char)和字符串(string)的转换

    #include<iostream>#include<string>using namespace std;void main(){ string LyuS = "W ...

  2. Android LCD

    Android LCD(一):LCD基本原理篇Android LCD(二):LCD常用接口原理篇Android LCD(三):Samsung LCD接口篇Android LCD(四):LCD驱动调试篇

  3. html5 canvas js(数字时钟)

      <!doctype html> <html> <head> <title>canvas dClock</title> </head ...

  4. 对MySQL数据类型的认识

    简述 良好的逻辑设计和物理设计是高性能系统的基石,比如反范式设计可以加快某些类型的查询同时也会影响另外一些类型的查询效率,所以我们必须重视Mysql对于数据库的设计(本文主要讲述表字段类型对于数据库性 ...

  5. Ubuntu系统Anaconda下载安装与切换源教程【转】

    本文转载自:https://blog.csdn.net/qq_36268036/article/details/81517893 1. 下载安装: 这里选用国内清华大学的Tuna开源软件镜像站作为演示 ...

  6. The remote end hung up unexpectedly while git cloning

    https://stackoverflow.com/questions/6842687/the-remote-end-hung-up-unexpectedly-while-git-cloning Qu ...

  7. quartz(4)--quartz.properties文件

    Quartz有一个叫做quartz.properties的配置文件,它允许你修改框架运行时环境.缺省是使用Quartz.jar里面的quartz.properties文件.当然你应该创建一个quart ...

  8. 摘录:Jetty 的工作原理以及与 Tomcat 的比较

    引子:Jetty 应该是目前最活跃也是很有前景的一个 Servlet 引擎.本文将介绍 Jetty 基本架构与基本的工作原理:您将了解到 Jetty 的基本体系结构:Jetty 的启动过程:Jetty ...

  9. css属性(冷用法)

    1.pointer-events:none 元素永远不会成为鼠标事件的target. 2.not-allowed  禁止 3.-webkit-appearance: none; appearance ...

  10. mysql数据库优化课程---12、mysql嵌套和链接查询

    mysql数据库优化课程---12.mysql嵌套和链接查询 一.总结 一句话总结:查询user表中存在的所有班级的信息? in distinct mysql> select * from cl ...