【NOIP2015模拟】终章-剑之魂
背景介绍
古堡,暗鸦,斜阳,和深渊……
等了三年,我独自一人,终于来到了这里……
“终焉的试炼吗?就在这里吗?”我自言自语道。
“终焉的试炼啊!就在这里啊!”我再一次自言自语道。
“这背后可能有那个东西吗?”我自言自语道。
“这背后一定有那个东西呢!”我又一次自言自语道。
我沉默着,踏上黑漆漆的索桥,小心翼翼地,拿出锋利的注入我灵魂的双剑……
“那么,我们开始吧……”我最后一次自言自语道。
题目描述
My soul of my sowrd!
终焉的试炼即将到来,作为一名有修养的剑士,虽然没有习得n刀流但是二刀流还是没问题的。然而我也是个剑的收藏者,家里屯着n把剑,每一把剑都有一个灵魂值a[i],由于一些剑之间可能有共鸣,所以我需要两把契合度最高的剑。据剑圣所说,两把编号为i,j剑的契合度为a[i] and a[j]。如何深得剑的灵魂呢?
注:AND 为按位与运算,先将数转成二进制,不满位数的补全0,然后成为两个长度相同的二进制数,处理的时候,两个相应的二进制位都为1,该位的结果值才为1,否则为0。例:0101(5) and 0011(3)=0001(1)
输入
第一行一个整数n,代表藏剑数。
第二行n个整数,第i个整数表示a[i]。
输出
输出包含一个正整数,最好的两把剑的契合度。
思路
我们先测试几组数据。1.6 and 4=4. 2.6 and 2=2. 3.4 and 2=0.不难发现,两个数越大,运算出来结果越大。由此得出解法。
解法+时间复杂度
先从大到小快排(n log n),再n^2枚举。WTF!这你都过了?别急,听完嘛。如果我们and出来的数没上一次大,后面的数and出来一定没有这次大,我们就可以break了。所以总时间复杂度为O(n log n+玄(学))
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
int n,i,u,k,a[1000001],b[1000001][32],xh,h[32][32],j,o[1000001];
long long ans;
bool bz,bj[1000001];
int ks(long long x)
{
if (x==0) return 1;
if (x==1) return 2; else
{
int s=x%2;
if (s==1) return ks(x/2)*ks(x/2)*2;else return ks(x/2)*ks(x/2);
}
}
int main()
{
freopen("sword.in","r",stdin);
freopen("sword.out","w",stdout);
scanf("%d",&n);
for (i=1;i<=n;i++)
{
scanf("%d",&a[i]);
while (a[i]!=0)
{
b[i][0]++;
b[i][b[i][0]]=a[i]%2;
a[i]/=2;
}
xh=max(xh,b[i][0]);
h[b[i][0]][0]++;
h[b[i][0]][h[b[i][0]][0]]=i;
}
bz=0;
for (i=xh;i>=1;i--)
{
if (bz==0)
{
k+=h[i][0];
for (j=1;j<=h[i][0];j++)
{
bj[h[i][j]]=1;
}
}
u=0;
for (j=1;j<=n;j++)
if (b[j][i]==1 && bj[j]==1) u++;else
{
o[0]++;
o[o[0]]=j;
}
if (u>=2)
{
ans+=ks(i-1);
for (j=1;j<=o[0];j++)
bj[o[j]]=0;
bz=1;
}
memset(o,0,sizeof(o));
}
printf("%lld",ans);
}
【NOIP2015模拟】终章-剑之魂的更多相关文章
- [JZOJ4274] [NOIP2015模拟10.28B组] 终章-剑之魂 解题报告(二进制)
Description [背景介绍]古堡,暗鸦,斜阳,和深渊……等了三年,我独自一人,终于来到了这里……“终焉的试炼吗?就在这里吗?”我自言自语道.“终焉的试炼啊!就在这里啊!”我再一次自言自语道.“ ...
- JZOJ 4273. 【NOIP2015模拟10.28B组】圣章-精灵使的魔法语
4273. [NOIP2015模拟10.28B组]圣章-精灵使的魔法语 (File IO): input:elf.in output:elf.out Time Limits: 1000 ms Mem ...
- JZOJ 4272. 【NOIP2015模拟10.28B组】序章-弗兰德的秘密
272. [NOIP2015模拟10.28B组]序章-弗兰德的秘密 (File IO): input:frand.in output:frand.out Time Limits: 1000 ms M ...
- BugPhobia终章篇章:学霸在线系统Beta阶段展示
0x00 :序言 1 universe, 9 planets, 204 countries,809 islands, 7 seas, and i had the privilege to meet y ...
- C#使用Xamarin开发可移植移动应用终章(11.获取设备信息与常用组件,开源一个可开发模版.)
前言 系列目录 C#使用Xamarin开发可移植移动应用目录 源码地址:https://github.com/l2999019/DemoApp 可以Star一下,随意 - - 说点什么.. 本系列,终 ...
- 史上最简单的 SpringCloud 教程 | 终章
https://blog.csdn.net/forezp/article/details/70148833转载请标明出处:http://blog.csdn.net/forezp/article/det ...
- SpringBoot非官方教程 | 终章:文章汇总
转载请标明出处: 原文首发于:https://www.fangzhipeng.com/springboot/2017/07/11/springboot-all/ 本文出自方志朋的博客 SpringBo ...
- JZOJ 4269. 【NOIP2015模拟10.27】挑竹签
4269. [NOIP2015模拟10.27]挑竹签 (File IO): input:mikado.in output:mikado.out Time Limits: 1000 ms Memory ...
- JDBC终章- 使用 DBUtils实现增删查改- C3P0Utils数据源/QueryRunner runner连接数据源并执行sql
JDBC终章- 使用 DBUtils实现增删查改 1.数据库结构 Create Table CREATE TABLE `user` ( `id` ) NOT NULL AUTO_INCREMENT, ...
随机推荐
- 2020-04-13:怎么在日志里排查错误,该用哪些Linux命令
能通过less命令打开文件,通过Shift+G到达文件底部,再通过?+关键字的方式来根据关键来搜索信息. 能通过grep的方式查关键字,具体用法是, grep 关键字 文件名,如果要两次在结果里查找的 ...
- C#设计模式之2-抽象工厂模式
抽象工厂模式(Abstract Factory Pattern) 该文章的最新版本已迁移至个人博客[比特飞],单击链接 https://www.byteflying.com/archives/391 ...
- .Net 桌面程序(winform,wpf,跨平台avalonia)打安装包部署到windows 入门
.Net 桌面程序(winform,wpf,跨平台avalonia)部署到windows 入门 本文以为avalonia为例,用Setup Factory 将.Net桌面程序(winform,wpf, ...
- java如何实现发送邮箱
package cn.buy.util; import java.security.GeneralSecurityException; import java.util.Properties; imp ...
- Hitool打开出现failed to create the java virtual machine
今天在安装Hitool后,打开hitool后出现了错误:failed to create the java virtual machine. 解决方法如下: 记事本打开HiTool.ini -star ...
- 喵的Unity游戏开发之路 - 轨道摄像机
前言 很多童鞋没有系统的Unity3D游戏开发基础,也不知道从何开始学.为此我们精选了一套国外优秀的Unity3D游戏开发教程,翻译整理后放送给大家,教您从零开始一步一步掌握Unity3 ...
- JavaScript学习系列博客_38_JavaScript 事件
事件(Event) - 事件指的是用户和浏览器之间的交互行为.比如:点击按钮.关闭窗口.鼠标移动.... - 我们可以为事件来绑定回调函数来响应事件. - 绑定事件的方式: 1.可以在标签的事件属性中 ...
- Hive日期、时间转换:YYYY-MM-DD与YYYYMMDD;hh.mm.ss与hhmmss的相互转换
思路 YYYY-MM-DD与YYYYMMDD:hh-mm-ss与hhmmss的相互转换有两种办法,第一种是利用UNIX时间戳函数,第二种是利用字符串拼接函数. YYYY-MM-DD与YYYYMMDD相 ...
- Leecode统计子串个数(java)
/** 获取一个字符串在另一个字符串中出现的次数.判断str2在str1中出现的次数 */ public class StringExer2 { public static void main(Str ...
- count.exe 个人项目
Github项目地址:https://github.com/bravedreamer/wordCount/tree/master/wc 一.题目描述: Word Count1. 实现一个简单而完整的软 ...