A Eddy Walker

题意

你有n个点(0~n-1),按顺序形成一个环,初始时你在0的位子,你随机顺时针走一步或者逆时针走一步,

一旦你走到一个点后,环上所有点都被经过至少一次后,你就必须停下来。

问你最后停留在m这个位子的概率是多少。

注意输出的答案是前缀积。

思路

有意思的概率题。

读懂题意后发现这道题不难,模拟下可以发现在最后落在(1~n-1)的位子是等概率的,落在0这个位子是不可能的(除非n==1)。

#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
#define pb push_back
#define fi first
#define se second
#define debug(x) cerr<<#x << " := " << x << endl;
#define bug cerr<<"-----------------------"<<endl;
#define FOR(a, b, c) for(int a = b; a <= c; ++ a) typedef long long ll;
typedef long double ld;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll; template<class T> void _R(T &x) { cin >> x; }
void _R(int &x) { scanf("%d", &x); }
void _R(ll &x) { scanf("%lld", &x); }
void _R(double &x) { scanf("%lf", &x); }
void _R(char &x) { scanf(" %c", &x); }
void _R(char *x) { scanf("%s", x); }
void R() {}
template<class T, class... U> void R(T &head, U &... tail) { _R(head); R(tail...); } template<typename T>
inline T read(T&x){
x=;int f=;char ch=getchar();
while (ch<''||ch>'') f|=(ch=='-'),ch=getchar();
while (ch>=''&&ch<='') x=x*+ch-'',ch=getchar();
return x=f?-x:x;
} const int inf = 0x3f3f3f3f; const int mod = 1e9+; /**********showtime************/
ll ksm(ll a, ll b) {
ll res = ;
while(b > ) {
if(b & ) res = res * a % mod;
a = a * a % mod;
b = b >> ;
}
return res;
}
int main(){
int T; scanf("%d", &T);
ll res = ;
while(T--){
ll n,m;
scanf("%lld%lld", &n, &m);
if(n == && m == ) res = res;
else {
if(m == ) res = res * ;
else {
res = res * ksm(n-, mod-) % mod;
}
}
printf("%lld\n", res);
} return ;
}

B Eddy Walker 2

BM

D Kth Minimum Clique

题意:

 在一个无向图中,找出一个权值为第K小的最小团,最小团的定义为选出的公共节点间有边直接联通。

思路:

 感觉实现起来不太难。既然要选择第K小的,我们可以从小到大做。每次通过最小的一个最小团扩展,可以利用bitset优化判断扩展的可行性。

 即利用优先队列,从其中取出的第k个就是答案。

 有点像dji找最短路

#include<bits/stdc++.h>
using namespace std;
#define pb push_back
#define fi first
#define se second
#define debug(x) cerr<<#x << " := " << x << endl;
#define bug cerr<<"-----------------------"<<endl;
#define FOR(a, b, c) for(int a = b; a <= c; ++ a) typedef long long ll;
typedef long double ld;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll; template<class T> void _R(T &x) { cin >> x; }
void _R(int &x) { scanf("%d", &x); }
void _R(ll &x) { scanf("%lld", &x); }
void _R(double &x) { scanf("%lf", &x); }
void _R(char &x) { scanf(" %c", &x); }
void _R(char *x) { scanf("%s", x); }
void R() {}
template<class T, class... U> void R(T &head, U &... tail) { _R(head); R(tail...); } template<typename T>
inline T read(T&x){
x=;int f=;char ch=getchar();
while (ch<''||ch>'') f|=(ch=='-'),ch=getchar();
while (ch>=''&&ch<='') x=x*+ch-'',ch=getchar();
return x=f?-x:x;
} const int inf = 0x3f3f3f3f; const int mod = 1e9+; /**********showtime************/ const int maxn = ;
char str[maxn];
struct node{
ll val;
bitset<>bs;
bool operator<(const node & o) const{
return val > o.val;
}
}a[maxn];
int main(){
int n,k;
scanf("%d%d", &n, &k);
for(int i=; i<=n; i++) {
scanf("%lld", &a[i].val);
}
for(int i=; i<=n; i++) {
scanf("%s", str+);
for(int j=; j<=n; j++) {
if(str[j] == '')a[i].bs.set(j);
}
} priority_queue<node>que;
node s;
s.val = ;
s.bs.reset();
que.push(s);
int flag = ;ll res;
while(!que.empty()) {
node u = que.top();
que.pop();
k -- ;
if(k == ) {
flag = ;
res = u.val;
break;
}
int mx = ;
for(int i=; i<=n; i++) {
if(u.bs[i] == ) mx = i + ;
} for(int i=mx; i<=n; i++) {
if((u.bs & a[i].bs) == u.bs) {
u.bs.set(i); u.val += a[i].val;
que.push(u);
u.bs.reset(i); u.val -= a[i].val;
}
}
}
if(flag) printf("%lld\n", res);
else puts("-1");
return ;
}

E MAZE

线段树,dp

F Partition problem

比赛时过的,双向搜索降低复杂度(队友搞的,我还没搞)

I Inside A Rectangle

dp

H Second Large Rectangle

比赛时过的。DP出面积,找出次大的

(队友搞的,我还没搞)

J Subarray

题意:

有一个长度为1E9,值为{-1,1}的数组,保证只有n(<1e6)个区间等于1,且1的个数小于1e7。

求有多少对区间的区间和大于0。

思路:

首先把被答案区间所包含的点都找出来。最多只有3e7个点。怎么找?

从小到达遍历数组,把每个区间向右扩展的长度找出来,

从大到小遍历数组,把每个区间向左扩展的长度找出来。

然后计算每个点的前缀和。在一个点前面且前缀和小于当前点的前缀和的一个点对应ans++。

由于前缀和的变化大小为1,所以不用树状数组即可完成。

#include <bits/stdc++.h>
using namespace std;
#define pb push_back
#define fi first
#define se second
#define debug(x) cerr<<#x << " := " << x << endl;
#define bug cerr<<"-----------------------"<<endl;
#define FOR(a, b, c) for(int a = b; a <= c; ++ a) typedef long long ll;
typedef long double ld;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll; template<class T> void _R(T &x) { cin >> x; }
void _R(int &x) { scanf("%d", &x); }
void _R(ll &x) { scanf("%lld", &x); }
void _R(double &x) { scanf("%lf", &x); }
void _R(char &x) { scanf(" %c", &x); }
void _R(char *x) { scanf("%s", x); }
void R() {}
template<class T, class... U> void R(T &head, U &... tail) { _R(head); R(tail...); } template<typename T>
inline T read(T&x){
x=;int f=;char ch=getchar();
while (ch<''||ch>'') f|=(ch=='-'),ch=getchar();
while (ch>=''&&ch<='') x=x*+ch-'',ch=getchar();
return x=f?-x:x;
} const int inf = 0x3f3f3f3f;
const ll inff = 0x3f3f3f3f3f3f3f3f;
const int mod = 1e9+; /**********showtime************/
const int maxm = 2e7+;
const int maxn = 1e6+;
int le[maxn],ri[maxn];
int lto[maxn],rto[maxn];
ll f[maxm];
int g(int x) {
return x + ;
}
int main(){
int n;
scanf("%d", &n); for(int i=; i<=n; i++) scanf("%d%d", &le[i], &ri[i]); int sum = ;
/// 向右扩展
le[n+] = ;
for(int i=; i<=n; i++) {
sum += ri[i] - le[i] + ;
rto[i] = min(sum, le[i+] - ri[i] - );
sum -= le[i+] - ri[i] - ;
if(sum < ) sum = ;
}
/// 向左扩展
sum = ;
ri[] = -; for(int i=n; i>=; i--) {
sum += ri[i] - le[i] + ;
lto[i] = min(sum , le[i] - ri[i-] -);
sum -= le[i] - ri[i-] - ;
if(sum < ) sum = ;
} ///计算每个点的前缀和。lowsum保存前缀和比当前点小的个数
ll ans = , lowsum = ;
int s = , pos = ;
f[g()] = ;
for(int i=; i<=n; i++) { for(int j=max(pos, le[i] - lto[i]); j<=ri[i] + rto[i]; j++) { if(j>=le[i] && j <= ri[i]) {
lowsum += f[g(s)];
s++;
f[g(s)]++;
ans += lowsum;
}
else {
s--;
lowsum -= f[g(s)];
f[g(s)]++;
ans += lowsum;
}
// cout<<j<<" "<<lowsum<<endl;
pos = j+;
}
}
// cout<<endl;
printf("%lld\n", ans);
return ;
}

2019nc#2的更多相关文章

  1. 2019nc#10

    题号 标题 已通过代码 题解/讨论 通过率 团队的状态 A Blackjack 点击查看 背包DP 32/109 补好了 B Coffee Chicken 点击查看 进入讨论 738/2992  通过 ...

  2. 2019nc#9

    题号 标题 已通过代码 题解/讨论 通过率 团队的状态 A The power of Fibonacci 点击查看 进入讨论 69/227 未通过 B Quadratic equation 点击查看 ...

  3. 2019NC#8

    题号 标题 已通过代码 题解/讨论 通过率 团队的状态 A All-one Matrices 点击查看 单调栈+前缀和 326/2017  通过 B Beauty Values 点击查看 进入讨论 8 ...

  4. 2019nc#7

    题号 标题 已通过代码 题解/讨论 通过率 团队的状态 A String 点击查看 进入讨论 566/3539  通过 B Irreducible Polynomial 点击查看 规律 730/229 ...

  5. 2019nc#6

    https://ac.nowcoder.com/acm/contest/886#question 题号 标题 已通过代码 题解/讨论 通过率 团队的状态 A Garbage Classificatio ...

  6. 2019nc#5

    题号 标题 已通过代码 题解/讨论 通过率 团队的状态 A digits 2 点击查看 1017/2384  通过 B generator 1 点击查看 567/3692  通过 C generato ...

  7. 2019nc#4

    题号 标题 已通过代码 题解 通过率 团队的状态 A meeting 点击查看 树直径 604/2055   B xor 点击查看 线段树维护线性基交 81/861 未通过 C sequence 点击 ...

  8. 2019nc#3

    题号 标题 已通过代码 题解/讨论 通过率 团队的状态 A Graph Games 点击查看 进入讨论 18/292 未通过 B Crazy Binary String 点击查看 1107/3615 ...

  9. 2019NC#1

    LINK B Integration 题意: 给定$a_1,a_2,...,a_n$, 计算 $$\frac{1}{π}\int_{0}^{\infty}\frac{1}{\prod\limits_{ ...

随机推荐

  1. maven-build-downloading

    1. 场景描述 maven库用的是公司私服和阿里云结合的方式(maven多仓库配置),本项目maven依赖的有其他项目组的jar包(单点登录),但是天有不测风云,依赖单点登录的好几个jar包,在编译( ...

  2. Android UI绘制流程及原理

    一.绘制流程源码路径 1.Activity加载ViewRootImpl ActivityThread.handleResumeActivity() --> WindowManagerImpl.a ...

  3. mysql5.7.18-winx64安装

    win10下装mysql-5.7.18-winx64 步骤1 官网下载地址:https://dev.mysql.com/downloads/mysql/ 选择手动安装版: 解压到D盘mysql文件夹下 ...

  4. 从无到满意offer,你需要知道的那些事

    本文首发于微信公众号:[坂本先生] 原文地址:从无到满意offer,你需要知道的那些事 1.求职软件/网站汇总 软件 评价 推荐指数 拉钩网 手机端产品设计的比较好,当时在上面找到了很多的面试机会 5 ...

  5. Java课堂 动手动脑5

    1.了解棋盘打印:利用二维数组输出一个15*15的棋盘,棋盘的原素为“+”,就是输出一个横纵都是15个“+”的二维数组,然后再以坐标形式输入棋子“●”,替换掉原来棋盘里的“+”.再编写代码. 电脑随机 ...

  6. main方法中注入Spring bean

    在有些情况下需要使用main使用Spring bean,但是main方法启动并没有托管给Spring管理,会导致bean失败,报空指针异常. 可以使用 ClassPathXmlApplicationC ...

  7. Spring Boot 修改静态资源一定要重启项目才会生效吗?未必!

    回顾热部署 Spring Boot 中的热部署相信大家都用过吧,只需要添加 spring-boot-devtools 依赖就可以轻松实现热部署.Spring Boot 中热部署最最关键的原理就是两个不 ...

  8. Java泛型使用的简单介绍

    目录 一. 泛型是什么 二. 使用泛型有什么好处 三. 泛型类 四. 泛型接口 五. 泛型方法 六. 限定类型变量 七. 泛型通配符 7.1 上界通配符 7.2 下界通配符 7.3 无限定通配符 八. ...

  9. python3学习-Queue模块

    python标准库中带有一个Queue模块,顾名思义,队列.该模块也衍生出一些基本队列不具有的功能. 我们先看一下队列的方法: put 存数据 get 取数据 empty 判断队列是否为空 qsize ...

  10. 深入理解struts的运行机制

    扫码关注公众号,不定期更新干活 在此申明本博文并非原创,原文:http://blog.csdn.net/lenotang/article/details/3336623,本文章是在此文章基础上进行优化 ...