2018/8/21 qbxt测试

期望得分:0? 实际得分:0

思路:manacher   会写模板但是不会用 qwq

听了某人的鬼话,直接输出0,然后就gg了

#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std; const int N = (int)2e6 + ;
typedef long long ll; char S[N];
int R[N], lf[N], rt[N];
int n; void init() {
scanf("%s", S + ), n = strlen(S + ) << | ;
for (int i = n; i >= ; --i) S[i] = i & ? '#' : S[i >> ];
} void manacher() {
int k = , p = ;
R[] = , lf[] = ;
for (int i = ; i <= n; ++i) {
int j = * k - i;
R[i] = min(R[j], p - i + );
for ( ; i + R[i] <= n && i - R[i] >= && S[i + R[i]] == S[i - R[i]]; ++R[i]);
if (i + R[i] - > p) {
for (int j = p + ; j <= i + R[i] - ; ++j)
lf[j] = j - i;
k = i, p = i + R[i] - ;
}
} k = n, p = n;
rt[n] = ;
for (int i = n - ; i >= ; --i) {
if (i - R[i] + < p) {
for (int j = p - ; j >= i - R[i] + ; --j)
rt[j] = i - j;
k = i, p = i - R[i] + ;
}
} for (int i = ; i <= n; i += ) lf[i] = max(lf[i], lf[i - ]);
for (int i = n - ; i >= ; i -= ) rt[i] = max(rt[i], rt[i + ]); int ans = ;
for (int i = ; i <= n; i += )
if (lf[i] + rt[i] > ans)
ans = lf[i] + rt[i];
printf("%d\n", ans);
} int main() {
freopen("string.in", "r", stdin);
freopen("string.out", "w", stdout); init();
manacher(); return ;
}

std

期望得分:20?40?  实际得分:20

考场思路:树上两点间的最短路应该要求LCA,那就用树剖求吧  只会用树剖 qwq

欸?让着求路径乘积是什么鬼??线段树?? 那就树剖+线段树吧

这个区间怎么合并??不会       这题不会要用倍增LCA吧 不会啊  咕咕咕~

那就换暴力吧   枚举,然后乘起来

嗯。。答案好像不大对啊,这个样例是不是错了啊

20min 后。。。kao,我题目读错了

最后改了改,20分 qwq

正解:

#include<algorithm>
#include<cstdlib>
#include<cstring>
#include<cstdio> using namespace std;
typedef long long LL;
const int M = ;
const int Mod = 1e9 + ; LL S, T, G;
int tot, n, m, k, t;
int a[M], sum[M];
int to[M*], net[M*], head[M];
int deep[M], top[M], dad[M], size[M]; inline int read() {
int x = , f = ;
char ch = getchar();
while(ch<'' || ch>'') {
if(ch == '-') f = -;
ch = getchar();
}
while(ch>='' && ch<='') x = x * + ch - , ch = getchar();
return x * f;
} inline void add(int u, int v) {
to[++tot] = v; net[tot] = head[u]; head[u] = tot;
to[++tot] = u; net[tot] = head[v]; head[v] = tot;
} inline void dfs(int now) {
size[now] = ;
deep[now] = deep[dad[now]] + ;
for(int i = head[now]; i; i = net[i])
if(dad[now] != to[i]) {
dad[to[i]] = now;
dfs(to[i]);
size[now] += size[to[i]];
}
} inline void dfsl(int now) {
int t = ;
if(!top[now]) top[now] = now;
for(int i = head[now]; i; i = net[i])
if(dad[now] != to[i] && size[to[i]] > size[t])
t = to[i];
if(t) {
top[t] = top[now];
dfsl(t);
}
for(int i = head[now]; i; i = net[i])
if(dad[now] != to[i] && to[i] != t)
dfsl(to[i]);
} inline int lca(int x, int y) {
while(top[x] != top[y]) {
if(deep[top[x]] < deep[top[y]])
swap(x, y);
x = dad[top[x]];
}
return deep[x] > deep[y] ? y : x;
} inline LL mul(int a, int b) {
LL res = ;
while(b) {
if(b & ) res = (res + a) % Mod;
a = (a + a) % Mod;
b >>= ;
}
return res;
} inline LL bl(int tmp) {
LL ans = ;
for(int i = ; i <= tmp; i++)
for(int j = i+; j <= tmp; j++)
ans = (mul(sum[i], sum[j]) + ans) % Mod;
return ans;
} inline void get(int l, int r) {
if(l == r) return ;
while(l != r) {
sum[++t] = a[l];
l = dad[l];
}
} int main() {
freopen("tree.in","r",stdin);
freopen("tree.out","w",stdout);
n = read(), m = read(), k = read();
for(int i = ; i <= n; i++)
a[i] = read();
for(int i = ; i < n; i++) {
int u, v;
u = read(), v = read();
add(u, v);
}
dfs();
dfsl();
for(int i = ; i <= m; i++) {
memset(sum, , sizeof sum);
int u, v;
t = ;
u = read(); v = read();
if(k == ) u ^= S, v ^= S;
T = lca(u, v);
get(u, T), get(v, T);
sum[++t] = a[T];
G = bl(t);
printf("%lld\n", G);
if(k == ) S = G;
}
fclose(stdin); fclose(stdout);
return ;
}

考场代码

#include <bits/stdc++.h>
using namespace std; const int N = (int)2e5, mod = (int)1e9 + , inv = (mod + ) >> ;
typedef int arr[N + ];
typedef long long ll; int n, Q, K, ans, tot, j, k;
arr pt, nt, g, d, ls[], sqs[], f[];
arr a; struct queue {
arr v;
int f, r;
}q; void link(int x, int y) {
pt[++tot] = y, nt[tot] = g[x], g[x] = tot;
pt[++tot] = x, nt[tot] = g[y], g[y] = tot;
} void bfs() {
q.v[q.f = q.r = ] = , d[] = ;
for ( ; q.f <= q.r; ) {
int x = q.v[q.f++];
for (int c = ; c <= ; ++c)
if (d[x] > ( << c)) {
f[c][x] = f[c - ][f[c - ][x]];
ls[c][x] = (ls[c - ][x] + ls[c - ][f[c - ][x]]) % mod;
sqs[c][x] = (sqs[c - ][x] + sqs[c - ][f[c - ][x]]) % mod;
}
else break;
for (int i = g[x]; i; i = nt[i])
if (!d[pt[i]]) {
d[pt[i]] = d[x] + ;
f[][pt[i]] = x, ls[][pt[i]] = a[pt[i]], sqs[][pt[i]] = (ll)a[pt[i]] * (ll)a[pt[i]] % mod;
q.v[++q.r] = pt[i];
}
}
} int query(int x, int y) {
if (d[x] > d[y]) swap(x, y);
int sq = , l = ;
for (int c = ; c >= ; --c)
if (d[y] - ( << c) >= d[x])
(l += ls[c][y]) %= mod, (sq += sqs[c][y]) %= mod, y = f[c][y];
if (x == y) {
l = (l + a[y]) % mod, (sq += (ll)a[y] * (ll)a[y] % mod) %= mod;
l = (ll)l * (ll)l % mod;
return (ll)(l + mod - sq) * (ll)inv % mod;
} for (int c = ; c >= ; --c)
if (f[c][x] != f[c][y]) {
(l += (ls[c][x] + ls[c][y]) % mod) %= mod, (sq += (sqs[c][x] + sqs[c][y]) % mod) %= mod;
x = f[c][x], y = f[c][y];
} (l += (ls[][x] + ls[][y]) % mod) %= mod, (sq += (sqs[][x] + sqs[][y]) % mod) %= mod;
y = f[][y];
(l += a[y]) %= mod, (sq += (ll)a[y] * (ll)a[y] % mod) %= mod;
l = (ll)l * (ll)l % mod;
return (ll)(l + mod - sq) * (ll)inv % mod;
} int main() {
freopen("tree.in", "r", stdin);
freopen("tree.out", "w", stdout); scanf("%d %d %d", &n, &Q, &K);
for (int i = ; i <= n; ++i) scanf("%d", a + i);
for (int i = ; i < n; ++i) {
scanf("%d %d", &j, &k);
link(j, k);
} bfs();
ans = ; for ( ; Q--; ) {
scanf("%d %d", &j, &k);
if (K) j ^= ans, k ^= ans;
printf("%d\n", ans = query(j, k));
} return ;
}

std

期望得分:0  实际得分:0

思路:没有思路   期望是什么??不知道

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std; typedef long long ll; const int N = ;
typedef int arr[N + ][N + ]; int n, m, k, t, u, v;
arr s, c; int Sum(int l1, int r1, int l2, int r2) {
return s[l2][r2] - s[l1 - ][r2] - s[l2][r1 - ] + s[l1 - ][r1 - ];
} long double Pow(long double x, int y) {
long double t = x, r = ;
for ( ; y; y >>= , t = t * t)
if (y & ) r = r * t;
return r;
} int main() {
freopen("swap.in", "r", stdin);
freopen("swap.out", "w", stdout); scanf("%d%d%d%d\n", &n, &m, &k, &t);
for (int i = ; i <= n; ++i)
for (int j = ; j <= m; ++j)
s[i][j] = c[i][j] = ; ll tot = n * m;
for (int i = ; i <= t; ++i) {
scanf("%d%d\n", &u, &v);
s[u][v] = c[u][v] = , --tot;
}
for (int i = ; i <= n; ++i)
for (int j = ; j <= m; ++j)
s[i][j] += s[i - ][j] + s[i][j - ] - s[i - ][j - ]; if (!tot) return printf("%.12lf\n", .), ;
long double exp = tot;
tot *= tot;
for (int i = ; i <= n; ++i) {
for (int j = ; j <= m; ++j) {
if (c[i][j]) {
ll cx = Sum(, , i, j), cy = Sum(i, j, n, m), ans = cx * cy;
cx = Sum(, j, i, m), cy = Sum(i, , n, j);
ans += cx * cy;
cx = Sum(, j, i, j), cy = Sum(i, j, n, j);
ans -= cx * cy;
cx = Sum(i, , i, j), cy = Sum(i, j, i, m);
ans -= cx * cy;
ans = ans * 2LL + 1LL;
long double e = (long double) - (long double) * (long double)ans / (long double)tot;
exp += Pow(e, k);
}
}
}
exp /= (long double);
printf("%.12Lf\n", exp);
return ;
}

std

2018/8/21 qbxt测试的更多相关文章

  1. 2018/8/15 qbxt 测试

    2018/8/15 qbxt 测试 期望得分:100:实际得分:50   不知道为什么写挂了,明明是个水题 T^T 思路:模拟 注意:如果用 char 类型存储的话,如果有'z' + 9 会爆char ...

  2. 记2018/5/5 qbxt 测试

    记2018/5/5 qbxt 测试 竞赛时间: 2018 年 5 月 5 日 13:30-17:00 T1 一.maze(1s,512MB): 简单的迷宫问题:给定一个n*m的迷宫,.表示可以通过,# ...

  3. 记2018/4/29 qbxt 测试

    记 2018/4/29  qbxt 测试(提高基础班) 简单的 NOIP 模拟赛 竞赛时间: 2018 年 4 月 29 日 13:30-17:00 题目名称 乘法 求和 计数 输入文件名 mul.i ...

  4. Microsoft Artificial Intelligence Conference(2018.05.21)

    时间:2018.05.21地点:北京嘉丽大酒店

  5. China Intelligent Office Summit(2018.11.21)

    时间:2018.11.21地点:中关村软件园国际会议中心

  6. 2018.12.21 浪在ACM 集训队第十次测试赛

     浪在ACM 集训队第十次测试赛 A Diverse Substring B Vasya and Books C Birthday D LCM A 传送门 题解 B 传送门 题解: 这道题,就比较简单 ...

  7. 2018.10.21 codeforces1071B. Minimum path(dp+贪心+bfs)

    传送门 唉考试的时候写错了两个细节调了一个多小时根本没调出来. 下来又调了半个小时才过. 其实很简单. 我们先dpdpdp出最开始最多多少个连续的aaa. 然后对于没法继续连续下去的用贪心+bfsbf ...

  8. 2018.08.21 NOIP模拟 unlock(模拟+找规律)

    unlock 描述 经济危机席卷全球,L国也收到冲击,大量人员失业. 然而,作为L国的风云人物,X找到了自己的新工作.从下周开始,X将成为一个酒店的助理锁匠,当然,他得先向部门领导展示他的开锁能力. ...

  9. 2018中国科大自主测试-B卷部分试题

    数学部分 z = e^{\frac{2i\pi}{3}}, 求z^{2018}. \sin(2x) = \frac 35, 求\frac{\tan(x+15^{\circ})}{\tan(x-15^{ ...

随机推荐

  1. 大型网站架构之JAVA中间件

    中间件就是在大型网站中,帮助各子模块间实现互相访问,消息共享或统一访问等功能的软件产品.常见的有: 远程服务框架中间件:主要解决各子模块之间互相访问的问题. 消息队列中间件:主要解决各子模之间消息共享 ...

  2. Gym - 100338C Important Roads 最短路+tarjan

    题意:给你一幅图,问有多少条路径使得去掉该条路后最短路发生变化. 思路:先起始两点求两遍单源最短路,利用s[u] + t[v] + G[u][v] = dis 找出所有最短路径,构造新图.在新图中找到 ...

  3. Active Object 并发模式在 Java 中的应用--转载

    原文地址:http://www.ibm.com/developerworks/cn/java/j-lo-activeobject/ 本文主要从以下两个方面进行阐述: 使用 C++ 语言,来描述 Act ...

  4. 【理论基础】ContentProvider的简要概述

    对于Android应用而言,他们必须相互独立,各自运行在自己的Dalvik虚拟机实例中,如果这些Android应用之间需要实现实时的数据交换——例如我们开发了一个发送短信的程序,当发送短信时需要从联系 ...

  5. Python(五) 包、模块、函数与变量作用域

    一.while循环与使用场景 CONDITION=1 while CONDITION <=5 : CONDITION +=1 print("hello") else: pri ...

  6. Lambda表达式详细总结

    (一)输入参数 在Lambda表达式中,输入参数是Lambda运算符的左边部分.它包含参数的数量可以为0.1或者多个.只有当输入参数为1时,Lambda表达式左边的一对小括弧才可以省略.输入参数的数量 ...

  7. apache-maven-3.0.4-bin.zip

    http://zhidao.baidu.com/share/2a8974fd1546ef5f11ad9cccb3cabf88.html apache-maven-3.0.4-bin.zip

  8. How Blink works

    How Blink works Author: haraken@ Last update: 2018 Aug 14 Status: PUBLIC Working on Blink is not eas ...

  9. Swift学习笔记(11)--类与结构体

    类与结构是编程人员在代码中会经常用到的代码块.在类与结构中可以像定义常量,变量和函数一样,定义相关的属性和方法以此来实现各种功能. 和其它的编程语言不太相同的是,Swift不需要单独创建接口或者实现文 ...

  10. CS224d lecture 9札记

    欢迎转载.转载注明出处: http://blog.csdn.net/neighborhoodguo/article/details/47193885 近期几课的内容不是非常难.还有我的理解能力有所提高 ...