地址就贴这一个吧 都在附近

当时回来也没做做 一伤心了 二是当时实在太弱了

先补两道DP

E题的区间DP

dp[i][j]  截止到i位置以字母j为结束的上升序列 正序 逆序各来一遍 再循环一遍保存一下小于等于J结束的有多少

  1. #include <iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<algorithm>
  5. #include<stdlib.h>
  6. using namespace std;
  7. #define LL long long
  8. #define N 100010
  9. #define mod 2012
  10. LL dp1[N][];
  11. LL dp2[N][];
  12. char s[N];
  13. int main()
  14. {
  15. int i,j,k,n;
  16. while(scanf("%d",&n)!=EOF)
  17. {
  18. scanf("%s",s);
  19. memset(dp1,,sizeof(dp1));
  20. memset(dp2,,sizeof(dp2));
  21. for(i = ; i <= n ; i++)
  22. {
  23. k = s[i-]-'a';
  24. dp1[i][k] = ;
  25. for(j = ;j < k ; j++)
  26. dp1[i][k]=(dp1[i][k]+dp1[i-][j])%mod;
  27. for(j = ; j < ; j++)
  28. dp1[i][j] = (dp1[i-][j]+dp1[i][j])%mod;
  29. }
  30. for(i = ; i <= n ; i++)
  31. {
  32. for(j = ; j < ; j++)
  33. dp1[i][j] = (dp1[i][j]+dp1[i][j-])%mod;
  34. }
  35. for(i = n ; i>= ; i--)
  36. {
  37. k = s[i-]-'a';
  38. dp2[i][k] = ;
  39. for(j = ; j < k ; j++)
  40. dp2[i][k] = (dp2[i+][j]+dp2[i][k])%mod;
  41. for(j = ; j < ; j++)
  42. dp2[i][j] = (dp2[i+][j]+dp2[i][j])%mod;
  43. }
  44. for(i = n ; i >= ; i--)
  45. for(j = ; j < ; j++)
  46. dp2[i][j] = (dp2[i][j]+dp2[i][j-])%mod;
  47. int ans = ;
  48. for(i = ; i < n ; i++)
  49. {
  50. k = s[i-]-'a';
  51. if(k!=)
  52. ans = (ans+dp1[i-][k-]*dp2[i+][k-])%mod;
  53. }
  54. printf("%d\n",ans);
  55. }
  56. return ;
  57. }

I 题 概率DP

虽然对概率题并不是很了解 不过这题真心不难 我是以比较挫的方法过的 时间卡得还不算多紧 过完发现 就我500多ms 人家都是0ms过的。。

发现好像直接乘就可以了 不用管步数。。概率有待加强。。贴我的三维的

  1. #include <iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<algorithm>
  5. #include<stdlib.h>
  6. using namespace std;
  7. double dp[][][];
  8. int main()
  9. {
  10. int i,j,g,n;
  11. while(scanf("%d",&n)!=EOF)
  12. {
  13. if(!n) break;
  14. memset(dp,,sizeof(dp));
  15. double a,b,c,d,e;
  16. double aa,bb,cc;
  17. scanf("%lf%lf%lf%lf%lf",&a,&b,&c,&d,&e);
  18. dp[][][] = ;
  19. for(i = ; i <= n ; i++)
  20. for(j = i; j >= ; j--)
  21. {
  22. if(i==n) aa = ;
  23. else aa = e;
  24. if(j==) cc = a;
  25. else cc = c;
  26. if(j==) bb = b;
  27. else bb = d;
  28. for(g = ; g <= *(i+) ; g++)
  29. {
  30. dp[i][j][g] = dp[i][j+][g-]*aa+dp[i-][j-][g-]*bb+dp[i-][j][g-]*cc;
  31. }
  32. }
  33. double ans=;
  34. for(i = ; i <= *(n+) ; i++)
  35. {
  36. ans+=dp[n][][i]*i;
  37. }
  38. printf("%.2lf\n",ans);
  39. }
  40. return ;
  41. }

B题 BFS

  1. #include <iostream>
  2. #include<cstring>
  3. #include<algorithm>
  4. #include<stdlib.h>
  5. #include<cstdio>
  6. #include<queue>
  7. using namespace std;
  8. struct node
  9. {
  10. int u,v,next;
  11. }ed[];
  12. int w[][];
  13. int head[],vis[],t,n,m;
  14. void init()
  15. {
  16. t= ;
  17. memset(head,-,sizeof(head));
  18. memset(w,,sizeof(w));
  19. }
  20. void add(int u,int v)
  21. {
  22. ed[t].u = u;
  23. ed[t].v = v;
  24. ed[t].next = head[u];
  25. head[u] = t++;
  26. }
  27. void spfa(int u,int st)
  28. {
  29. memset(vis,,sizeof(vis));
  30. queue<int>q;
  31. q.push(u);
  32. vis[u] = ;
  33. while(!q.empty())
  34. {
  35. int tu = q.front();
  36. q.pop();
  37. w[u][tu] = ;
  38. w[tu][u] = ;
  39. for(int i = head[tu] ; i != -; i = ed[i].next)
  40. {
  41. int tv = ed[i].v;
  42. if(!vis[tv])
  43. {
  44. vis[tv] = ;
  45. q.push(tv);
  46. }
  47. }
  48. }
  49. }
  50. int main()
  51. {
  52. int i,j,k,kk=;
  53. scanf("%d",&k);
  54. while(k--)
  55. {
  56. init();
  57. kk++;
  58. scanf("%d%d",&n,&m);
  59. for(i = ; i <= m ; i++)
  60. {
  61. int u,v;
  62. scanf("%d%d",&u,&v);
  63. add(u,v);
  64. }
  65. int f = ;
  66. for(i = ; i <= n ;i++)
  67. {
  68. for(j = ; j <= n ; j++)
  69. {
  70. if(!w[i][j])
  71. {
  72. spfa(i,j);
  73. if(!w[i][j])
  74. spfa(j,i);
  75. }
  76. if(!w[i][j])
  77. {
  78. f = ;
  79. break;
  80. }
  81. }
  82. if(!f) break;
  83. }
  84. printf("Case %d: ",kk);
  85. if(f)
  86. {
  87. puts("Kalimdor is just ahead");
  88. }
  89. else
  90. puts("The Burning Shadow consume us all");
  91. }
  92. return ;
  93. }
  94.  
  95. /**************************************
  96. Problem id : SDUT OJ 2604
  97. User name : shang
  98. Result : Accepted
  99. Take Memory : 16412K
  100. Take Time : 380MS
  101. Submit Time : 2013-09-18 11:59:41
  102. **************************************/

H 题 线段树离线处理

有点小技巧 区间 l,r,s,e

将元素按从小到大排序 区间按e排序 依次插入 询问求和 再按s排序 求差

  1. #include <iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<algorithm>
  5. #include<stdlib.h>
  6. using namespace std;
  7. #define N 50010
  8. #define lowbit(x) (x&(-x))
  9. #define pp 100000010
  10. #define LL long long
  11. int re[N<<];
  12. struct node
  13. {
  14. int l,r,id;
  15. LL s,e;
  16. }p[N];
  17. int ans[N][];
  18. struct mode
  19. {
  20. int id;
  21. LL a;
  22. }q[N];
  23. int s[N<<];
  24. bool cmp(mode a,mode b)
  25. {
  26. return a.a<b.a;
  27. }
  28. bool cmpp(node a,node b)
  29. {
  30. return a.e<b.e;
  31. }
  32. bool cmppp(node a,node b)
  33. {
  34. return a.s<b.s;
  35. }
  36. void up(int l,int r,int w)
  37. {
  38. s[w] = s[w<<]+s[w<<|];
  39. }
  40. void update(int p,int l,int r,int w)
  41. {
  42. if(l==r)
  43. {
  44. s[w] = ;
  45. return ;
  46. }
  47. int m = (l+r)>>;
  48. if(p<=m)
  49. update(p,l,m,w<<);
  50. else
  51. update(p,m+,r,w<<|);
  52. up(l,r,w);
  53. }
  54. int query(int a,int b,int l,int r,int w)
  55. {
  56. if(a<=l&&b>=r)
  57. {
  58. return s[w];
  59. }
  60. int m = (l+r)>>,re=;
  61. if(a<=m)
  62. re+=query(a,b,l,m,w<<);
  63. if(b>m)
  64. re+=query(a,b,m+,r,w<<|);
  65. return re;
  66. }
  67. int main()
  68. {
  69. int t,i,n,m,kk=;
  70. scanf("%d",&t);
  71. while(t--)
  72. {
  73. memset(s,,sizeof(s));
  74. scanf("%d%d",&n,&m);
  75. kk++;
  76. for(i = ; i <= n ; i++)
  77. {
  78. scanf("%lld",&q[i].a);
  79. q[i].id = i;
  80. }
  81. sort(q+,q+n+,cmp);
  82. for(i = ; i <= m ; i++)
  83. {
  84. scanf("%d%d%lld%lld",&p[i].l,&p[i].r,&p[i].s,&p[i].e);
  85. p[i].id = i;
  86. }
  87. sort(p+,p+m+,cmpp);
  88. int o = ;
  89. for(i =; i <= m ; i++)
  90. {
  91. while(o<=n&&q[o].a<=p[i].e)
  92. {
  93. update(q[o].id,,n,);
  94. o++;
  95. }
  96. ans[p[i].id][] = query(p[i].l,p[i].r,,n,);
  97. }
  98. memset(s,,sizeof(s));
  99. sort(p+,p+m+,cmppp);
  100. o = ;
  101. for(i = ; i <= m ; i++)
  102. {
  103. while(o<=n&&q[o].a<p[i].s)
  104. {
  105. update(q[o].id,,n,);
  106. o++;
  107. }
  108. ans[p[i].id][] = query(p[i].l,p[i].r,,n,);
  109. }
  110. printf("Case #%d:\n",kk);
  111. for(i = ; i <= m ; i++)
  112. printf("%d\n",ans[i][]-ans[i][]);
  113. }
  114. return ;
  115. }
  116.  
  117. /**************************************
  118. Problem id : SDUT OJ 2610
  119. User name : shang
  120. Result : Accepted
  121. Take Memory : 4004K
  122. Take Time : 400MS
  123. Submit Time : 2013-09-19 14:37:01
  124. **************************************/

2013ACM省赛题目的更多相关文章

  1. 2013ACM/ICPC亚洲区南京站现场赛——题目重现

    GPA http://acm.hdu.edu.cn/showproblem.php?pid=4802 签到题,输入两个表,注意细心点就行了. #include<cstdio> #inclu ...

  2. 2015年第六届蓝桥杯C/C++B组省赛题目解析

    一.奖券数目 有些人很迷信数字,比如带“4”的数字,认为和“死”谐音,就觉得不吉利.虽然这些说法纯属无稽之谈,但有时还要迎合大众的需求.某抽奖活动的奖券号码是5位数(10000-99999),要求其中 ...

  3. 郑轻校赛题目 问题 G: 多少个0

    问题 G: 多少个0 时间限制: 1 Sec  内存限制: 128 MB提交: 192  解决: 40 题目描述 一个n*n的方格,每个格子中间有一个数字是2或者5,现在从方格的左上角走到右下角,每次 ...

  4. 2012-2014 三年浙江 acm 省赛 题目 分类

    The 9th Zhejiang Provincial Collegiate Programming Contest A    Taxi Fare    25.57% (166/649)     (水 ...

  5. 2014年第五届蓝桥杯C/C++B组省赛题目解析

    一.啤酒和饮料 啤酒每罐2.3元,饮料每罐1.9元.小明买了若干啤酒和饮料,一共花了82.3元. 我们还知道他买的啤酒比饮料的数量少,请你计算他买了几罐啤酒. 注意:答案是一个整数.请通过浏览器提交答 ...

  6. 2013年第四届蓝桥杯C/C++B组省赛题目解析

    一. 高斯日记 大数学家高斯有个好习惯:无论如何都要记日记. 他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210 后来人们知道,那个整数就是日期,它表示那一天是高斯出生后 ...

  7. 2017年第八届蓝桥杯C/C++B组省赛题目解析

    一. 购物单 小明刚刚找到工作,老板人很好,只是老板夫人很爱购物.老板忙的时候经常让小明帮忙到商场代为购物.小明很厌烦,但又不好推辞. 这不,XX大促销又来了!老板夫人开出了长长的购物单,都是有打折优 ...

  8. 2016年第七届蓝桥杯C/C++B组省赛题目解析

    题目1:煤球数目 有一堆煤球,堆成三角棱锥形.具体:第一层放1个,第二层3个(排列成三角形),第三层6个(排列成三角形),第四层10个(排列成三角形),....如果一共有100层,共有多少个煤球?请填 ...

  9. nyoj-310-河南省第四届省赛题目-二分+dinic

    SECRET 时间限制:3000 ms  |  内存限制:65535 KB 难度:6   描述 Dr.Kong is constructing a new machine and wishes to ...

随机推荐

  1. Media Queries——媒体类型

    媒体类型(Media Type)在CSS2中是一个常见的属性,也是一个非常有用的属性,可以通过媒体类型对不同的设备指定不同的样式. 在CSS2中常碰到的就是all(全部).screen(屏幕).pri ...

  2. 链接中 href='#' 和 href='###' 的区别以及优缺点

    首先,<a> 标签 + onclick='{jscode}' 是很常用的一种 js 运用方式,而不使用 href='javascript:{jscode}' 是为了兼容多种浏览器对 < ...

  3. WCF、Web API、WCF REST、Web Service之区别

    http://www.dotnet-tricks.com/Tutorial/webapi/JI2X050413-Difference-between-WCF-and-Web-API-and-WCF-R ...

  4. zencart后台增加菜单选项

    如果要在程序中使用额外的参数,在后台控制,添加到菜单属性 在后台 SQL脚本 运行如下 SQL语句 INSERT INTO configuration (configuration_title, co ...

  5. cxgrid HyperLink 鼠标显示效果

    procedure TForm1.cxGrid1DBTableView1MouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); v ...

  6. Spark Streaming揭秘 Day16 数据清理机制

    Spark Streaming揭秘 Day16 数据清理机制 今天主要来讲下Spark的数据清理机制,我们都知道,Spark是运行在jvm上的,虽然jvm本身就有对象的自动回收工作,但是,如果自己不进 ...

  7. 1043. Is It a Binary Search Tree

    http://www.patest.cn/contests/pat-a-practise/1043 #include <stdio.h> #include <vector> u ...

  8. WRS是什么?

    全球参考系(WRS)是为卫星下行数据服务而建立的一种全球符号坐标系统,本文详细介绍了Landsat卫星的轨道特性,给出了相应的WRS网格坐标位置的估算方法,并给出了估算的结果。对该方法的研究为地面应用 ...

  9. JS 实现取整

    Js 常用数值函数(Math,parseInt)取整   1.丢弃小数部分,保留整数部分parseInt(5/2) 2.向上取整,有小数就整数部分加1Math.ceil(5/2) 3,四舍五入.Mat ...

  10. 淘宝自己的前端框架KISSY(类似jquery) - 简易指南

    KISSY 是由阿里集团前端工程师们发起创建的一个开源 JS 框架. 具备模块化.高扩展性.组件齐全,接口一致.自主开发.适合多种应用场景等特性. 在以下方面具有一定优势: A.拥有大量的中文文档: ...