也不啥比赛的题,瞅瞅得了,学学比赛的用法,也找不着题目了,可倒灶了

  1. 伯劳的问题
    |a|,|b|都小于 10^13,超出 int(10^9)范围,所以使用 long long (10^18)
    int main()
    {
    int n;
    cin >> n;
    while (n–)
    {
    ll a, b;
    cin >> a >> b;
    cout << a + b << endl;
    }
    return 0;
    }
  2. 宝可梦大师
    数组循环求和;输入时直接判断奇偶累加
    int main()
    {
    int a = 0, b = 0;
    int n;
    scanf("%d", &n);
    int arr[maxn];
    for(int i = 0; i < n; ++i)
    {
    scanf("%d", &arr[i]);
    if(arr[i] % 2 == 0) a += arr[i];
    else b += arr[i];
    }
    cout << a << ’ ’ << b;
    return 0;
    }
  3. 联合作战计划
    由题意易得,若序列无相邻元素即输出 1,否则输出 2
    int main()
    {
    int q;
    scanf("%d", &q);
    while(q–)
    {
    int n;
    int arr[maxn];
    scanf("%d", &n);
    for(int i = 0; i < n; ++i)
    scanf("%d", &arr[i]);
    if(n == 1)
    {
    printf(“1\n”);
    continue;
    }
    sort(arr, arr + n);
    int flag = 0;
    for(int i = 1; i < n; ++i)
    {
    if(arr[i] - arr[i - 1] == 1)
    {
    printf(“2\n”);
    flag = 1;
    break;
    }
    }
    if(!flag)
    printf(“1\n”);
    }
    return 0;
    }
  4. 镜子大师
    先将三个数排序,将问题转换成如何把最小值分配给最大值与次大值
    易得如果次大值与最小值相加大于等于最大值则答案为三者求和除 2,否则答案为最小
    值与次大值的和
    bool cmp(int x, int y)
    {
    return x > y;
    }
    int main()
    {
    int T;
    scanf("%d", &T);
    while(T–)
    {
    int a[3];
    scanf("%d %d %d", &a[0], &a[1], &a[2]);
    sort(a, a + 3, cmp);
    int ans = 0;
    if(a[1] + a[2] >= a[0]) ans = (a[0] + a[1] + a[2]) / 2;
    else ans = min(a[0], a[1] + a[2]);
    cout << ans << endl;
    }
    }
  5. 绝地武士
    由题意易得,我们只需要得出能力值相同中人数的最大值
    数据范围 q≤10^30,显然需要使用字符串,注意前置 0
    int main()
    {
    int n;
    while(scanf("%d", &n) != EOF)
    {
    map<string, int> mp;
    for(int i = 0; i < n; ++i)
    {
    string ss;
    cin >> ss;
    for(string :: iterator its = ss.begin(); *its == ‘0’; ss.erase(its));
    mp[ss]++;
    }
    map<string, int> :: iterator it;
    int sum = 0;
    for(it = mp.begin(); it != mp.end(); ++it)
    {
    sum = max(sum, it->second);
    }
    printf("%d\n", sum);
    }

}
6. 织梦岛
BFS 模板题,二维变三维
int L, R, C;
struct Maze
{
int x, y, z;
}m;
char maze[35][35][35];
int d[35][35][35];
int sx, sy, sz, ex, ey, ez;
int dx[6] = {1, -1, 0, 0, 0, 0}, dy[6] = {0, 0, 1, -1, 0, 0}, dz[6] = {0, 0, 0, 0, 1, -1};
int bfs()
{
queue q;
for (int i = 0; i < L; ++i)
{
for (int j = 0; j < R; ++j)
{
for (int k = 0; k < C; ++k)
d[i][j][k] = INF;
}
}
d[sx][sy][sz] = 0;
m.x = sx, m.y = sy, m.z = sz;
q.push(m);
while (q.size())
{
Maze temp = q.front();
q.pop();
if (temp.x == ex && temp.y == ey && temp.z == ez) break;
for (int i = 0; i < 6; ++i)
{
int nx = temp.x + dx[i], ny = temp.y + dy[i], nz = temp.z + dz[i];
if ((nx >= 0 && nx < L) && (ny >= 0 && ny < R) && (nz >= 0 && nz <
C) && d[nx][ny][nz] == INF && maze[nx][ny][nz] != ‘#’)
{
Maze ans;
ans.x = nx, ans.y = ny, ans.z = nz;
q.push(ans);
d[nx][ny][nz] = d[temp.x][temp.y][temp.z] + 1;
}
}
}
return d[ex][ey][ez];
}
int main()
{
while (cin >> L >> R >> C)
{
if (L == 0 && R == 0 && C == 0) break;
for (int i = 0; i < L; ++i)
{
for (int j = 0; j < R; ++j)
{
for (int k = 0; k < C; ++k)
{
cin >> maze[i][j][k];
if (maze[i][j][k] == ‘S’)
sx = i, sy = j, sz = k;
if (maze[i][j][k] == ‘E’)
ex = i, ey = j, ez = k;
}
}
getchar();
}
int num = bfs();
if (num != INF)
cout << num << endl;
else
cout << “YOU DIED” << endl;
}
return 0;
}
7. 谍战风云
由题意可得,将数转换为三进制,系数需为 0 或 1,若三进制数中存在 2,则不满
足条件
寻找三进制数中最高位的 2,将低位全置为 0 即解
ll a1[105], a2[105];
ll func(ll n)
{
memset(a1, 0, sizeof(a1));
memset(a2, 0, sizeof(a2));
int flag = 0;
while(n)
{
a1[flag++] = n % 3;
n /= 3;
}
flag++;
a2[0] = 0;
for(int i = 1; i < flag; ++i)
{
a2[i] = a1[flag - i - 1];
}
int p = 0;
for(int i = 1; i < flag; ++i)
{
if(a2[i] == 2)
{
p = i;
break;
}
}
for(int i = p - 1; i >= 0; --i)
{
if(a2[i] == 0)
{
a2[i] = 1;
for(int j = i + 1; j < flag; ++j)
a2[j] = 0;
break;
}
}
ll num = a2[0];
for(int i = 0; i < flag - 1; ++i)
num = num * 3 + a2[i + 1];
return num;
}
int main()
{
int n;
scanf("%d", &n);
while(n–)
{
ll t;
scanf("%lld", &t);
ll ans = func(t);
printf("%lld\n", ans);
}

}

发布了96 篇原创文章 · 获赞 92 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/weixin_45525272/article/details/105623954