程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> zoj 3870 異或運算

zoj 3870 異或運算

編輯:關於C++

給你n個數 問有多少種情況 兩兩異或大於兩個數中的最大值;

分析 如果a小於b 及大的為b 要想a^b大於b 及a的最高位(一定為1)與b的對應位不一樣 及b的對應位為0 就一定滿足 這樣就轉換為小的數的對應位

先排序 mark【i】表示i這個位置為0的數的個數

 

#include
#include
#include
#include
using namespace std;

int num[100010];
int cmp(int a,int b)
{
	return a>b;
}
int main()
{
	int T,i,j,n;
	scanf("%d",&T);
	while(T--)
	{
		scanf("%d",&n);
		for(i=1;i<=n;i++)
		{
			scanf("%d",&num[i]);
		}
		sort(num+1,num+1+n,cmp);
		int record[100],mark[100];
		memset(record,0,sizeof(record));
		int ans=0;
		for(i=1;i<=n;i++)
		{
			j=1;
			int x=num[i];
			while(x)
			{
				mark[j++]=x%2;
				x/=2;
			}
			ans+=record[j-1];
			for(int k=1;k

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved