noip2019集训测试赛(二)

Problem A: 余数

Time Limit: 1000 ms Memory Limit: 512 MB

Description

Input

Output

Sample Input
3 4
Sample Output
4

HINT

Solution

那个所谓\(\sqrt n\)的东西叫做整除分块。

显然对于\(n÷i\),当$i<=\sqrt n $时,每个i都有一种取法

当\(n>=i>\sqrt n\),i每加\(\sqrt n\),\(n÷i\)的值就+1

然后就可以根号时间复杂度求了。

#include<bits/stdc++.h>
using namespace std;
#define mod 1000000007
const unsigned long long inv2=5e8+4;
unsigned long long n,m,ans=0;
signed main(){
    scanf("%llu%llu",&n,&m);
    for(unsigned long long i=1,pos;i<=min(n,m);i=pos+1){
        pos=min((n/(n/i)),m);
        (ans+=n%mod*((pos-i+1)%mod)%mod-(i+pos)%mod*((pos-i+1)%mod)%mod*inv2%mod*((n/i)%mod)%mod+mod)%=mod;
    }
    if(m>n)(ans+=n%mod*((m-n)%mod)%mod)%=mod;
    printf("%llu\n",ans%mod);
}

Problem B: 糖果

Time Limit: 1000 ms Memory Limit: 512 MB

Description

Input

Output

Sample Input
5
8 7 4 8 3
4 2 5 3 7
Sample Output
3
1 4 5

HINT

Solution

把糖果们按照a值从大到小排序,然后先取第一个出来,之后的两两分组,每组取b值较大的一个

易证这样是满足要求的(是因为我不会严谨证明)

#include<bits/stdc++.h>
using namespace std;
int n;
struct qwq{
    int a,b;
    int id;
}a[200001];
bool cmp(qwq a,qwq b){
    return a.a>b.a;
}
bool vis[200001];
int main(){
    scanf("%d",&n);
    for(int i=1;i<=n;++i){
        scanf("%d",&a[i].a);
    }
    for(int i=1;i<=n;++i){
        scanf("%d",&a[i].b);
        a[i].id=i;
    }
    sort(a+1,a+1+n,cmp);
    for(int i=2;i<=n;i+=2){
        if(a[i].b>a[i+1].b)vis[i]=true;
        else vis[i+1]=true;
    }
    printf("%d\n",(n/2)+1);
    printf("%d ",a[1].id);
    for(int i=2;i<=n;++i){
        if(vis[i])printf("%d ",a[i].id);
    }
}

Problem C: 虫子

Time Limit: 2000 ms Memory Limit: 512 MB

Description

Input

Output

Sample Input
5
1 2 2 1
1 2 3 4 5
5
1 3 4
1 4 5
2 2 3
1 5 2
1 1 4
Sample Output
1.64
1.80
2.28
2.32
2.80
1.84

HINT

Solution

还不会,等我学了树剖再说。

原文地址:https://www.cnblogs.com/youddjxd/p/11329556.html

时间: 2024-11-05 10:12:00

noip2019集训测试赛(二)的相关文章

[补档]noip2019集训测试赛(十二)

Problem A: 记忆(memory) Time Limit: 1000 ms Memory Limit: 512 MB Description 你在跟朋友玩一个记忆游戏. 朋友首先给你看了n个长度相同的串,然后从中等概率随机选择了一个串. 每一轮你可以询问一个位置上的正确字符,如果能够凭借已有的信息确定出朋友所选的串,那么游戏就结束了,你的成绩就是所用的轮数. 由于你实在太笨,不会任何策略,因此你采用一种方法,每次等概率随机询问一个未询问过的位置的字符. 现在你想知道,在这种情况下,你猜出

[补档]noip2019集训测试赛(十五)

Problem A: 传送带 Time Limit: 1000 ms Memory Limit: 256 MB Description 在一个二维平面上有两条传送带,每一条传送带可以看成是一条线段.两条传送带分别为线段AB和线段CD.小y在AB上的移动速度为P,在CD上的移动速度为Q,在平面上的移动速度R.现在,小y想从A点走到D点,请问他最少需要走多长时间. Input 第一行是4个整数,表示A和B的坐标,分别为Ax,Ay,Bx,By. 第二行是4个整数,表示C和D的坐标,分别为Cx,Cy,D

noip2019集训测试赛(四)

Problem A: fibonacci Time Limit: 3000 ms Memory Limit: 256 MB Description Input 第一行两个数 N,M . 第二行 N 个数 a1,a2,...,an . 接下来 M 行, 每行代表题目描述中的一种操作. Output 对于每个询问, 输出一行, 表示答案. Sample Input 5 4 1 1 2 1 1 2 1 5 1 2 4 2 2 2 4 2 1 5 Sample Output 5 7 9 HINT 对于

noip2019集训测试赛(七)

Problem A: Maze Time Limit: 1000 ms Memory Limit: 256 MB Description 考虑一个N×M的网格,每个网格要么是空的,要么是障碍物.整个网格四周都是墙壁(即第1行和第n行,第1列和第m列都是墙壁),墙壁有且仅有两处开口,分别代表起点和终点.起点总是在网格左边,终点总是在网格右边.你只能朝4个方向移动:上下左右.数据保证从起点到终点至少有一条路径. 从起点到终点可能有很多条路径,请找出有多少个网格是所有路径的必经网格. Input 第一

[补档]noip2019集训测试赛(八)

Problem B: 2048 Special Judge Time Limit: 1000 ms Memory Limit: 256 MB Description 2048曾经是一款风靡全球的小游戏. 今天,我们换一种方式来玩这个小游戏. 现在,你有一个双端队列,你只能把元素从左端或从右端放入双端队列中.一旦放入就不得取出.放入后,若队列中有连续两个相同的元素,它们将自动合并变成一个新的元素--原来那两个元素的和.若新的元素与它相邻的元素相同,则继续合并-- 如:双端队列中有2, 4, 16三

【2016北京集训测试赛(八)】 crash的数列

Description 题解 题目说这是一个具有神奇特性的数列!这句话是非常有用的因为我们发现,如果套着这个数列的定义再从原数列引出一个新数列,它居然还是一样的...... 于是我们就想到了能不能用多点数列套着来加速转移呢? 但是发现好像太多数列套起来是可以烦死人的...... 我们就采用嵌套两次吧,记原数列为A,第一层嵌套为B,第二层嵌套为C. 我们其实可以发现一些规律,对于Ci,它对应了B中i的个数:对于Bi,它对应了A中i的个数. 稍加处理即可,我们一边计算一边模拟数列的运算,同时可以计算

2016集训测试赛(二十五)小结

这场测试赛有必要小结一下. 昨晚 1 点才睡, 今天状态很差, 先睡了 1 个小时, 然后开始打比赛. 第一题不大会做, 写了一个代码后发现是错的, 第二题看不懂题, 第三题简单地分析了一下, 发现是一个树形DP . 然后做 T3 , 大概推了很久, 写了很久, 又写了几个对拍, 搞到 11 点才搞掂. 这时候我发现 T1 有 50 分是我可做的, 然后 T2 的题意仍然不是很明确, 我想尝试着写写 T2 , 这个必须要写出来才能看出题意是不是这样, 写着写着发现 T2 的题意不是我理解的这样,

[北京集训测试赛(三)]灯(Light)-奇怪乱搞数学题-素数

Problem 灯 题目大意 n盏灯排成一列,标号一到n,一开始标号为1的灯亮着. 现在依次对于2~n的每一个质数pi,指定一盏亮着的灯ai,点亮所有标号为$A[i]\pm kP_i$的灯. 有spj,任意一种方案即可. 输入一个整数n,输出点灯方案. Solution 首先写个暴力,考虑一下小范围的数据. 我们发现$n<16$的时候没有完美解,都是n-1.再算下去,发现$n>16$的时候任意一组都有完美解. 我们分析一下这个玩意儿. 把一到n的灯集体下标前移1,变成0~n-1.这时候当我们点

【2016北京集训测试赛(八)】直径

注意:时限更改为4s 题解 考虑最原始的直径求法:找到离根节点(或离其他任意一点)最远的节点far1,再从far1出发找到离far1最远的节点far2,far1至far2的距离即为直径. 题目中提到了将原树的子树复制成新子树这一操作,显然如果我们将子树真正复制出来是会爆炸的. 实际上我们可以将每棵新子树中,真正有用的节点提取出来,以简化每个子树的结构,再按照题目的要求连接各个新子树. 我们用虚树来重构每一棵子树.每棵子树的虚树的关键点应至少包含: 子树的根节点. 这棵子树内部的直径的两端节点.