LibreOJ #515. 「LibreOJ β Round #2」贪心只能过样例

二次联通门 : LibreOJ #515. 「LibreOJ β Round #2」贪心只能过样例

/*
    LibreOJ #515. 「LibreOJ β Round #2」贪心只能过样例

    很显然
    贪心方程哦不
    dp方程为 f[i][j]=f[i-1][j-k*k]
    但是这样的话复杂度就是O(N ^ 5)

    那么就用bitset优化一下
    就ok了
*/
#include <iostream>
#include <cstdio>
#include <bitset>

void read (int &now)
{
    register char word = getchar ();
    for (; !isdigit (word); word = getchar ());
    for (now = 0; isdigit (word); now = now * 10 + word - ‘0‘, word = getchar ());
}

#define Max 1000900

using namespace std;
bitset <Max> number[110];

int main (int argc, char *argv[])
{
    register int i, j;
    int N, l, r;

    read (N);
    number[0].set (0);
    for (i = 1; i <= N; ++ i)
    {
        number[i].reset ();
        read (l);
        read (r);
        for (j = l; j <= r; ++ j)
            number[i] |= (number[i - 1] << (j * j));
    }
    printf ("%d\n", number[N].count ());

    return 0;
}
时间: 2024-10-13 11:13:54

LibreOJ #515. 「LibreOJ β Round #2」贪心只能过样例的相关文章

Loj515 「LibreOJ β Round #2」贪心只能过样例 - Bitset,Dp

bitset的基本应用了 类似可行性背包的dp考虑 复杂度O(nmL/64) 1 #include <bits/stdc++.h> 2 using namespace std; 3 4 bitset <1000005> bs,bs0; 5 6 int n,a,b; 7 8 int main(){ 9 ios::sync_with_stdio(false); 10 cin>>n; 11 bs[0]=1; 12 for(int i=1;i<=n;i++){ 13 bs

汕头市队赛 SRM10 T1 贪心只能过样例

贪心只能过样例 SRM 10 描述 给出n个数a[i](1<=a[i]<=n),问最多能把这些数分成几组,使得每个数a[i]所在的组至少有a[i]个数 输入格式 第一行一个整数n,接下来n行每行一个整数分别是a[1],a[2],...,a[n] 输出格式 一行,输出答案,一个整数 样例输入 5 2 1 2 2 3 样例输出 2 数据范围与约定 数据有梯度,分布如下: 0<n<=20 7组数据 20<n<=5000 15组数据 5000<n<=1000000

LibreOJ 515 贪心只能过样例

题目链接:https://loj.ac/problem/515 题意: 给n(测试数据全是100)个数,第i个数x的取值可以在[a,b](1<=a,b<=100),求sigma(x*x)的取值有多少种. 题解: 这道题很容易得出一个O(n^5)的复杂度的一个dp(暴力),但是很明显这个复杂度是不行的. 这道题可以产生的最大的数是100*100*100=1e6,于是我们可以借助一个叫做bitset的东西来优化一下我们的dp(暴力). bitset可以看做一个bool数组(每一位都是0/1),也可

loj515贪心只能过样例

bitset练习题... 位运算真的是玄学... 一开始真的"只能过样例" 后来发现把左移写成了小于号 鬼知道我在想什么/手动微笑 loj第一题 #include<iostream> #include<cstdio> #include<cstdlib> #include<cmath> #include<cstring> #include<algorithm> #include<vector> #incl

LibreOJ #514. 「LibreOJ β Round #2」模拟只会猜题意

二次联通门 : LibreOJ #514. 「LibreOJ β Round #2」模拟只会猜题意 /* LibreOJ #514. 「LibreOJ β Round #2」模拟只会猜题意 本想打个暴力找找规律 结果交上去就A了... 读入所有数 处理出前缀和 然后枚举区间长度 处理处1~n的答案 后O(1)查询即可 复杂度O(n^2 + m) */ #include <iostream> #include <cstring> #include <cstdio> voi

LibreOJ #507. 「LibreOJ NOI Round #1」接竹竿

二次联通门 : LibreOJ #507. 「LibreOJ NOI Round #1」接竹竿 /* LibreOJ #507. 「LibreOJ NOI Round #1」接竹竿 dp 记录一下前驱就好了 再随便用前缀和优化一下 O(N) */ #include <iostream> #include <cstdio> const int BUF = 100000010; char Buf[BUF], *buf = Buf; inline long long max (long

LibreOJ #525. 「LibreOJ β Round #4」多项式

二次联通门 : LibreOJ #525. 「LibreOJ β Round #4」多项式 官方题解 : /* LibreOJ #525. 「LibreOJ β Round #4」多项式 由于会有多种解 所以只需要找出一组特殊解即可 */ #include <cstdio> #include <iostream> void read (int &now) { register char c = getchar (); for (now = 0; !isdigit (c);

LibreOJ #528. 「LibreOJ β Round #4」求和

二次联通门 : LibreOJ #528. 「LibreOJ β Round #4」求和 /* LibreOJ #528. 「LibreOJ β Round #4」求和 题目要求的是有多少对数满足他们的最大公约数的质因子不超过一个 f (x) 表示有多少对数满足最大公约数中含有x^2这个因子 那么f (x) = N / x ^ 2 * M * (x ^ 2) 答案即为所有数字减去不符合要求的数字个数 但是我们发现,可能某对数字的最大公约数含有多个质数平方因子 那么在处理的时候就会重复筛去 这时我

LibreOJ #526. 「LibreOJ β Round #4」子集

二次联通门 : LibreOJ #526. 「LibreOJ β Round #4」子集 /* LibreOJ #526. 「LibreOJ β Round #4」子集 考虑一下,若两个数奇偶性相同 若同为奇数, 那加1后就是偶数, gcd的乘积就一定不是1 偶数相同 那么我们把原数中的偶数分为一个集合,奇数分为一个集合 把互相之间不符合要求的连边 那么问题就转化为了二分图求最大独立集 */ #include <cstdio> #include <iostream> #includ