A .Little Pony and Expected Maximum

pro:给定M,N,表示一个M面的骰子,甩N次,问出现的最大的数的期望。

sol:容斥,f(i)表示最大数<=i的期望,那么最大数=x的期望就是f(x)-f(x-1);

  1. #include<bits/stdc++.h>
  2. #define rep(i,a,b) for(int i=a;i<=b;i++)
  3. using namespace std;
  4. const int maxn=;
  5. double dp[maxn];
  6. double qpow(double a,int x)
  7. {
  8. double res=1.0;while(x){
  9. if(x&) res=res*a;
  10. a=a*a; x>>=;
  11. } return res;
  12. }
  13. int main()
  14. {
  15. int M,N; double ans=.;
  16. scanf("%d%d",&M,&N);
  17. rep(i,,M) dp[i]=qpow(1.0*i/M,N);
  18. rep(i,,M) ans+=(dp[i]-dp[i-])*i;
  19. printf("%.10lf\n",ans);
  20. return ;
  21. }

B .Little Pony and Harmony Chest

pro:给定数组a[],求一个两两互质的b[],使得abs(a[]-b[])最小,输出一个方案。 N<=100,a[]<=30

sol:两两互质,表示之前出现的素因子不能出现,而我们发现>60不可能,因为差值会变很大。 所以我们记录<=60的素数,然后状压DP,记录一下来源,最后倒回去输出即可。

  1. #include<bits/stdc++.h>
  2. #define rep(i,a,b) for(int i=a;i<=b;i++)
  3. using namespace std;
  4. const int maxn=;
  5. const int maxm=;
  6. int a[maxn],p[maxn],vis[maxn],tot,cnt;
  7. int pre[maxn][maxm],now[maxn][maxm],dp[maxn][maxm],fac[maxn];
  8. vector<int>G[maxm];
  9. void dfs(int pos,int Now)
  10. {
  11. if(pos==) return ;
  12. dfs(pos-,pre[pos][Now]);
  13. printf("%d ",now[pos][Now]);
  14. }
  15. int main()
  16. {
  17. int N,M,ans=,P;
  18. memset(dp,0x3f,sizeof(dp)); dp[][]=;
  19. rep(i,,) {
  20. if(!vis[i]){
  21. p[tot++]=i;
  22. for(int j=i+i;j<=;j+=i) vis[j]=;
  23. }
  24. }
  25. rep(i,,){
  26. rep(j,,tot-){
  27. if(i%p[j]==){
  28. fac[i]|=(<<j);
  29. }
  30. }
  31. }
  32. M=(<<tot)-;
  33. rep(i,,M) rep(j,,)
  34. if(!(fac[j]&i)) G[i].push_back(j),cnt++;
  35. scanf("%d",&N);
  36. rep(i,,N) scanf("%d",&a[i]);
  37. rep(i,,N){
  38. rep(j,,M) {
  39. for(int k=;k<G[j].size();k++){
  40. int v=G[j][k];
  41. if(dp[i][j|fac[v]]>dp[i-][j]+abs(a[i]-v)){
  42. dp[i][j|fac[v]]=dp[i-][j]+abs(a[i]-v);
  43. pre[i][j|fac[v]]=j;
  44. now[i][j|fac[v]]=v;
  45. }
  46. }
  47. }
  48. }
  49. rep(i,,M) if(dp[N][i]<ans) ans=dp[N][i],P=i;
  50. dfs(N,P);
  51. return ;
  52. }

C .Little Pony and Summer Sun Celebration

pro:给定N点M边的无向图(不一定连通),然后给没给点限制一个0或1,表示经过点的奇偶,让你找一条路径,满足路径长度<=N*4,而且满足奇偶要求。

sol:我们DFS,如果儿子的奇偶性未满足,满足我们再走一遍(fa->son->fa)即可,发现一定可以构造好。。。然后就是要求的奇数的点一定要连通。

  1. #include<bits/stdc++.h>
  2. #define rep(i,a,b) for(int i=a;i<=b;i++)
  3. using namespace std;
  4. const int maxn=;
  5. int Laxt[maxn],Next[maxn],To[maxn],d[maxn],cnt;
  6. int a[maxn],b[maxn],tot,vis[maxn],t[maxn],F=;
  7. void add(int u,int v)
  8. {
  9. Next[++cnt]=Laxt[u]; Laxt[u]=cnt; To[cnt]=v;
  10. }
  11. void dfs(int u,int f)
  12. {
  13. vis[u]=; t[u]^=;
  14. for(int i=Laxt[u];i;i=Next[i]){
  15. int v=To[i];
  16. if(v!=f&&!vis[v]){
  17. tot++; a[tot]=u; b[tot]=v;
  18. dfs(v,u);
  19. tot++; a[tot]=v; b[tot]=u; t[u]^=;
  20. if(d[v]!=t[v]){
  21. tot++; a[tot]=u; b[tot]=v; t[v]^=;
  22. tot++; a[tot]=v; b[tot]=u; t[u]^=;
  23. }
  24. }
  25. }
  26. }
  27. int main()
  28. {
  29. int N,M,u,v,root=-;
  30. scanf("%d%d",&N,&M);
  31. rep(i,,M){
  32. scanf("%d%d",&u,&v);
  33. add(u,v); add(v,u);
  34. }
  35. rep(i,,N) scanf("%d",&d[i]);
  36. rep(i,,N) if(d[i]==) root=i;
  37. if(root==-) return puts(""),;// root=1;
  38. dfs(root,);
  39. rep(i,,N) if(!vis[i]&&d[i]==) F=;
  40. if(!F) return puts("-1"),;
  41. if(t[root]!=d[root]) tot--;
  42. printf("%d\n",tot+);
  43. printf("%d ",root);
  44. rep(i,,tot) printf("%d ",b[i]);
  45. return ;
  46. }

D .Little Pony and Elements of Harmony

FWT,不会,占位。

E .Little Pony and Lord Tirek

题意:N个马,给定了开始的能量值s[],以及能力上限m[],以及单位时间的能力上升值r[]。Q次操作,每次给出[L,R],吸走这个区间的马的能力和sum,求sum,马的能力被吸走后变为0。

思路:想不到线段树就可以做。。。。tql ,注意r可能为0,不要除0,免得RE。

主要一点就是,区间更新,区间时间一样了,我们就可以均摊复杂度了,即tag相同的区间利用预处理,不同的继续下推。

我们先预处理,把每个节点按照达到上限的时间排序,然后得到前缀和,用前缀和来快速得到,这个区间给定时间差后的sum。

时间复杂度O(N(logN)^2),空间O(NlogN);

  1. #include<bits/stdc++.h>
  2. #define ll long long
  3. #define rep(i,a,b) for(int i=a;i<=b;i++)
  4. using namespace std;
  5. const int maxn=;
  6. const int inf=2e9;
  7. int s[maxn],m[maxn],r[maxn],t[maxn],vis[maxn<<];
  8. int T[][maxn]; ll pre[][maxn],v[][maxn];
  9. struct in{
  10. int m,r,t;
  11. in(){}
  12. in(int mm,int rr,int tt):m(mm),r(rr),t(tt){}
  13. bool friend operator<(in w,in v){
  14. return w.t<v.t;
  15. }
  16. }fcy[maxn];
  17. void build(int dep,int Now,int L,int R)
  18. {
  19. rep(i,L,R) fcy[i]=in(m[i],r[i],t[i]);
  20. sort(fcy+L,fcy+R+);
  21. rep(i,L,R){
  22. T[dep][i]=fcy[i].t;
  23. pre[dep][i]=fcy[i].m;
  24. v[dep][i]=fcy[i].r;
  25. if(i>L){
  26. pre[dep][i]+=pre[dep][i-];//满的部分前缀和
  27. v[dep][i]+=v[dep][i-]; //速度前缀和
  28. }
  29. }
  30. if(L==R){ vis[Now]=; return; }
  31. vis[Now]=-; int Mid=(L+R)>>;
  32. build(dep+,Now<<,L,Mid);
  33. build(dep+,Now<<|,Mid+,R);
  34. }
  35. ll query(int dep,int Now,int L,int R,int ql,int qr,int times)
  36. {
  37. if(vis[Now]==){
  38. vis[Now]=times;
  39. if(s[L]+1LL*times*r[L]>=m[L]) return 1LL*m[L];
  40. return 1LL*s[L]+times*r[L];
  41. }
  42. if(ql<=L&&qr>=R&&vis[Now]>){
  43. int p=upper_bound(T[dep]+L,T[dep]+R+,times-vis[Now])-T[dep]; p--;
  44. ll res=((p>=L)?pre[dep][p]:); //满的
  45. res+=(v[dep][R]-((p>=L)?v[dep][p]:))*(times-vis[Now]); //未满
  46. vis[Now]=times;
  47. return res;
  48. }
  49. if(vis[Now]>=) vis[Now<<]=vis[Now<<|]=vis[Now];
  50. int Mid=(L+R)>>; ll res=;
  51. if(ql<=Mid) res+=query(dep+,Now<<,L,Mid,ql,qr,times);
  52. if(qr>Mid) res+=query(dep+,Now<<|,Mid+,R,ql,qr,times);
  53. if(vis[Now<<]==vis[Now<<|])
  54. vis[Now]=vis[Now<<]; else vis[Now]=-;
  55. return res;
  56. }
  57. int main()
  58. {
  59. int N,M,ts,L,R;
  60. scanf("%d",&N);
  61. rep(i,,N){
  62. scanf("%d%d%d",&s[i],&m[i],&r[i]);
  63. if(!r[i]) t[i]=inf;
  64. else t[i]=m[i]/r[i]+(m[i]%r[i]?:);
  65. }
  66. build(,,,N);
  67. scanf("%d",&M);
  68. rep(i,,M){
  69. scanf("%d%d%d",&ts,&L,&R);
  70. ll ans=query(,,,N,L,R,ts);
  71. printf("%lld\n",ans);
  72. }
  73. return ;
  74. }

CF453(Div1 简单题解)的更多相关文章

  1. CF449 (Div. 1简单题解)

    A .Jzzhu and Chocolate pro:现在给定一个大小为N*M的巧克力,让你横着或者竖着切K刀,都是切的整数大小,而且不能切在相同的地方,求最大化其中最小的块. (N,M,K<1 ...

  2. CF446 (Div. 1)简单题解

    A .DZY Loves Sequences pro:给定长度为N的序列,你最多可以改变一个数的值,问最长严格上升子序列长度. N<1e5. sol:分几种情况,一种的不改变: 一种是改变,然后 ...

  3. 运用kmp算法解决的一些问题的简单题解

    学习kmp算法我最后是看的数据结构书上的一本教材学会的..我认为kmp相对于普通的BF算法就是避免了非常多不必要的匹配.而kmp算法的精髓自然就在于next数组的运用...而next数组简而言之就是存 ...

  4. NCPC 2016:简单题解

    A .Artwork pro:给定N*M的白色格子,然后Q次黑棒,输出每次加黑棒后白色连通块的数量.(N,M<1e3, Q<1e4) sol:倒着离线做,并查集即可. (在线做法:http ...

  5. CF1132.Educational Codeforces Round 61(简单题解)

    A .Regular Bracket Sequence 题意:给定“((” , “()” ,  “)(”,  “))”四种,问是否可以组成合法括号匹配 思路:设四种是ABCD,B可以不用管,而C在A或 ...

  6. CF444(Div. 1简单题解)

    A .DZY Loves Physics 题意:给定带点权和边权的无向图,现在让你选一些点,使得 点权和/被选点对间的边权和 最大. 思路:不难证明,选择边和对应的两点是最优的. #include&l ...

  7. POJ 2299 Ultra-QuickSort 简单题解

    Ultra-QuickSort Time Limit: 7000MS   Memory Limit: 65536K Total Submissions: 68874   Accepted: 25813 ...

  8. 图论 SRM 674 Div1 VampireTree 250

    Problem Statement      You are a genealogist specializing in family trees of vampires. Vampire famil ...

  9. AtCoder Regular Contest 075 2017年6月4日 C、D、E题解

    http://arc075.contest.atcoder.jp/assignments 昨晚做的atcoder,今天写个简单题解. F题不会做,800point的,就跪了,要等zk大佬来做.zk能做 ...

随机推荐

  1. ActiveMQ producer同步/异步发送消息

    http://activemq.apache.org/async-sends.html producer发送消息有同步和异步两种模式,可以通过代码配置: ((ActiveMQConnection)co ...

  2. EvalAI使用——类似kaggle的开源平台,不过没有kernel fork功能,比较蛋疼

    官方的代码 https://github.com/Cloud-CV/EvalAI 我一直没法成功import yaml配置举办比赛(create a challenge on EvalAI 使用htt ...

  3. ubuntu 双硬盘挂载 windows分区自动挂载

    sudo fdisk -l 查看硬盘情况 1:新建一个目录,例:old 2:mount  /dev/sdb1  old 3:cd old 4:ls  (就可以看到新硬盘的内容了) 取消挂载:umoun ...

  4. facebook广告上传Invalid appsecret_proof provided in the API argument

    Status: 400 Response: { "error": { "message": "Invalid appsecret_proof prov ...

  5. zabbix_server.conf、zabbix_agentd.conf配置文件详解

    zabbix_server.conf配置文件详解 AlertScriptsPath 默认值:/usr/local/share/zabbix/alertscripts 说明:告警脚本目录 AllowRo ...

  6. POJ 1390 Blocks(记忆化搜索+dp)

    POJ 1390 Blocks 砌块 时限:5000 MS   内存限制:65536K 提交材料共计: 6204   接受: 2563 描述 你们中的一些人可能玩过一个叫做“积木”的游戏.一行有n个块 ...

  7. 逆袭之旅DAY16.东软实训.Oracle.匿名块

    2018-07-1216:41:19 六.匿名块 .定义匿名块: declare 定义部分: ---可选部分 begin 执行部分: ---必选部分 exception 异常处理部分: ---可选部分 ...

  8. linux磁盘管理 文件挂载

    文件挂载的概念 根文件系统之外的其他文件要想能够被访问,都必须通过"关联"到根文件系统上的某个系统来实现,此关联操作即为"挂载",此目录即为"挂载点& ...

  9. angular 路由项目例子

    angular 路由是我在工作中体验非常便捷的一点, 这是详细的API ,查看API 可以了解很多东西, https://github.com/angular-ui/ui-router/wiki/Qu ...

  10. SpringBoot 上传、下载(四)

    工程目录结构 完整代码: 1.pom.xml 首先当然是添加依赖,用到thymeleaf模板渲染html页面 <project xmlns="http://maven.apache.o ...