/**
Author: Oliver
ProblemId: ZOJ3870 Team Formation
*/
/*
思路
1.异或运算,使用^会爆,想到二进制;
2.我们可以试着从前往后模拟一位一位的^那么只要当前位结果变大便是;
3.一般我们如何利用二进制呢?既然要爆那我们就存1的位置;
4.问题是怎么存,如何用?
5.我之前想的是每个数的每位1都存,但是那样造成的重复计算还没想出怎么避免。看了一下别人的博客,再尝试把每位数的最高位1存起来。
6.想想为什么是存最高位呢;
7.那好,现在是不是把所有的高1都存好了,然后我们up(1,n)把原本要和剩余数做异或的步骤变为和bin[]运算。
我们要的是变得比max{A,B}大。那么先看变大,那就要找大一点的那个数,这个时候我们不是和数比较,而是和剩余数的最高位比较。
注意我们要能想到,是以暴力的方法推移过去,做的优化,也就是说每次只要加上可以和这个队伍完成的数目就好了。
注意这样不会有重复(类似A and B,B and A),不会这样。因为有没有发现,每次都是一遍历的这个数为max{A,B}。
注意我们是一位一位往后移,直到吧0->1。
步骤 可以不写吗?思路很详细了吧。
*
#include <cstdio>
#include <cstring>
#include <algorithm> using namespace std; const int MAXM = 100000+10;
int bin[100];
int a[MAXM];
int main()
{
int T,n;
scanf("%d",&T);
while(T--)
{
memset(bin,0,sizeof bin);
scanf("%d",&n);
int X;
for(int i=0;i<n;i++)
{
scanf("%d",&a[i]);
X=a[i];
for(int j=31;j>=0;j--)//这里若从32开始,你试试会发生什么事
if(X&(1<<j)){//提取最高位
bin[j]++;
break;
}
}
long long ans=0;
int j;
for(int i=0;i<n;i++)
{
X=a[i];
for(j=31;j>=0;j--)
if(X&(1<<j))break;
for(;j>=0;j--)//bin[]运算
if(!(X&(1<<j))){
ans+=bin[j];
}
} printf("%lld\n",ans);
}
}

2015-04-29  22:30:05

ZOJ3870 Team Formation的更多相关文章

  1. AndyQsmart ACM学习历程——ZOJ3870 Team Formation(位运算)

    Description For an upcoming programming contest, Edward, the headmaster of Marjar University, is for ...

  2. ZOJ-3870 Team Formation

    题目大意:给n个正数,找出满足A^B>max(A,B)的对数. 题目分析: 代码如下: # include<iostream> # include<cstdio> # i ...

  3. 位运算 ZOJ 3870 Team Formation

    题目传送门 /* 题意:找出符合 A^B > max (A, B) 的组数: 位运算:异或的性质,1^1=0, 1^0=1, 0^1=1, 0^0=0:与的性质:1^1=1, 1^0=0, 0^ ...

  4. zoj The 12th Zhejiang Provincial Collegiate Programming Contest Team Formation

    http://acm.zju.edu.cn/onlinejudge/showContestProblem.do?problemId=5494 The 12th Zhejiang Provincial ...

  5. 第十二届浙江省大学生程序设计大赛-Team Formation 分类: 比赛 2015-06-26 14:22 50人阅读 评论(0) 收藏

    Team Formation Time Limit: 3 Seconds Memory Limit: 131072 KB For an upcoming programming contest, Ed ...

  6. Team Formation(思维)

    Team Formation Time Limit: 3 Seconds      Memory Limit: 131072 KB For an upcoming programming contes ...

  7. 2015 浙江省赛B Team Formation (技巧,动归)

    Team Formation For an upcoming programming contest, Edward, the headmaster of Marjar University, is ...

  8. Zoj 3870——Team Formation——————【技巧,规律】

    Team Formation Time Limit: 3 Seconds      Memory Limit: 131072 KB For an upcoming programming contes ...

  9. ZOJ 3870 Team Formation 贪心二进制

                                                    B - Team Formation Description For an upcoming progr ...

随机推荐

  1. 【转】如何使用Unity创造动态的2D水体效果

    原文:http://gamerboom.com/archives/83080 作者:Alex Rose 在本篇教程中,我们将使用简单的物理机制模拟一个动态的2D水体.我们将使用一个线性渲染器.网格渲染 ...

  2. HDOJ/HDU 1250 Hat's Fibonacci(大数~斐波拉契)

    Problem Description A Fibonacci sequence is calculated by adding the previous two members the sequen ...

  3. (java) Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity.

    /** * Definition for singly-linked list. * public class ListNode { * int val; * ListNode next; * Lis ...

  4. 网络子系统42_ip协议处理函数_数据帧的接收

    //向协议栈注册l3处理函数 1.1 void dev_add_pack(struct packet_type *pt) { int hash; //ptype_all ptype_base共用一把锁 ...

  5. ios面试题整理

    (1).weak 和assign的区别? assign: 用于非指针变量 (2).IOS开发之----#import.#include和@class的区别? 1. 如果不是c/c++,尽量用#impo ...

  6. git学习 #2:git基本操作

    本文出自   http://blog.csdn.net/shuangde800 ------------------------------------------------------------ ...

  7. Codeforces Beta Round #10 D. LCIS(DP&amp;LCIS)

    D. LCIS time limit per test 1 second memory limit per test 256 megabytes input standard input output ...

  8. 使用jsdoc-toolkit来自动生成js api文档

    近来前端组小盆友开发的类库越来越多,很多情况下彼此不知道写了些什么方法,为了更好的合作提高工作效率,找了个比较好的api文档生成方法.使用jsdoc-toolkit来自动生成js api文档. 一.  ...

  9. Servlet 过滤器

    一.过滤器介绍 在Servlet 2.3中定义了过滤器,它能够对Servlet容器的请求和响应进行检查和修改. Servlet过滤器能够在Servlet被调用之前检查Request对象,并修改Requ ...

  10. Windows开启Telnet

    为了防止无良网站的爬虫抓取文章,特此标识,转载请注明文章出处.LaplaceDemon/SJQ. http://www.cnblogs.com/shijiaqi1066/p/4301513.html ...