前言:考的一般般吧……T3暴力没打上来挺可惜的,到手的75分没了。

----------------------------------

T1 【JZOJ4745】看电影

Description

听说NOIP2016大家都考得不错,于是CCF奖励省常中了 K 张变形金刚5的电影票奖励OI队的同学去看电影。可是省常中OI队的同学们共有 N(N >= K)人。于是机智的你想到了一个公平公正的方法决定哪K人去看电影。
N个人排成一圈,按顺时针顺序标号为1 - N,每次随机一个还存活的人的编号,将这个人踢出。继续上述操作,直到剩下K个人。
但这样显然太无聊了,于是小S又想出一个牛逼的方法。
N个人排成一圈,按顺时针顺序标号为1 - N,每次随机一个1 - N的编号,假设随机到的编号是X,如果编号为X人还未踢出,则将这个人踢出,否则看编号为X % N + 1(即顺时针顺序下一个编号)的人是否存活,如果还未踢出则将他踢出,否则继续看编号(X + 1)% N +1的人,如果已被踢出看顺时针的下一个…………,以此类推,直到踢出一个人为止。重复上述操作,直到剩下K个人。
已知小S的编号是Id,问按照小S的方法来他有多少的概率可以不被踢出,成功得到看电影的机会。

Input

第一行包括三个正整数,N,K,Id(1<=K<=N<=10^9,1<=ID<=N )

Output

一行一个最简分数,表示小S可以看到电影的概率。
(如果概率为1或0,请输出1/1或0/1)

---------------------------

因为在环上每个人的位置和被选中的概率是相同的。所以所有人能看电影的概率和为K。即一个人看电影的概率是K/N。约分后输出即可。

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int n,m,k,ld;
int gcd(int a,int b)
{
if(b==)return a;
return gcd(b,a%b);
}
int main()
{
scanf("%d%d%d",&n,&m,&ld);
k=gcd(n,m);
printf("%d/%d",m/k,n/k);
return ;
}

T2 【JZOJ4746】树塔狂想曲

相信大家都在长训班学过树塔问题,题目很简单求最大化一个三角形数塔从上往下走的路径和。走的规则是:(i,j)号点只能走向(i+1,j)或者(i+1,j+1)。如下图是一个数塔,映射到该数塔上行走的规则为:从左上角的点开始,向下走或向右下走直到最底层结束。
       1
       3 8
       2 5 0
       1 4 3 8
       1 4 2 5 0
路径最大和是1+8+5+4+4 = 22,1+8+5+3+5 = 22或者1+8+0+8+5 = 22。
小S觉得这个问题so easy。于是他提高了点难度,他每次ban掉一个点,然后询问你不走该点的最大路径和。

当然他上一个询问被ban掉的点过一个询问会恢复(即每次他在原图的基础上ban掉一个点,而不是永久化的修改)。

n<=1000 m<=50W

----------------------------------

看完题目后不难想到要维护最大值和次大值。我们不妨从上往下DP一次,从下往上DP一次,来维护$(i,j)$的最大值。

写法就是$tot[i][j]=\max(f[i-1][j-1],f[i-1][j])+\max(ff[i+1][j],ff[i+1][j+1])+a[i][j]$

最大值和次大值再遍历一遍就可以求出来了。

#include<bits/stdc++.h>
using namespace std;
int f[][],ff[][],sum[],ans[],tot[][],second[];
int n,m,a[][];
inline int read()
{
int x=,f=;char ch=getchar();
while(!isdigit(ch)){if (ch=='-') f=-;ch=getchar();}
while(isdigit(ch)){x=x*+ch-'';ch=getchar();}
return x*f;
}
void dp()
{
f[][]=a[][];
for (int i=;i<=n;i++)
for (int j=;j<=i;j++) f[i][j]=max(f[i-][j-],f[i-][j])+a[i][j];
for (int i=n;i>=;i--)
for (int j=i;j>=;j--) ff[i][j]=max(ff[i+][j],ff[i+][j+])+a[i][j];
for (int i=;i<=n;i++)
for (int j=;j<=i;j++) tot[i][j]=max(f[i-][j-],f[i-][j])+max(ff[i+][j],ff[i+][j+])+a[i][j];
for (int i=;i<=n;i++)
for (int j=;j<=i;j++)
if (tot[i][j]>ans[i]) ans[i]=tot[i][j],sum[i]=j;
for (int i=;i<=n;i++)
for (int j=;j<=i;j++)
if (j!=sum[i])
if (tot[i][j]>second[i]) second[i]=tot[i][j];
}
int main()
{
n=read(),m=read();
for (int i=;i<=n;i++)
for (int j=;j<=i;j++) a[i][j]=read();
dp();
for (int i=;i<=m;i++)
{
int x=read(),y=read();
if (x==&&y==){
cout<<-<<endl;
continue;
}
if (ans[x]==tot[x][y]) cout<<second[x]<<endl;
else cout<<ans[x]<<endl;
}
return ;
}

T3 【JZOJ4747】被粉碎的线段树

--------------------------------

我是没有看懂正解……贴一个正解连接吧:https://blog.csdn.net/dianning8393/article/details/101620538

不难想到75分的做法:同样使用线段树,只不过把每个区间的mid改为他给出的mid即可。区间权值设为1。注意要使用动态开点,如果使用2倍编号类型的线段树会挂25分,因为他给出的树不是完全二叉树。

貌似再加一些限制语句就可以到85分了,不过我没试过。

#include<bits/stdc++.h>
using namespace std;
struct node
{
int l,r,sum,lc,rc;
}tree[];
int n,m,a[],cnt,cut[],tot;
inline int read()
{
int x=,f=;char ch=getchar();
while(!isdigit(ch)){if (ch=='-') f=-;ch=getchar();}
while(isdigit(ch)){x=x*+ch-'';ch=getchar();}
return x*f;
}
inline void build(int index,int l,int r)
{
tree[index].l=l;tree[index].r=r;
if (l==r){
tree[index].sum=;
return;
}
int mid=a[++cnt];cut[index]=mid;
if (!tree[index].lc) tree[index].lc=++tot,build(tree[index].lc,l,mid);
if (!tree[index].rc) tree[index].rc=++tot,build(tree[index].rc,mid+,r);
tree[index].sum=;
}
inline int query(int index,int l,int r)
{
if (l<=tree[index].l&&tree[index].r<=r) return tree[index].sum;
int mid=cut[index],res=;
if (l<=mid) res+=query(tree[index].lc,l,r);
if (r>mid) res+=query(tree[index].rc,l,r);
return res;
}
int main()
{
n=read(),m=read();
for (register int i=;i<n;i++) a[i]=read();
tot=;
build(,,n);
for (register int i=;i<=m;i++)
{
int x=read(),y=read();
printf("%d\n",query(,x,y));
}
return ;
}

6月28日考试 题解(GCD约分+动态规划+树状数组二维偏序)的更多相关文章

  1. 3月28日考试 题解(二分答案+树形DP+数学(高精))

    前言:考试挂了很多分,难受…… --------------------- T1:防御 题意简述:给一条长度为$n$的序列,第$i$个数的值为$a[i]$.现让你将序列分成$m$段,且让和最小的一段尽 ...

  2. 【题解】Music Festival(树状数组优化dp)

    [题解]Music Festival(树状数组优化dp) Gym - 101908F 题意:有\(n\)种节目,每种节目有起始时间和结束时间和权值.同一时刻只能看一个节目(边界不算),在所有种类都看过 ...

  3. HDU 4947 GCD Array 容斥原理+树状数组

    GCD Array Time Limit: 11000/5500 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total ...

  4. HDU 5869 Different GCD Subarray Query (GCD种类预处理+树状数组维护)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5869 问你l~r之间的连续序列的gcd种类. 首先固定右端点,预处理gcd不同尽量靠右的位置(此时gc ...

  5. HDU 5869 Different GCD Subarray Query 树状数组+离线

    Problem Description This is a simple problem. The teacher gives Bob a list of problems about GCD (Gr ...

  6. HDU 5869 Different GCD Subarray Query 树状数组 + 一些数学背景

    http://acm.hdu.edu.cn/showproblem.php?pid=5869 题意:给定一个数组,然后给出若干个询问,询问[L, R]中,有多少个子数组的gcd是不同的. 就是[L, ...

  7. 7月13日考试 题解(DFS序+期望+线段树优化建图)

    T1 sign 题目大意:给出一棵 N 个节点的树,求所有起点为叶节点的有向路径,其 上每一条边权值和的和.N<=10000 水题.考试的时候毒瘤出题人(学长orz)把读入顺序改了一下,于是很多 ...

  8. 7月15日考试 题解(链表+状压DP+思维题)

    前言:蒟蒻太弱了,全打的暴力QAQ. --------------------- T1 小Z的求和 题目大意:求$\sum\limits_{i=1}^n \sum\limits_{j=i}^n kth ...

  9. 3月21日考试 题解(数据结构+区间DP+贪心)

    前言:T3写挂了,有点难受. --------------- T1 中位数 题意简述:给你一段长度为$n$的序列,分别输出$[1,2k-1]$的中位数$(2k-1\leq n)$. --------- ...

随机推荐

  1. Ubuntu下编译安装postgreSQL 10.5

    Ubuntu下编译安装postgreSQL 10.5 ubuntu 16.04 LTS系统postgreSQL 10.5 安装包准备 1.从PostgreSQL官网下载PostgreSQL的安装包 安 ...

  2. JVM 专题二十二:垃圾回收(六)垃圾回收器 (三)

    4. GC日志分析 4.1 日志分析 通过阅读GC日志,我们可以了解Java虚拟机内存分配与回收策略. 内存分配与垃圾回收的参数列表-XX:+PrintGC:输出GC日志.类似-verbose: gc ...

  3. Vue中使用websocket

    <template>   <div class="test">websocket demo</div></template> < ...

  4. 基于SSM框架的简单问答社区

    前言:学习了Spring.SpringMVC.MyBatis框架后,开发了一套简单的问答社区,前端采用Bootstrap开发框架. 版本信息 IDEA:2020.1.2 JDK:14.0.1 Mave ...

  5. kubernetes+Azure DevOps实现.Net Core项目的自动化部署&均衡负载

    1. 前言 2. Net Core项目本身的准备 2.1 dockerfile 2.2 创建kubernetes用于helm的chart包 2.2.1 说明 2.2.2 chart文件目录和文件组成 ...

  6. Yandex企业邮箱申请教程

    注册账号 首先你需要有Yandex的账号,这里就不多说了. 注册企业邮箱 注册完账号并登录后打开:https://connect.yandex.com/pdd/ 输入你的域名 来到验证界面,这里建议m ...

  7. 题解 洛谷 P6349 【[PA2011]Kangaroos】

    先考虑对题目进行转化,我们称两个区间有交集为这两个区间能匹配,每个询问就是在序列中最长能连续匹配的长度. 对序列中的一个区间\([l,r]\)和询问的一个区间\([L,R]\),若满足\(L \leq ...

  8. APP自动化 -- 坐标获取和点击

    一.获取元素坐标 二.点击坐标 1.driver的点击(这个可以实现多点同时点击) 1)执行 这个coordinate变量必须是一个list coordinate_list = [(0, 0), (1 ...

  9. MySQL之外键、联合查询、子查询

    外键(foreign key): 外面的键(键不在自己表中),如果一张表中有一个字段(非主键)指向另外一张表的主键,那么将该字段称之为外键. 外键可以在创建表的时候或者创建表之后增加(但是要考虑数据的 ...

  10. 【CVPR2020】Wavelet Integrated CNNs for Noise-Robust Image Classification

    深度学习中的下采样(max-pooing, average-pooling, strided-convolution)通常会有两个不足:破坏了目标的基本结构.放大随机噪声.上采样操作同样容易受到影响. ...