今天挂的有点惨……

T1.forging

这道题自己在考试的时候想出来了……

这题是一个期望递推。我们首先考虑这么一件事,一枚硬币,你抛到正面停止,抛到反面继续抛,问期望抛的次数。是两次。我们假设期望抛x次,因为期望对于后面没有影响,所以有如下方程:

x = 0.5 × 0 + 0.5 × x + 1,x = 2.

那么我们就可以通过当前合成的概率知道合成的期望次数了。然后一次合成我们需要一把i级的武器,我们只需要1把i-2级的武器和期望次数把的i-1级的武器,所以我们就可以这样递推计算,然后结束。

结果一是因为自己智障的在两个0级刀合成的时候忘记取max,加上自己空间开的过大,100变0分可还行。

看下std……自己改完的代码好像丢了……

  1. #include<cmath>
  2. #include<cstdio>
  3. #include<cctype>
  4. #include<algorithm>
  5. using namespace std;
  6. typedef long long ll;
  7. const int p=;
  8. const int N=1e7+;
  9. inline int read(){
  10. int X=,w=;char ch=;
  11. while(!isdigit(ch)){w|=ch=='-';ch=getchar();}
  12. while(isdigit(ch))X=(X<<)+(X<<)+(ch^),ch=getchar();
  13. return w?-X:X;
  14. }
  15. int inv[N],b[N],c[N],f[N];
  16. inline int sub(int x,int y){
  17. x-=y;if(x<)x+=p;return x;
  18. }
  19. int main(){
  20. freopen("forging.in","r",stdin);freopen("forging.out","w",stdout);
  21. inv[]=;
  22. for(int i=;i<N;i++)inv[i]=(ll)(p-p/i)*inv[p%i]%p;
  23.  
  24. int n=read();f[]=read();
  25. int bx=read(),by=read(),cx=read(),cy=read(),mod=read();
  26. b[]=by+;c[]=cy+;
  27. for(int i=;i<n;i++){
  28. b[i]=((ll)b[i-]*bx+by)%mod+;
  29. c[i]=((ll)c[i-]*cx+cy)%mod+;
  30. }
  31. f[]=(ll)((ll)c[]*inv[min(b[],c[])]%p+)*f[]%p;
  32. for(int i=;i<=n;i++)
  33. f[i]=((ll)c[i-]*inv[min(b[i-],c[i-])]%p*f[i-]%p+f[i-])%p;
  34. printf("%d\n",f[n]);
  35. return ;
  36. }

T2.division

这道题当时做的时候没想出来什么……于是好像写了个暴力骗了20。

后来学姐说是CRT……?没大听懂,copy一下题解……

std:

  1. #include <bits/stdc++.h>
  2. #define enter putchar('\n')
  3. #define space putchar(' ')
  4. using namespace std;
  5. template<class T>
  6. void read(T &res)
  7. {
  8. res = ;
  9. char c = getchar();
  10. T f = ;
  11. while(c < '' || c > '')
  12. {
  13. if(c == '-') f = -;
  14. c = getchar();
  15. }
  16. while(c >= '' && c <= '')
  17. {
  18. res = res * + c - '';
  19. c = getchar();
  20. }
  21. res *= f;
  22. }
  23. template<class T>
  24. void out(T x)
  25. {
  26. if(x < )
  27. {
  28. putchar('-');
  29. x = -x;
  30. }
  31. if(x >= )
  32. {
  33. out(x / );
  34. }
  35. putchar('' + x % );
  36. }
  37. int id;
  38. int a[],tot,prime[];
  39. bool nonprime[];
  40. int mul(int a,int b,int MOD)
  41. {
  42. return 1LL * a * b % MOD;
  43. }
  44. int fpow(int x,int c,int MOD)
  45. {
  46. int res = ,t = x;
  47. while(c)
  48. {
  49. if(c & ) res = res * t % MOD;
  50. t = t * t % MOD;
  51. c >>= ;
  52. }
  53. return res;
  54. }
  55. int Calc(int p,int m)
  56. {
  57. memset(nonprime,,sizeof(nonprime));
  58. tot = ;
  59. a[] = ;
  60. a[p] = ;
  61. for(int i = ; i < p ; ++i)
  62. {
  63. if(!nonprime[i])
  64. {
  65. a[i] = fpow(i,m,p);
  66. prime[++tot] = i;
  67. }
  68. for(int j = ; j <= tot ; ++j)
  69. {
  70. if(i * prime[j] > ) break;
  71. a[i * prime[j]] = a[i] * a[prime[j]] % p;
  72. nonprime[i * prime[j]] = ;
  73. if(i % prime[j] == ) break;
  74. }
  75. }
  76. int res = ;
  77. for(int i = ; i <= p ; ++i)
  78. {
  79. int t = a[i] - i + p;
  80. if(t >= p) t -= p;
  81. res += (t == );
  82. }
  83. return res;
  84. }
  85. void Solve()
  86. {
  87. int ans = ;
  88. int c,m;
  89. read(c);
  90. read(m);
  91. int p = ;
  92. for(int i = ; i <= c ; ++i)
  93. {
  94. read(p);
  95. ans = mul(ans,Calc(p,m),);
  96. }
  97. out(ans);
  98. enter;
  99. }
  100. int main()
  101. {
  102. freopen("division.in","r",stdin);
  103. freopen("division.out","w",stdout);
  104. read(id);
  105. int T;
  106. read(T);
  107. while(T--) Solve();
  108. }

T3.money

这道题仍然是不会的状态……考试的时候骗到了10分。

正解是用倍增求出链上最小值,然后合并的时候启发式合并,用倍增记一下边的方向(???)

表示还是不懂……看一下std吧orz

  1. #include <cstdio>
  2. #include <cmath>
  3. #include <cstring>
  4. #include <algorithm>
  5. #include <iostream>
  6. #include <cassert>
  7. #define space putchar(' ')
  8. #define enter putchar('\n')
  9. typedef long long ll;
  10. using namespace std;
  11. template <class T>
  12. void read(T &x){
  13. char c;
  14. bool op = ;
  15. while(c = getchar(), c < '' || c > '')
  16. if(c == '-') op = ;
  17. x = c - '';
  18. while(c = getchar(), c >= '' && c <= '')
  19. x = x * + c - '';
  20. if(op) x = -x;
  21. }
  22. template <class T>
  23. void write(T x){
  24. if(x < ) putchar('-'), x = -x;
  25. if(x >= ) write(x / );
  26. putchar('' + x % );
  27. }
  28.  
  29. const int N = , INF = 0x3f3f3f3f;
  30. int n, m, lastans;
  31. int ecnt, nxt[*N], go[*N], adj[N], edir[*N], emi[*N];
  32. int sze[N], bel[N], dep[N];
  33. int anc[N][], mi[N][], dir[N][];
  34.  
  35. void out(){
  36. for(int i = ; i <= n; i++)
  37. for(int j = ; anc[i][j]; j++)
  38. printf("anc[%d][%d] = %d, dir = %d, mi = %d\n", i, j, anc[i][j], dir[i][j], mi[i][j]);
  39. }
  40.  
  41. void adde(int u, int v, int d, int w){
  42. go[++ecnt] = v;
  43. nxt[ecnt] = adj[u];
  44. adj[u] = ecnt;
  45. edir[ecnt] = d;
  46. emi[ecnt] = w;
  47. }
  48. void dfs(int u, int pre, int rt){
  49. bel[u] = rt;
  50. dep[u] = dep[pre] + ;
  51. for(int i = ; i < ; i++){
  52. anc[u][i + ] = anc[anc[u][i]][i];
  53. mi[u][i + ] = min(mi[u][i], mi[anc[u][i]][i]);
  54. dir[u][i + ] = dir[u][i] | dir[anc[u][i]][i];
  55. }
  56. for(int e = adj[u], v; e; e = nxt[e])
  57. if((v = go[e]) != pre){
  58. anc[v][] = u;
  59. mi[v][] = emi[e];
  60. dir[v][] = edir[e] ^ ;
  61. dfs(v, u, rt);
  62. }
  63. }
  64. void add(int u, int v, int w){
  65. adde(u, v, , w);
  66. adde(v, u, , w);
  67. int d = sze[bel[u]] > sze[bel[v]] ? : ;
  68. if(d == ) swap(u, v);
  69. anc[u][] = v, mi[u][] = w, dir[u][] = d;
  70. sze[bel[v]] += sze[bel[u]];
  71. dfs(u, v, bel[v]);
  72. }
  73. int query(int u, int v){
  74. if(bel[u] != bel[v]) return ;
  75. int d = , ret = INF;
  76. if(dep[u] > dep[v])
  77. swap(u, v), d = ;
  78. for(int i = ; i >= ; i--)
  79. if(dep[v] - ( << i) >= dep[u]){
  80. if(dir[v][i] != ( ^ d)) return ;
  81. ret = min(ret, mi[v][i]);
  82. v = anc[v][i];
  83. }
  84. if(u == v) return ret;
  85. for(int i = ; i >= ; i--)
  86. if(anc[u][i] != anc[v][i]){
  87. if(dir[v][i] != ( ^ d) || dir[u][i] != ( ^ d)) return ;
  88. ret = min(ret, min(mi[v][i], mi[u][i]));
  89. u = anc[u][i];
  90. v = anc[v][i];
  91. }
  92. if(dir[v][] != ( ^ d) || dir[u][] != ( ^ d)) return ;
  93. ret = min(ret, min(mi[v][], mi[u][]));
  94. return ret;
  95. }
  96.  
  97. int main(){
  98. freopen("money.in", "r", stdin);
  99. freopen("money.out", "w", stdout);
  100. read(n), read(m);
  101. for(int i = ; i <= n; i++)
  102. bel[i] = i, sze[i] = ;
  103. int op, a, b, c;
  104. while(m--){
  105. read(op), read(a), read(b);
  106. a = (a + lastans) % n + ;
  107. b = (b + lastans) % n + ;
  108. if(op == ) read(c), c = (c + lastans) % n + , add(a, b, c);
  109. else write(lastans = query(a, b)), enter;
  110. }
  111.  
  112. return ;
  113. }

2018.09.09 DL24 Day2总结的更多相关文章

  1. Trusted Block Chain Summit(2018.10.09)

    时间:2018.10.09地点:北京金隅喜来登大酒店

  2. c#用正则表达式判断字符串是否全是数字、小数点、正负号组成 Regex reg = new Regex(@"^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$");

    Regex reg = new Regex(@"^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][ ...

  3. 2018.09.08 DL24 Day1 总结

    补一下之前的总结…… T1.restaurant 这道题还是很简单的嘛,子恒dalao非常良心.我们把招牌菜和所需要的菜品绑定在一起就成了完全背包,然后直接跑一遍完全背包即可. #include< ...

  4. 1.用代码演示String类中的以下方法的用法 (2018.08.09作业)

    public class Test_001 { public static void main(String[] args) { String a = "德玛西亚!"; Strin ...

  5. 【2018.05.09 Python学习及实践】个人项目中使用的Python库备忘-持续更新

    科研中无论是使用C/C++.Python.Matlab,如果能找到合适的库可谓是事半功倍: 有时候忙活半天才发现本身就有成熟的库可用,自己实现的在功能.性能.安全性上都远远不及,虽然锻炼了能力,但存在 ...

  6. 2018.11.09 洛谷P1110 [ZJOI2007]报表统计(multiset)

    传送门 sb题. 直接用两个multisetmultisetmultiset维护相邻两个数的差值和所有数的前驱后继. 插入一个数的时候更新一下就行了. 代码: #include<bits/std ...

  7. 2018.11.09 codeforces487E. Tourists(tarjan+树链剖分)

    传送门 先把边双连通分量用圆方树一样的方法缩点,然后把新建的树树剖维护. 注意对于边双连通分量需要维护动态最小值,可以用multisetmultisetmultiset. 代码: #include&l ...

  8. 2018.11.09 bzoj4773: 负环(倍增+floyd)

    传送门 跟上一道题差不多. 考虑如果环上点的个数跟最短路长度有单调性那么可以直接上倍增+floyd. 然而并没有什么单调性. 于是我们最开始给每个点初始化一个长度为0的自环,于是就有单调性了. 代码: ...

  9. 2018.11.09 bzoj2165: 大楼(倍增+floyd)

    传送门 先倍增出iii使得2i2^i2i时间时刚好有每个点能够到mmm层及以上. 然后就可以用floyd+floyd+floyd+倍增求出刚好不超过mmm层的时间,最后再补一层就行了. 代码: #pr ...

随机推荐

  1. MySQL-----查

    数据库在我眼中就是增删改查,而查,我觉得是数据库最费劲的,数据库的花式查,各种查.下面咱们不废话,就是干. 查: **查数据库版本** select version(); **查登录用户** sele ...

  2. Ubuntu中Python3虚拟环境的搭建

    1.环境准备 首先请自行安装好Python3和pip3(一般Ubuntu是自带Python3的,可以通过sudo apt-get install python3-pip命令来安装pip3) 安装完成后 ...

  3. uva 1592 Database (STL)

    题意: 给出n行m列共n*m个字符串,问有没有在不同行r1,r2,有不同列c1,c2相同.即(r1,c1) = (r2,c1);(r1,c2) = (r2,c2); 如 2 3 123,456,789 ...

  4. STM32F407 正点原子 资料网址记录

    网络资源 资源下载: http://www.openedv.com/thread-13912-1-1.html (注意下载资料的版本!非常推荐腾讯视频,因为可以在线免费倍速播放.课件ppt可以单独下载 ...

  5. jQuery_计算器实例

    知识点: fadeIn()---计算器界面载入淡入效果 hover()---鼠标移入移出某个元素时触发的事件 click()---鼠标单击事件 css()---对元素样式的操作 val()---获取表 ...

  6. 怎样签发SSL证书

    最近在做怎样让网站有SSL,搞了一天,现在总结一下 首先要安装OPENSSL和 Java的 keytool 先用OPENSSL生成私钥和CSR openssl req -newkey rsa:2048 ...

  7. T1003 电话连线 codevs

    http://codevs.cn/problem/1003/ 时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题目描述 Description 一个国家有n个城市 ...

  8. JVM(三):深入分析Java字节码-上

    JVM(三):深入分析Java字节码-上 字节码文章分为上下两篇,上篇也就是本文主要讲述class文件存在的意义,以及其带来的益处.并分析其内在构成之一 ---字节码,而下篇则从指令集方面着手,讲解指 ...

  9. operamasks—omMessageBox的使用

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="test.aspx.cs&q ...

  10. react 服务器端渲染 ssr 中 localstorage/history/window is not defined 解决方案

    1.原因 ssr 会在后端执行组件的 componentWillMount 以及在它这个生命周期之前的生命周期 也就是说 ssr 阶段是不会执行 componentDidMount 方法的 当你在 c ...