130902 周赛
来源:互联网 发布:小智淘宝外设店网址 编辑:程序博客网 时间:2024/06/10 19:19
UVALIVE地址:https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&category=572
待续。
A。Arranging Heaps
DP +斜率优化,见这里。http://blog.csdn.net/just_water/article/details/11021247
B。
C。Trie树+DFS
#include <iostream>#include <cstdio>#include <cstring>#include <cmath>#include <string>#include <algorithm>#include <vector>#include <queue>#include <map>#include <list>#define mem(a, b) memset(a ,b, sizeof(a))#define maxn 100005using namespace std ;struct T { int count ; int fk ; int next[26] ; void init() { count = fk = 0 ; mem(next , 0) ; }} t[1011111] ;int num = 0 ;void init() { num = 0 ; t[0].init() ;}void build(char *a) { int l = strlen(a) ; int now = 0 ; for (int i = 0 ; i < l ; i ++ ) { int x = a[i] - 'a' ; if(t[now].next[x] == 0) { t[now].next[x] = ++ num ; t[num].init() ; } now = t[now].next[x] ; } t[now].fk = 1 ;}char a[1111111] ;int ans = 0 ;void dfs(int now , int dp) { int c = 0 ; for (int i = 0 ; i < 26 ; i ++ ) { if(t[now].next[i]) { c ++ ; } } if(c == 0 || t[now].fk) { ans += dp ; } if(c == 1) { for (int i = 0 ; i < 26 ; i ++ ) { if(t[now].next[i]) { if(t[now].fk) { dfs(t[now].next[i] , dp + 1) ; } else { dfs(t[now].next[i] , dp) ; } } } } else if(c > 1) { for (int i = 0 ; i < 26 ; i ++ ) { if(t[now].next[i]) { if(t[now].fk) { dfs(t[now].next[i], dp + 1 ) ; } else dfs(t[now].next[i] , dp + 1) ; } } }}int main() { int n ; while(cin >> n) { init() ; for (int i = 0 ; i < n ; i ++ ) { scanf("%s",a) ; build(a) ; } ans = 0 ; for (int i = 0 ; i < 26 ; i ++ )if(t[0].next[i])dfs(t[0].next[i] , 1) ; printf("%.2f\n",ans * 1.0 / n ) ; } return 0 ;}
D。签到题。
E。
F。
G。
H。签到题。
I。线段树或者树状数组基础题。
struct kdq { int l , r , num , ok ;} t[N * 4] ;int a[N] ;void push_up(int x) { t[x].num = t[LL(x)].num + t[RR(x)].num ; t[x].ok = t[LL(x)].ok & t[RR(x)].ok ;}void build(int l , int r , int x) { t[x].l = l ; t[x].r = r ; t[x].ok = 1 ; if(l == r) { if(a[l] < 0) { t[x].num = 1 ; t[x].ok = 1 ; } else if(a[l] == 0) { t[x].ok = 0 ; t[x].num = 0 ; } else { t[x].ok = 1 ; t[x].num = 0 ; } return ; } int mid = l + r >> 1 ; build(l , mid , LL(x)) ; build(mid + 1 , r , RR(x)) ; push_up(x) ;}void updata(int l ,int x ,int nn) { if(t[x].l == l && t[x].r == l) { if(nn < 0) { t[x].num = 1 ; t[x].ok = 1 ; } else if(nn > 0) { t[x].num = 0 ; t[x].ok = 1 ; } else { t[x].num = 0 ; t[x].ok = 0 ; } return ; } int mid = t[x].l + t[x].r >> 1 ; if(l <= mid)updata(l , LL(x) , nn ); else if(l > mid)updata(l , RR(x) , nn) ; push_up(x) ;}int fk = 0 ;int query(int l , int r , int x) { if(l > t[x].r)return 0 ; if(r < t[x].l)return 0 ; if(t[x].l == l && t[x].r == r) { if(t[x].ok) { return t[x].num ; } else { fk = 1 ; return 0 ; } } int mid = t[x].l + t[x].r >> 1 ; if(r <= mid)return query( l , r , LL(x)) ; else if(l > mid)return query(l , r , RR(x)) ; else { return query(l , mid , LL(x)) + query(mid + 1 ,r , RR(x)) ; }}int main() { int n , m ; while(cin >> n >> m) { for (int i = 1 ; i <= n ; i ++ )scanf("%d",&a[i]) ; char str[2] ; int aa , bb ; build(1 , n , 1) ; while(m -- ) { scanf("%s%d%d",str ,&aa,&bb) ; if(str[0] == 'C') { a[aa] = bb ; updata(aa , 1 , bb) ; fk = 0 ; int num = query(aa , bb , 1) ; if(fk) { putchar('0') ; } else if(num & 1)putchar('-') ; else putchar('+') ; } } cout << endl; } return 0 ;}
- 130902 周赛
- 周赛
- 周赛
- 周赛
- 周赛
- 周赛
- 周赛
- 周赛
- 周赛
- 周赛
- 周赛
- 周赛
- 周赛
- 周赛
- 周赛
- 130902 recommendation system
- 130902组队赛-Regionals 2012, Latin America
- 130310周赛
- sql 优化步骤
- 用TinyXml2读取XML文件的一个简单Demo
- 解决死锁问题
- oracle表分区详解
- 关于AS3 Socket学习
- 130902 周赛
- 内存映射文件原理探索
- Apache Commons开源的工具类的介绍
- Dem与遥感影像制作三维效果简单教程
- Win32 Series - DIB Displaying and Printing
- DOJO Study Note(3) - Dojo 事件机制
- 『openframeworks』利用vlc播放视频文件
- oracle 数据库表中转换成java代码
- 边际服务控制脚本