1. /*
  2. 我是一个大sb
  3. */
  4. #include<iostream>
  5. #include<cstdio>
  6. #include<cstring>
  7. #include<queue>
  8. #include<algorithm>
  9.  
  10. #define ll long long
  11. #define N 10000007
  12. #define mod 1000000000
  13.  
  14. using namespace std;
  15. ll n,m,k,x,y,flag,ans,cnt;
  16. ll a[N],cur[N];
  17. priority_queue<ll>q;
  18.  
  19. inline ll read()
  20. {
  21. ll x=,f=;char c=getchar();
  22. while(c>''||c<''){if(c=='-')f=-;c=getchar();}
  23. while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
  24. return x*f;
  25. }
  26.  
  27. int main()
  28. {
  29. freopen("shop.in","r",stdin);
  30. freopen("shop.out","w",stdout);
  31. n=read();m=read();
  32. x=read();y=read();
  33. a[]=x;q.push(-a[]);
  34. for(int i=;i<=n;i++)
  35. {
  36. a[i]=(y*a[i-]+x)%mod;
  37. q.push(-a[i]);
  38. if(a[i]==){k=i;break;}
  39. }
  40. if(!k)
  41. {
  42. for(int i=;i<=m;i++)
  43. {
  44. ll res=q.top();q.pop();
  45. ans-=res;
  46. }
  47. cout<<ans<<endl;
  48. return ;
  49. }
  50. int t=n/k,tt=n-t*k;a[t*k+]=x;cur[++cnt]=x;
  51. for(int i=;i<=tt;i++)
  52. {
  53. a[i+t*k]=(y*a[i+t*k-]+x)%mod;
  54. cur[++cnt]=a[i];
  55. }
  56. sort(cur+,cur+tt+);
  57. if(m<=t) ans=;
  58. else
  59. {
  60. while(!q.empty() && m)
  61. {
  62. int x=q.top();q.pop();x=-x;
  63. if(x<cur[] || x>cur[tt])
  64. {
  65. m-=t;ans+=x*t;
  66. }
  67. if(x>=cur[] && x<=cur[tt])
  68. {
  69. m-=(t+);ans+=x*(t+);
  70. }
  71. }
  72. }
  73. cout<<ans<<endl;
  74. fclose(stdin);fclose(stdout);
  75. return ;
  76. }

50找循环节。。。

  1. /*
  2. 优先队列
  3. */
  4. #include<complex>
  5. #include<cstdio>
  6. #include<queue>
  7. using namespace std;
  8. const int mod=1e9;
  9. long long n,m,x,y,ans;
  10. priority_queue<int>q;
  11. int main()
  12. {
  13. freopen("shop.in","r",stdin);
  14. freopen("shop.out","w",stdout);
  15. scanf("%d%d%d%d",&n,&m,&x,&y);
  16. long long now=x;
  17. q.push(now);
  18. for(int i=;i<=n;i++)
  19. {
  20. now=(now*y+x)%mod;
  21. if(i<=m)q.push(now);
  22. else if(now<q.top())
  23. {
  24. q.pop();
  25. q.push(now);
  26. }
  27. }
  28. while(!q.empty())
  29. {
  30. ans+=q.top();
  31. q.pop();
  32. }
  33. printf("%I64d\n",ans);
  34. fclose(stdin);fclose(stdout);
  35. return ;
  36. }

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4.  
  5. #define N 100007
  6.  
  7. using namespace std;
  8. int n,m,k,cnt;
  9. int a[N],b[N];
  10. double c[N],ans;
  11.  
  12. inline int read()
  13. {
  14. int x=,f=;char c=getchar();
  15. while(c>''||c<''){if(c=='-')f=-;c=getchar();}
  16. while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
  17. return x*f;
  18. }
  19.  
  20. void dfs(int now,int sum,double p)
  21. {
  22. if(now==n+)
  23. {
  24. ans+=double(sum)*p;
  25. return;
  26. }
  27. if(a[now]==)
  28. {
  29. dfs(now+,sum & b[now],p*(1.000-c[now]));
  30. dfs(now+,sum,p*c[now]);
  31. }
  32. if(a[now]==)
  33. {
  34. dfs(now+,sum | b[now],p*(1.000-c[now]));
  35. dfs(now+,sum,p*c[now]);
  36. }
  37. if(a[now]==)
  38. {
  39. dfs(now+,sum ^ b[now],p*(1.000-c[now]));
  40. dfs(now+,sum,p*c[now]);
  41. }
  42. }
  43.  
  44. int main()
  45. {
  46. // freopen("exp.in","r",stdin);
  47. // freopen("exp.out","w",stdout);
  48. n=read();
  49. for(int i=;i<=n;i++) a[i]=read();
  50. for(int i=;i<=n;i++) b[i]=read();
  51. for(int i=;i<=n;i++) scanf("%lf",&c[i]);
  52. ans=;dfs(,,);
  53. printf("%.1lf\n",ans);
  54. fclose(stdin);fclose(stdout);
  55. return ;
  56. }

40暴力

  1. /*
  2. 把每一位拆开单独考虑
  3. f[i][0/1]表示到第i个运算,该位为0/1的概率
  4. 对于每一个运算符分情况讨论
  5. ans = sum[ f[n][1] * (1 << k) ]
  6. */
  7. #include<bits/stdc++.h>
  8.  
  9. #define N 100007
  10.  
  11. using namespace std;
  12. int n,a[N],b[N];
  13. double c[N], f[N][];
  14.  
  15. inline int read()
  16. {
  17. int x=,f=;char c=getchar();
  18. while(c>''||c<''){if(c=='-')f=-;c=getchar();}
  19. while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
  20. return x*f;
  21. }
  22.  
  23. double solve(int bit)
  24. {
  25. f[][]=1.00;
  26. for(int i=;i<=n;i++)
  27. {
  28. int x = b[i] >> bit & ;
  29. if(a[i]==)
  30. {
  31. if(x==) f[i][]=(f[i-][] + f[i-][]) * ( - c[i]) + f[i-][] * c[i],
  32. f[i][]=f[i-][] * c[i];
  33. else f[i][]=f[i-][],
  34. f[i][]=f[i-][];
  35. }
  36.  
  37. if(a[i]==)
  38. {
  39. if(x==) f[i][]=f[i-][],
  40. f[i][]=f[i-][];
  41. else f[i][]=f[i-][] * c[i],
  42. f[i][]=(f[i-][] + f[i-][]) * ( - c[i]) + f[i-][] * c[i];
  43. }
  44.  
  45. if(a[i] == )
  46. {
  47. if(x==) f[i][]=f[i-][],
  48. f[i][]=f[i-][];
  49. else f[i][]=f[i-][] * ( - c[i]) + f[i-][] * c[i],
  50. f[i][]=f[i-][] * ( - c[i]) + f[i-][] * c[i];
  51. }
  52. }
  53. return f[n][];
  54. }
  55. int main()
  56. {
  57. freopen("exp.in", "r", stdin);
  58. freopen("exp.out", "w", stdout);
  59. cin>>n;
  60. for(int i = ;i<=n;i++) cin>>a[i];
  61. for(int i = ;i<=n;i++) cin>>b[i];
  62. for(int i = ;i<=n;i++) scanf("%lf",&c[i]);
  63. double ans = ;
  64. for(int i = ;i>=;i--) ans+=(double)(1ll << i) * solve(i);
  65. printf("%.1lf",ans);
  66. return ;
  67. }

、、

  1. #include<bits/stdc++.h>
  2.  
  3. #define N 50001
  4.  
  5. using namespace std;
  6. int n,m,T,ans,cnt,res,num;
  7. int head[N],deep[N],sum[N];
  8. int f[N][],tmp1[N],tmp2[N];
  9. struct edge{
  10. int u,v,w,net;
  11. }e[N<<];
  12.  
  13. inline int read()
  14. {
  15. int x=,f=;char c=getchar();
  16. while(c>''||c<''){if(c=='-')f=-;c=getchar();}
  17. while(c>=''&&c<=''){x=x*+c-'';c=getchar();}
  18. return x*f;
  19. }
  20.  
  21. inline void add(int u,int v,int w)
  22. {
  23. e[++cnt].v=v;e[cnt].w=w;e[cnt].net=head[u];head[u]=cnt;
  24. }
  25.  
  26. void dfs(int u,int fa,int c)
  27. {
  28. f[u][]=fa;deep[u]=c;
  29. for(int i=head[u];i;i=e[i].net)
  30. {
  31. int v=e[i].v;
  32. if(v==fa) continue;
  33. sum[v]+=e[i].w+sum[u];
  34. dfs(v,u,c+);
  35. }
  36. }
  37.  
  38. void get()
  39. {
  40. for(int j=;j<=;j++) for(int i=;i<=n;i++)
  41. f[i][j]=f[f[i][j-]][j-];
  42. }
  43.  
  44. int lca(int a,int b)
  45. {
  46. if(deep[a]<deep[b]) swap(a,b);
  47. int t=deep[a]-deep[b];
  48. for(int i=;i<=;i++)
  49. if(t&(<<i)) a=f[a][i];
  50. if(a==b) return a;
  51. for(int i=;i>=;i--)
  52. {
  53. if(f[a][i]!=f[b][i])
  54. a=f[a][i],b=f[b][i];
  55. }return f[a][];
  56. }
  57.  
  58. void solve1(int x,int L,int k)
  59. {
  60. cnt=;
  61. while(x!=L)
  62. {
  63. tmp1[++cnt]=sum[x]-sum[f[x][]];
  64. x=f[x][];
  65. }
  66. }
  67. void solve2(int y,int L,int k)
  68. {
  69. num=;
  70. while(y!=L)
  71. {
  72. tmp2[++num]=sum[y]-sum[f[y][]];
  73. y=f[y][];
  74. }
  75. }
  76.  
  77. int main()
  78. {
  79. //freopen("data.txt", "r", stdin);
  80. //freopen("2.out", "w", stdout);
  81. freopen("maze.in","r",stdin);
  82. freopen("maze.out","w",stdout);
  83. //freopen("ly.in","r",stdin);
  84. //freopen("ly.out","w",stdout);
  85. int x,y,z;
  86. n=read();
  87. for(int i=;i<n;i++)
  88. {
  89. x=read();y=read();z=read();
  90. add(x,y,z);add(y,x,z);
  91. }
  92. dfs(,,);get();
  93. m=read();
  94. for(int i=;i<=m;i++)
  95. {
  96. x=read();y=read();z=read();
  97. int L=lca(x,y);
  98. memset(tmp1,,sizeof tmp1);
  99. memset(tmp2,,sizeof tmp2);
  100. solve1(x,L,z);
  101. solve2(y,L,z);reverse(tmp2+,tmp2+num+);
  102. ans=;res=;
  103. if(cnt)
  104. for(int i=;i<=cnt;i++)
  105. {
  106. if(tmp1[i]<=res) res-=tmp1[i];
  107. else res=z,res-=tmp1[i],ans++;
  108. }
  109. if(num)
  110. for(int i=;i<=num;i++)
  111. {
  112. if(tmp2[i]<=res) res-=tmp2[i];
  113. else res=z,res-=tmp2[i],ans++;
  114. }
  115. printf("%d\n",ans);
  116. }
  117. fclose(stdin);fclose(stdout);
  118. return ;
  119. }

35暴力

  1. /*
  2. LCA,压位
  3. 算 LCA 是显然的, 由于两个点之间可能要走很多步, 所以我们预处理每一个点往上连续
  4. 走六步会出现的各种情况,便能控制常数,从而在 8 秒内出解。由于边权只有两种,所以一
  5. 个点往上走六步遇到的边权只有 2^6 = 64 种情况
  6. */
  7. #include <cstdio>
  8. #include <cstring>
  9. #define E 50010
  10. #define F 100010
  11. using namespace std;
  12.  
  13. int n, m, head[E], to[F], next[F], value[F], cnt = , cost = , costa = ;
  14.  
  15. void Read(int &x)
  16. {
  17. char ch = getchar();
  18. x = ;
  19. while (ch < '' || ch > '') ch = getchar();
  20. while (ch >= '' && ch <= '')
  21. {
  22. x = x * + ch - '';
  23. ch = getchar();
  24. }
  25. }
  26.  
  27. void add(int x, int y, int z)
  28. {
  29. to[++cnt] = y; value[cnt] = z; next[cnt] = head[x]; head[x] = cnt;
  30. }
  31.  
  32. int fa[E][], dep[E], dist[E][], type[E], jky[E][], dd[E], jump[E];
  33. short czy[<<][][][];
  34.  
  35. void dfs(int u, int f, int d)
  36. {
  37. fa[u][] = f;
  38. dep[u] = d;
  39. for (int j = head[u]; j; j = next[j])
  40. {
  41. int v = to[j];
  42. if (v == f) continue;
  43. dist[v][] = value[j];
  44. dfs(v, u, d+);
  45. }
  46. }
  47.  
  48. void build()
  49. {
  50. for (int k = ; k < ; k++)
  51. for (int u = ; u <= n; u++)
  52. {
  53. fa[u][k] = fa[fa[u][k-]][k-];
  54. if (k <= ) dist[u][k] = dist[u][k-] + dist[fa[u][k-]][k-];
  55. }
  56.  
  57. for (int i = ; i <= n; i++)
  58. if (dep[i] >= ) dd[i] = dist[i][] + dist[fa[i][]][];
  59.  
  60. for (int i = ; i <= n; i++)
  61. {
  62. if (dep[i] < ) continue;
  63. int t = , u = i;
  64. for (int j = ; j < ; j++)
  65. {
  66. if (dist[u][] == cost) t += << j;
  67. u = fa[u][];
  68. }
  69. jump[i] = u;
  70. type[i] = t;
  71. }
  72.  
  73. for (int j = ; j < (<<); j++)
  74. for (int k = cost; k <= cost * ; k++)
  75. for (int rest = ; rest <= k; rest++)
  76. {
  77. int path = j, step = , re = rest;
  78. for (int t = ; t <= ; t++)
  79. {
  80. int co;
  81. if (path & ) co = cost; else co = costa;
  82. if (re < co) re = k, step++;
  83. re -= co;
  84. path >>= ;
  85. }
  86. czy[j][k][rest][] = step;
  87. czy[j][k][rest][] = re;
  88. }
  89.  
  90. for (int i = ; i <= n; i++)
  91. {
  92. int u = i, rest = ;
  93. for (int j = ; j < dd[i]; j++)
  94. {
  95. if (dep[u] > && rest >= dist[u][])
  96. {
  97. rest -= dist[u][];
  98. u = fa[u][];
  99. }
  100. jky[i][j] = u;
  101. rest++;
  102. }
  103. }
  104. }
  105.  
  106. void swap(int& x, int& y)
  107. {
  108. int t = x; x = y; y = t;
  109. }
  110.  
  111. int get(int x, int y)
  112. {
  113. if (dep[x] < dep[y]) swap(x, y);
  114. for (int k = ; k >= ; k--)
  115. if (dep[fa[x][k]] >= dep[y]) x = fa[x][k];
  116.  
  117. if (x == y) return x;
  118.  
  119. for (int k = ; k >= ; k--)
  120. if (fa[x][k] != fa[y][k]) x = fa[x][k], y = fa[y][k];
  121. if (x != y) x = fa[x][];
  122.  
  123. return x;
  124. }
  125.  
  126. struct hyd
  127. {
  128. int step, rest;
  129. };
  130.  
  131. inline hyd work(int u, int f, int k)
  132. {
  133. int step = , rest = ;
  134.  
  135. if (k <= cost * )
  136. while (dep[u] > dep[f])
  137. {
  138. if (dep[u] - dep[f] < )
  139. {
  140. if (rest >= dist[u][]) rest -= dist[u][];
  141. else step++, rest = k - dist[u][];
  142. u = fa[u][];
  143. continue;
  144. }
  145.  
  146. step += czy[type[u]][k][rest][];
  147. rest = czy[type[u]][k][rest][];
  148. u = jump[u];
  149.  
  150. }
  151.  
  152. else
  153. while (dep[u] > dep[f])
  154. {
  155. if (rest == ) step++, rest = k;
  156.  
  157. if (dep[u] - dep[f] < )
  158. {
  159. if (rest >= dist[u][]) rest -= dist[u][];
  160. else step++, rest = k - dist[u][];
  161. u = fa[u][];
  162. continue;
  163. }
  164.  
  165. if (rest >= dd[u])
  166. {
  167. rest -= dd[u];
  168. u = jump[u];
  169. continue;
  170. }
  171.  
  172. u = jky[u][rest], rest = ;
  173. }
  174.  
  175. return (hyd) {step, rest};
  176. }
  177.  
  178. int main()
  179. {
  180. freopen("data.txt", "r", stdin);
  181. freopen("1.out", "w", stdout);
  182.  
  183. Read(n);
  184. memset(head, , sizeof(head));
  185.  
  186. for (int i = ; i < n; i++)
  187. {
  188. int x, y, z;
  189. Read(x), Read(y), Read(z);
  190. add(x, y, z);
  191. add(y, x, z);
  192. if (cost < z) cost = z;
  193. if (i == ) costa = z; else if (costa > z) costa = z;
  194. }
  195.  
  196. memset(fa, , sizeof(fa));
  197. memset(dep, , sizeof(dep));
  198. memset(dist, , sizeof(dist));
  199.  
  200. dfs(, , );
  201.  
  202. build();
  203.  
  204. Read(m);
  205. for (int i = ; i <= m; i++)
  206. {
  207. int x, y, k;
  208. Read(x), Read(y), Read(k);
  209. int f = get(x, y);
  210.  
  211. hyd ans1 = work(x, f, k), ans2 = work(y, f, k);
  212. int ans = ans1.step + ans2.step;
  213. ans -= (ans1.rest + ans2.rest) / k;
  214.  
  215. printf("%d\n", ans);
  216. }
  217.  
  218. fclose(stdin); fclose(stdout);
  219.  
  220. return ;
  221. }

10.16NOIP模拟赛的更多相关文章

  1. [10.18模拟赛] 序列 (DP)

    [10.18模拟赛] 序列 题目描述 山山有一个整数序列s1,s2,-,sn,其中1≤si≤k. 求出有多少个准确移除m个元素后不同的序列.答案模(1e9+7) 输入 输入包括几个测试用例,并且由文件 ...

  2. [10.12模拟赛] 老大 (二分/树的直径/树形dp)

    [10.12模拟赛] 老大 题目描述 因为 OB 今年拿下 4 块金牌,学校赞助扩建劳模办公室为劳模办公室群,为了体现 OI 的特色,办公室群被设计成了树形(n 个点 n − 1 条边的无向连通图), ...

  3. EZ 2018 06 10 NOIP2018 模拟赛(十八)

    好久没写blog&&比赛题解了,最近补一下 这次还是很狗的,T3想了很久最后竟然连并查集都忘写了,然后T2map莫名爆炸. Rating爆减......链接不解释 好了我们开始看题. ...

  4. 2018.10.17NOIP模拟赛解题报告

    心路历程 预计得分:\(100 + 100 +100\) 实际得分:\(100 + 100 + 60\) 辣鸡模拟赛.. 5min切掉T1,看了一下T2 T3,感觉T3会被艹爆因为太原了.. 淦了20 ...

  5. 洛谷P1667/[10.22 模拟赛] 数列 (思维+模拟)

    洛谷P1667 数列 题目描述 给定一个长度是n的数列A,我们称一个数列是完美的,当且仅当对于其任意连续子序列的和都是正的.现在你有一个操作可以改变数列,选择一个区间[X,Y]满足\(A_X +A_{ ...

  6. 2018.10.23NOIP模拟赛解题报告

    心路历程 预计得分:\(100 + 50 + (10 \sim 50)\) 实际得分:\(100 + 10 + 50\) 这可能是我打的最懵逼的一场考试没有之一.. T1两个小时才做出来也是醉了. T ...

  7. 17.2.10 NOIP模拟赛 聪哥的工资

    聪哥的工资 (money/money.in/money.out) 时限1000ms 内存256MB 题目描述 lwher: 了体验劳苦大众的生活,聪哥在暑假参加了打零工的活动,这个活动分为n个工作日, ...

  8. 10.17NOIP模拟赛

    #include<iostream> #include<cstdio> #include<cstring> #define N 1001 using namespa ...

  9. 2019.10.18模拟赛T3

    题目大意: 求$\sum\limits_{i=1}^n\sum\limits_{j=1}^n[lcm(i,j)>n](n\leq 10^{10})$的值. 题解: 这题貌似有n多种做法... 为 ...

随机推荐

  1. Webdriver测试脚本2(控制浏览器)

    Webdriver提供了操作浏览器的一些方法,例如控制浏览器的大小.操作浏览器前进和后退等. 控制浏览器窗口大小 有时候我们希望能以某种浏览器尺寸打开,让访问的页面在这种尺寸下运行.例如可以将浏览器设 ...

  2. english & utils & tools

    english & utils & tools https://openlanguage.com/ https://www.grammarly.com/blog/email-writi ...

  3. [BZOJ3196] [Tyvj1730] 二逼平衡树(线段树 套 Splay)

    传送门 至少BZOJ过了,其他的直接弃. 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作: 1.查询k在区间内的排名 2.查询区间内排名为k的值 3.修改某一位值上的 ...

  4. stl lower_bound()返回值

    http://blog.csdn.net/niushuai666/article/details/6734403 函数lower_bound()在first和last中的前闭后开区间进行二分查找,返回 ...

  5. ModelForm组件和forms组件补充

    forms组件补充: forms组件的三个字段:ChoiceField, ModelChoiceField & ModelMultipleChoiceField # forms组件:Choic ...

  6. cogs——2084. Asm.Def的基本算法

    2084. Asm.Def的基本算法 ★☆   输入文件:asm_algo.in   输出文件:asm_algo.out   简单对比时间限制:1 s   内存限制:256 MB [题目描述] “有句 ...

  7. Eclipse完成Maven + Spring Boot + Mybatis + jsp

    Spring Boot 完成WEB项目开发 开发工具:eclipse 框架:Maven:Spring Boot:Mybatis 界面:jsp:javascript:css 前言: 在SpringBoo ...

  8. Servlet中操作数据库

    以下内容引用自http://wiki.jikexueyuan.com/project/servlet/database-access.html: 前提先新建数据库及插入模拟数据: create tab ...

  9. LINUX 内核结构

    http://blog.csdn.net/hguisu/article/details/6122513 http://blog.csdn.net/hguisu/article/category/796 ...

  10. C#的SplitPanel如何设置上下和左右

    定位到Orientation属性即可