2013ACM省赛题目
地址就贴这一个吧 都在附近
当时回来也没做做 一伤心了 二是当时实在太弱了
先补两道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省赛题目的更多相关文章
- 2013ACM/ICPC亚洲区南京站现场赛——题目重现
GPA http://acm.hdu.edu.cn/showproblem.php?pid=4802 签到题,输入两个表,注意细心点就行了. #include<cstdio> #inclu ...
- 2015年第六届蓝桥杯C/C++B组省赛题目解析
一.奖券数目 有些人很迷信数字,比如带“4”的数字,认为和“死”谐音,就觉得不吉利.虽然这些说法纯属无稽之谈,但有时还要迎合大众的需求.某抽奖活动的奖券号码是5位数(10000-99999),要求其中 ...
- 郑轻校赛题目 问题 G: 多少个0
问题 G: 多少个0 时间限制: 1 Sec 内存限制: 128 MB提交: 192 解决: 40 题目描述 一个n*n的方格,每个格子中间有一个数字是2或者5,现在从方格的左上角走到右下角,每次 ...
- 2012-2014 三年浙江 acm 省赛 题目 分类
The 9th Zhejiang Provincial Collegiate Programming Contest A Taxi Fare 25.57% (166/649) (水 ...
- 2014年第五届蓝桥杯C/C++B组省赛题目解析
一.啤酒和饮料 啤酒每罐2.3元,饮料每罐1.9元.小明买了若干啤酒和饮料,一共花了82.3元. 我们还知道他买的啤酒比饮料的数量少,请你计算他买了几罐啤酒. 注意:答案是一个整数.请通过浏览器提交答 ...
- 2013年第四届蓝桥杯C/C++B组省赛题目解析
一. 高斯日记 大数学家高斯有个好习惯:无论如何都要记日记. 他的日记有个与众不同的地方,他从不注明年月日,而是用一个整数代替,比如:4210 后来人们知道,那个整数就是日期,它表示那一天是高斯出生后 ...
- 2017年第八届蓝桥杯C/C++B组省赛题目解析
一. 购物单 小明刚刚找到工作,老板人很好,只是老板夫人很爱购物.老板忙的时候经常让小明帮忙到商场代为购物.小明很厌烦,但又不好推辞. 这不,XX大促销又来了!老板夫人开出了长长的购物单,都是有打折优 ...
- 2016年第七届蓝桥杯C/C++B组省赛题目解析
题目1:煤球数目 有一堆煤球,堆成三角棱锥形.具体:第一层放1个,第二层3个(排列成三角形),第三层6个(排列成三角形),第四层10个(排列成三角形),....如果一共有100层,共有多少个煤球?请填 ...
- nyoj-310-河南省第四届省赛题目-二分+dinic
SECRET 时间限制:3000 ms | 内存限制:65535 KB 难度:6 描述 Dr.Kong is constructing a new machine and wishes to ...
随机推荐
- Sublime字体设置
{"font_face": "Courier New","font_options":["subpixel_antialias&q ...
- 本地调试 Chrome支持Ajax跨域
Ajax本身是不支持跨域的,跨域问题其实很简单,通过浏览器的相应设置可以完成两个不同的服务器或两个不同服务下的项目互相访问.希望大家给予评价及投票. 方法/步骤 1 首先谷歌快捷方式上右击,在下拉列表 ...
- php curl抓取远程页面内容的代码
使用php curl抓取远程页面内容的例子. 代码如下: <?php /** * php curl抓取远程网页内容 * edit by www.jbxue.com */ $curlPost = ...
- 有关linux日志分析的详细介绍
linux的日志文件可以帮助我们了解系统所处的状态,比如查出哪些用户有登入,及其它安全相关的一些问题. linux下的日志分析. 以下内容,部分参考了:探讨 linux 日志分析 这篇文章. 1.了解 ...
- javascript实现URL不缓存的方法
<script> document.write("<s"+"cript type='text/javascript' src='/js/test.js? ...
- Vi 几个实用的命令
vi有三种工作模式:指令模式.编辑模式和命令模式. 我们从打开vi说起,这样可以确定下学习环境,也方便学习者实践.打开vi,当前模式即为指令模式,此时可以按a, i, 或o进入编辑模式,或按:(冒号) ...
- SQL Server数据库备份(异机)
简单的远程异机备份数据库功能,通过这个存储过程,讲远程其他机器上的数据库备份到本地.其主要原理为: 1.通过XP_CMDSHELL执行Windows命令,将本机的共享目录映射为远程机器的网络驱动器. ...
- Hadoop学习---安装部署
hadoop框架 Hadoop使用主/从(Master/Slave)架构,主要角色有NameNode,DataNode,secondary NameNode,JobTracker,TaskTracke ...
- 通过注册表查找oracle_home的位置
运行regedit进入注册表 ctrl+f查找oracle_home
- easyui源码翻译1.32--datagrid(数据表格)
前言 此前网上有easyui1.25的源码 应该算是比较老的版本 之后又经历了1.26 . 1.3. 1.31. 1.32 .1.33.1.34 1.33开始支持css3 算是又一个转折 但是 ...