筆記試験の問題
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
コード:
メモリ制限: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;
}