能力有限,只做前三个吧。(第三个还不会,找了位大佬的,也看不懂)
A:Ancient Civilization
题意:给你几个十进制数,转化为二进制。新数,这几个数中每一位,1多的话该位出1,0多出0,一样多出0。然后将2进制转化为十进制。
#include<iostream>
using namespace std;
int main()
{
int t;
scanf("%d", &t);
while (t--)
{
int a[32], b[32] = { 0 }, c[32];
int n, l,m;
scanf("%d%d", &n, &l);
for (int i = 1; i <= n; i++)
{
scanf("%d", &m);
for (int j = l; j >=1 ; j--)
{
a[j] = m % 2;
m /= 2;
b[j] += a[j];
}
}
int sum=0;
for (int i = 1; i <= l; i++)
{
if (b[i] > n / 2)
c[i] = 1;
else
c[i] = 0;
sum =sum*2+c[i];
}
cout << sum << endl;
}
}
B:Elementary Particles
题意:
输入一段数字,只要分成的连续两组数字(一个带首,一个带尾)相同位置有相同的数,就算一个序列,现求最长的序列。
#include<iostream>
#include<algorithm>
#include<cmath>
#include<map>
using namespace std;
const int maxn = 0x7ffffff;
map<int, int>mp;
int main()
{
int t;
scanf("%d", &t);
while (t--)
{
mp.clear();
int n,a[150010],res=maxn;
scanf("%d", &n);
for (int i = 1; i <= n; i++)
scanf("%d", &a[i]);
for (int i = 1; i <= n; i++)
{
if (mp[a[i]] == 0)
mp[a[i]] = i;
else
{
res = min(res, i - mp[a[i]]);
mp[a[i]] = i;
}
}
if (res == maxn)
cout << "-1" << endl;
else
cout << n - res << endl;
}
}
C:Road Optimization
先留下个网址。后面再看看。