首页 > 其他分享 >P4799 [CEOI2015 Day2] 世界冰球锦标赛

P4799 [CEOI2015 Day2] 世界冰球锦标赛

时间:2024-02-26 14:01:15浏览次数:36  
标签:P4799 23 Day2 ll CEOI2015 long getchar

原题链接

题解

折半搜索
前半部分的所有组合(二进制表示)存起来,然后遍历后半部分的组合,找到第一个加起来不大于M的

= code

#define ll long long
#include<bits/stdc++.h>
using namespace std;

inline void read(ll &x) {  
	x = 0;
	ll flag = 1;
	char c = getchar();
    while(c < '0' || c > '9'){
        if(c == '-')flag = -1;
        c = getchar();
    }
	while(c >= '0' && c <= '9') {
		x = (x << 3) + (x << 1) + (c ^ 48); 
		c = getchar();
	}
	x *= flag;
}

inline void write(ll x)
{
    if(x < 0){
    	putchar('-');
		x = -x;
	}
    if(x > 9) 
		write(x / 10);
    putchar(x % 10 + '0');
}

ll n,m,mid;
ll a[23]={0},b[23]={0};
ll vala[(1<<21)+5]={0};

int main()
{
    read(n); read(m);
    mid=n>>1;
    for(ll i=1;i<=mid;i++) read(a[i]);

    for(ll i=1;i<=n-mid;i++) read(b[i]);

    ll cnt=(1<<mid);
    for(ll i=0;i<=(1<<mid)-1;i++)
        for(ll k=1;k<=mid;k++)
            if((1<<(k-1))&i) vala[i]+=a[k];

    sort(vala,vala+cnt);

    mid=n-mid;
    ll ans=0;
    for(ll i=0;i<=(1<<mid)-1;i++)
    {
        ll sum=0;
        for(ll k=1;k<=mid;k++) if((1<<(k-1))&i) sum+=b[k];
        ans+=lower_bound(vala,vala+cnt,m-sum+1)-vala;
    }
    write(ans);
    putchar('\n');
    return 0;
}

标签:P4799,23,Day2,ll,CEOI2015,long,getchar
From: https://www.cnblogs.com/pure4knowledge/p/18034201

相关文章

  • Linux学习-day2
    1.解释传统运维是什么;解释云计算运维是什么;区别在哪?传统运维需要去机房,与机器打交道,需要承受机房的低温、高噪音环境;云计算运维相比传统运维实现了由实转需的变化,坐在办公室,对云服务器进行维护,对程序和软件进行安装部署,以及日常的监控和维护。2.解释你理解的服务器机房。......
  • 今天继续学习day2
    56函数的分文件编写----63指针啥的一堆,,,有必要回看。--------c++语言啥的。呃呃呃呃我好像要跑的话需要用代码仓库的代码url送过去,有一个克隆仓库?我记得,既然我是连的服务器,那我的本地仓库是啥呢?我是不是应该在GitHub搞一个代码url?放好我需要的试的g++14.49:VSCode工作区就......
  • day2 复习
    操作系统有什么用把对硬件的复杂操作转化成一个一个接口,从繁(高低电频)到简(想干什么干什么)计算机由哪三大部分组成操作系统,接受外部指令,控制硬件硬件,存储信息,输入信息,输出信息应用程序:便利生活,具体干活简述操作系统和应用程序的启动流程双击(按电源键)把指令发送给操作......
  • day29 回溯算法part5 代码随想录算法训练营 47. 全排列 II
    题目:47.全排列II我的感悟:用了一层判断,感觉也挺好用的理解难点:老师的写法,主要是理解used【i】和used[i-1]的概念我说怎么参考答案看不懂呢,它把两个判断放在一起写了。我的代码:用了一层判断classSolution:defpermuteUnique(self,nums:List[int])->List[Lis......
  • day29 回溯算法part5 代码随想录算法训练营 46. 全排列
    题目:46.全排列我的感悟:看不下去视频,可以先看文字讲解。看答案。带着疑问去看视频,效果会更好。加油!理解难点:排列,不用start_index了借助used=1来过滤掉[1,1,1]这种情况。如果不加ifused[i]==1,continue就会出现重复的。如下图: 代码示例:classSolution:d......
  • day29 回溯算法part5 代码随想录算法训练营 491. 非递减子序列
    题目:491.非递减子序列我的感悟:难不怕,不行就抄一遍,再默写一遍,多记忆几遍。加油!!!理解难点:uset是本层的, res收获的是节点(满足要求的节点),不用return(用了return是仅仅收集叶子节点的)判断的逻辑,是nums[i]当前的节点和目标的path的区别代码示例:classSolution:......
  • day28 回溯算法part4 代码随想录算法训练营 90. 子集 II
    题目:90.子集II我的感悟:只要功夫深,铁树也开花参考答案,没我写的好理解难点:去重代码难点:i-1的含义易错点:nums要排序回溯要写i+1path.append要添加的是nums[i]代码示例:classSolution:defsubsetsWithDup(self,nums:List[int])->List[List[int]]:......
  • day28 回溯算法part4 代码随想录算法训练营 78. 子集
    题目:78.子集我的感悟:看见弹幕是秒了,我有点不敢相信,自己试了试,没有通过,再看了一眼文字讲解。感觉懂了点理解难点:这题可以没有终止条件,开始我就疑惑这个终止条件怎么写注意这个nums[i]要添加进入是可以不写终止的,不会出现无线递归的,因为是从i+1开始,那会不会越界??,不会,最......
  • day28 回溯算法part4 代码随想录算法训练营 93. 复原 IP 地址
    题目:93.复原IP地址我的感悟:加油!理解难点:开始没理解,start_index的含义start_index是切割后的位置信息。代码难点:代码示例:fromtypingimportListclassSolution:defrestoreIpAddresses(self,s:str)->List[str]:#找3个分割点?#最后......
  • LOJ #2876. 「JOISC 2014 Day2」水壶 题解
    DescriptionJOI君所居住的IOI市以一年四季都十分炎热著称。IOI市被分成\(H\)行,每行包含\(W\)块区域。每个区域都是建筑物、原野、墙壁之一。IOI市有\(P\)个区域是建筑物,坐标分别为\((A_1,B_1),\)\((A_2,B_2),\)\(\ldots,\)\((A_P,B_P)\)。JOI君只能进入建......