130902 주간 경기
계속 하 다.
A。Arranging Heaps
DP+경사 율 최적화,여기 참조.http://blog.csdn.net/just_water/article/details/11021247
B。
C。트 리 트 리+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 100005
using 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
",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 ;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.