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

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

先补两道DP

E题的区间DP

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

 #include <iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<stdlib.h>
using namespace std;
#define LL long long
#define N 100010
#define mod 2012
LL dp1[N][];
LL dp2[N][];
char s[N];
int main()
{
int i,j,k,n;
while(scanf("%d",&n)!=EOF)
{
scanf("%s",s);
memset(dp1,,sizeof(dp1));
memset(dp2,,sizeof(dp2));
for(i = ; i <= n ; i++)
{
k = s[i-]-'a';
dp1[i][k] = ;
for(j = ;j < k ; j++)
dp1[i][k]=(dp1[i][k]+dp1[i-][j])%mod;
for(j = ; j < ; j++)
dp1[i][j] = (dp1[i-][j]+dp1[i][j])%mod;
}
for(i = ; i <= n ; i++)
{
for(j = ; j < ; j++)
dp1[i][j] = (dp1[i][j]+dp1[i][j-])%mod;
}
for(i = n ; i>= ; i--)
{
k = s[i-]-'a';
dp2[i][k] = ;
for(j = ; j < k ; j++)
dp2[i][k] = (dp2[i+][j]+dp2[i][k])%mod;
for(j = ; j < ; j++)
dp2[i][j] = (dp2[i+][j]+dp2[i][j])%mod;
}
for(i = n ; i >= ; i--)
for(j = ; j < ; j++)
dp2[i][j] = (dp2[i][j]+dp2[i][j-])%mod;
int ans = ;
for(i = ; i < n ; i++)
{
k = s[i-]-'a';
if(k!=)
ans = (ans+dp1[i-][k-]*dp2[i+][k-])%mod;
}
printf("%d\n",ans);
}
return ;
}

I 题 概率DP

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

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

 #include <iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<stdlib.h>
using namespace std;
double dp[][][];
int main()
{
int i,j,g,n;
while(scanf("%d",&n)!=EOF)
{
if(!n) break;
memset(dp,,sizeof(dp));
double a,b,c,d,e;
double aa,bb,cc;
scanf("%lf%lf%lf%lf%lf",&a,&b,&c,&d,&e);
dp[][][] = ;
for(i = ; i <= n ; i++)
for(j = i; j >= ; j--)
{
if(i==n) aa = ;
else aa = e;
if(j==) cc = a;
else cc = c;
if(j==) bb = b;
else bb = d;
for(g = ; g <= *(i+) ; g++)
{
dp[i][j][g] = dp[i][j+][g-]*aa+dp[i-][j-][g-]*bb+dp[i-][j][g-]*cc;
}
}
double ans=;
for(i = ; i <= *(n+) ; i++)
{
ans+=dp[n][][i]*i;
}
printf("%.2lf\n",ans);
}
return ;
}

B题 BFS

 #include <iostream>
#include<cstring>
#include<algorithm>
#include<stdlib.h>
#include<cstdio>
#include<queue>
using namespace std;
struct node
{
int u,v,next;
}ed[];
int w[][];
int head[],vis[],t,n,m;
void init()
{
t= ;
memset(head,-,sizeof(head));
memset(w,,sizeof(w));
}
void add(int u,int v)
{
ed[t].u = u;
ed[t].v = v;
ed[t].next = head[u];
head[u] = t++;
}
void spfa(int u,int st)
{
memset(vis,,sizeof(vis));
queue<int>q;
q.push(u);
vis[u] = ;
while(!q.empty())
{
int tu = q.front();
q.pop();
w[u][tu] = ;
w[tu][u] = ;
for(int i = head[tu] ; i != -; i = ed[i].next)
{
int tv = ed[i].v;
if(!vis[tv])
{
vis[tv] = ;
q.push(tv);
}
}
}
}
int main()
{
int i,j,k,kk=;
scanf("%d",&k);
while(k--)
{
init();
kk++;
scanf("%d%d",&n,&m);
for(i = ; i <= m ; i++)
{
int u,v;
scanf("%d%d",&u,&v);
add(u,v);
}
int f = ;
for(i = ; i <= n ;i++)
{
for(j = ; j <= n ; j++)
{
if(!w[i][j])
{
spfa(i,j);
if(!w[i][j])
spfa(j,i);
}
if(!w[i][j])
{
f = ;
break;
}
}
if(!f) break;
}
printf("Case %d: ",kk);
if(f)
{
puts("Kalimdor is just ahead");
}
else
puts("The Burning Shadow consume us all");
}
return ;
} /**************************************
Problem id : SDUT OJ 2604
User name : shang
Result : Accepted
Take Memory : 16412K
Take Time : 380MS
Submit Time : 2013-09-18 11:59:41
**************************************/

H 题 线段树离线处理

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

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

 #include <iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<stdlib.h>
using namespace std;
#define N 50010
#define lowbit(x) (x&(-x))
#define pp 100000010
#define LL long long
int re[N<<];
struct node
{
int l,r,id;
LL s,e;
}p[N];
int ans[N][];
struct mode
{
int id;
LL a;
}q[N];
int s[N<<];
bool cmp(mode a,mode b)
{
return a.a<b.a;
}
bool cmpp(node a,node b)
{
return a.e<b.e;
}
bool cmppp(node a,node b)
{
return a.s<b.s;
}
void up(int l,int r,int w)
{
s[w] = s[w<<]+s[w<<|];
}
void update(int p,int l,int r,int w)
{
if(l==r)
{
s[w] = ;
return ;
}
int m = (l+r)>>;
if(p<=m)
update(p,l,m,w<<);
else
update(p,m+,r,w<<|);
up(l,r,w);
}
int query(int a,int b,int l,int r,int w)
{
if(a<=l&&b>=r)
{
return s[w];
}
int m = (l+r)>>,re=;
if(a<=m)
re+=query(a,b,l,m,w<<);
if(b>m)
re+=query(a,b,m+,r,w<<|);
return re;
}
int main()
{
int t,i,n,m,kk=;
scanf("%d",&t);
while(t--)
{
memset(s,,sizeof(s));
scanf("%d%d",&n,&m);
kk++;
for(i = ; i <= n ; i++)
{
scanf("%lld",&q[i].a);
q[i].id = i;
}
sort(q+,q+n+,cmp);
for(i = ; i <= m ; i++)
{
scanf("%d%d%lld%lld",&p[i].l,&p[i].r,&p[i].s,&p[i].e);
p[i].id = i;
}
sort(p+,p+m+,cmpp);
int o = ;
for(i =; i <= m ; i++)
{
while(o<=n&&q[o].a<=p[i].e)
{
update(q[o].id,,n,);
o++;
}
ans[p[i].id][] = query(p[i].l,p[i].r,,n,);
}
memset(s,,sizeof(s));
sort(p+,p+m+,cmppp);
o = ;
for(i = ; i <= m ; i++)
{
while(o<=n&&q[o].a<p[i].s)
{
update(q[o].id,,n,);
o++;
}
ans[p[i].id][] = query(p[i].l,p[i].r,,n,);
}
printf("Case #%d:\n",kk);
for(i = ; i <= m ; i++)
printf("%d\n",ans[i][]-ans[i][]);
}
return ;
} /**************************************
Problem id : SDUT OJ 2610
User name : shang
Result : Accepted
Take Memory : 4004K
Take Time : 400MS
Submit Time : 2013-09-19 14:37:01
**************************************/

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. cocos3.10 使用cocostudio 回调特性 c++版本说明

    cocos3.10 使用cocostudio 回调特性 c++版本说明 好久没捣鼓cocos2dx了,又拿起来玩玩,看着版本一次次的升级,真的好快,今天用cocos3.10版本测试下时间特性功能,跟着 ...

  2. php总结:1.php介绍

    1.什么是php PHP,即“Hypertext Preprocessor”,是一种被广泛应用的开源通用脚本语言,尤其适用于 Web 开发并可嵌入 HTML 中去.它的语法利用了 C.Java 和 P ...

  3. lnmp安装--linux通过tar.gz源码包安装mysql

    mysql版本:5.6 [http://cdn.mysql.com/Downloads/MySQL-5.6/mysql-5.6.22.tar.gz] [http://dev.mysql.com/get ...

  4. 一个不错的图片滑动展示插件 anythingslider

    一个不错的图片http://css-tricks.com/anythingslider-jquery-plugin/ DEMO演示: http://css-tricks.github.io/Anyth ...

  5. (转载)SQL语句,纵列转横列

    SQL语句,纵列转横列 Feed: 大富翁笔记 Title: SQL语句,纵列转横列 Author: wzmbox Comments sTable.db库位 货物编号 库存数1 0101 501 01 ...

  6. 1011. World Cup Betting (20)(最大值)

    With the 2010 FIFA World Cup running, football fans the world over were becoming increasingly excite ...

  7. android studio如何开启与禁用版本控制vcs

    1.开启

  8. JSP内置对象详解

    jsp中内置对象:request.response.session.applecation.out.pagecontesx.config.page.exception.cookie 1.request ...

  9. fzu 2105 Digits Count ( 线段树 ) from 第三届福建省大学生程序设计竞赛

    http://acm.fzu.edu.cn/problem.php?pid=2105 Problem Description Given N integers A={A[0],A[1],...,A[N ...

  10. Java-使用js进行编码,后台解码。

    1:使用js编码 var value=window.encodeURI(window.encodeURI(strValue)); 2:Java类中解码. String str=URLDecoder.d ...