筆記試験の問題

2418 ワード

時間制限:C/C++言語1000 MS;その他言語3000 MS
メモリ制限:C/C++言語131072 KB;その他の言語655360 KB
タイトルの説明:
シーケンスにn個の正の整数を含むシーケンスAを与え、その後、正の整数xを与え、シーケンスを任意に操作することができ、操作するたびにシーケンスの数字を選択し、xとビットまたは演算することができます.あなたの目的は、このシーケンスの中の衆数を最も多く出現させることです.すみません、人数は最大何回出ますか?
入力:
入力第1行は、与えられたシーケンスの長さと与えられた正の整数を表す2つの正の整数nおよびxのみを含む.
(1<=n<=100000,1<=x<=1000)
次の行にはn個の正の整数、すなわちこのシーケンスがあり、中間はスペースで区切られています.(1<=a_i<=1000)
出力:
出力には正の整数が1つしか含まれておらず、衆数が最も多く現れる回数を表します.
サンプル入力:
5 2
3 1 3 2 5
サンプル出力:
3
コード:
#include 
using namespace std;
#include 
#include 
#include 

//        
//   https://www.cnblogs.com/zwjjj/p/9953718.html
string intToA(int n, int radix)    //n     ,radix      
{
	string ans = "";
	do {
		int t = n % radix;

		if (t >= 0 && t <= 9)
		{
			ans += t + '0';
		}
		else
		{
			ans += t - 10 + 'a';
		}

		n /= radix;
	} while (n != 0);    //  do{}while()      0   
	reverse(ans.begin(), ans.end());
	return ans;
}

int main(void)
{
	
	//cout << (2 | 5) << endl;
	/**************************   .      **************************/
	int n; //       
	int x; //       

	//        
	cin >> n;
	cin >> x;

	//             
	int* array = new int[n];

	//       
	for (int i = 0; i < n; i++)
	{
		cin >> array[i];
	}

	//     
	/*for (int i = 0; i < n; i++)
	{
		cout << array[i] << " ";
	}
	cout << endl;*/
	long start = clock();  //    
	/**************************   .      **************************/
	// 1.        
	sort(array, array + n);

	// 2.                       
	int num[100000] = {0}; //        ,     100000

	for (int i = 0; i < n; i++)
	{
		num[array[i]]++; 
	}

	// 3.            
	int maxPosition = max_element(num, num + 100000) - num; 
	// maxPosition          ,num[maxPosition]             
	
	int mode = maxPosition; //            
	int cnt = 0; //           
	//cout << mode << " mode" << endl;
	for (int i = 0; i < n; i++)
	{
		if ((x | array[i]) == mode)
		{
			cnt++;
		}
	}
	cout << cnt << endl;
	
	//       
	delete[]array;
	long finish = clock();  //    
	
	cout << "  :" << (double)(finish - start) / CLOCKS_PER_SEC << endl;
	system("pause");
	return 0;
}