"中国东信杯"广西大学第二届程序设计竞赛(同步赛)

A - "区 块 链"
时间限制:C/C++ 2秒,其他语言4秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld

题目描述
区块链,英文名Chain of Blocks或者Blockchain,是一种基于分布式数据传输和存储和密码学等多种计算机技术的新型应用模式。

现在有一个想参加比赛的创新创业竞赛团队,下面是他们的区块链开发项目商业计划书:
1
2
3
4

5
但是现在他们遇到了一个难题:

有n个数据(字符串),储存在n个分布式数据库节点,现在有m个询问,每次需要查询某一个数据库并将他们输出。

假设查询的数据是"ABCDE",为了表示区块链中的独立性,需要将他们每一个元素之间插入空格并用英文双引号包起来,即:“A B C D E”

但是他们经过百万资金投入进行研发之后,还是发现存在巨大的技术障碍,所以想请聪明的你来帮忙,你能帮帮他们吗?

输入描述:
第一行是一个整数n表示数据个数(分布式数据库节点数)

接下来nn行,每行长度不大于100的字符串,第i行表示第i个数据,保存在第i个数据库节点里。

然后是一行一个整数mm表示查询次数

接下来mm行,每行一个整数x,表示要查询的是第x个数据库(数据库的索引从1开始)
10001≤n≤1000
1001≤x≤100
10001≤m≤1000
输出描述:
对所有询问,每个询问输出一行表示查询结果。
示例1
输入
4
Chuang
Xin
Chuang
Ye
4
1
2
3
4
输出
“C h u a n g”
“X i n”
“C h u a n g”
“Y e”

小学生bb
顺利过题字面意思,遍历输出加空格就可以了

#include<bits/stdc++.h>
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;
 
string s[1005];
 
void fin(int n)
{
    printf("\"%c",s[n][0]);
    for(int i=1;i<s[n].length();i++)
    {
        printf(" %c",s[n][i]);
    }
    printf("\"\n");
}
int main()
{
    int n;
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        cin>>s[i];
    }
    int m;
    scanf("%d",&m);
    while(m--)
    {
        int t;
        scanf("%d",&t);
        fin(t);
    }
    return 0;
}

B - "大 数 据"
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld

题目描述
大数据(Big Data),是指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。

在维克托·迈尔-舍恩伯格及肯尼斯·库克耶编写的《大数据时代》中大数据指不用随机分析法(抽样调查)这样捷径,而采用所有数据进行分析处理。大数据的5V特点(IBM提出):Volume(大量)、Velocity(高速)、Variety(多样)、Value(低价值密度)、Veracity(真实性)。

大数据作为一项我校全体学生都熟练运用的技术,同样也以近乎100%的几率出现在了大家提交的PPT和项目计划书中,因此我们也需要进行更加高强度的训练。

众所周知,大数据处理的数据容量一般以TB作为最小单位,但由于我们自主研发的先进技术形成的技术堡垒,我们经常可以在几M的数据上或者几百行的Excel结构化数据项目中见到大数据的影子,同时虽然大家都没使用Spark、MapReduce等通用框架,但还是能完美满足需求。

现在有一个创新创业团队遇到了一个很严重的技术难题,他们发现他们的大规模分布式数据库中有大量的“异常数据对”,数据库中的数据都是长度不超过10000的字符串,如果对于两个字符串ss和tt,他们其中一个在倒置后与另一个相等,那么我们就定义ss和tt是“异常数据对”。

但是由于他们数据库装的东西占用总容量高达25M,实在太多了,没有办法很好的处理,你可以帮帮他们吗?

输入描述:
输入多组数据。

第一行输入一个整数T,表示接下来有T组数据。

每组数据是两行,每行一个字符串分别表示s和t。

1≤T≤10^3

1≤∣s∣,∣t∣≤10000

|s|表示字符串ss的长度
输出描述:
对于每组数据,如果ss和tt是“异常数据对”,那么请打印一行输出 QAQ,否则输出一行 TAT。

示例1
输入
4
chuang
chuang
xin
nix
chuang
gnauhc
ye
ye
输出
TAT
QAQ
QAQ
TAT

小学生bb
数据比较小可以直接暴力跑
话说回来…这题我本来打算试试手速(妄想首刀/所以我特地没先写A而是先写C//结果我还是太菜了//比第一个选手慢了1分多钟(氦要是一秒钟那可不就有希望了吗)吧…
图
27发可还行…

#include<bits/stdc++.h>
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;
 
int fin(string a,string b)
{
    for(int i=0;i<a.length();i++)
    {
        if(a[i] != b[a.length()-1-i])return 0;
    }
    return 1;
}
int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        string a,b;
        cin>>a;
        cin>>b;
        int la=a.length(),lb=b.length();
        if(la!=lb)printf("TAT\n");
        else
        {
            int f = fin(a,b);
            if(f==1) printf("QAQ\n");
            else printf("TAT\n");
        }
         
    }
    return 0;
}

D - "云 计 算"
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 102400K,其他语言204800K
64bit IO Format: %lld

题目描述
计算科学正在经历一场革命,被称为「云计算」,是在互联网上访问软件应用程序、处理能力和数据存储的地方。 在过去的几十年里,计算科学可能已经与我们的工作和家庭生活密切相关。 然而,即使互联网被大量使用,几乎所有的计算资源都是本地的。 这意味着计算机应用、数据存储和处理能力已经接近或相对接近它们的用户。

技术产业革命的春风也吹到了广西大学,我们的创新创业项目渐渐有了拥抱云计算的意识,各大ECS厂商1元/月的学生机被团队们广泛采购并商业化使用,这就是一个很好的栗子。

我们都知道,云计算是将计算运行在别的地方,正如我们接下来的问题需要将困难的问题转移到让聪明的你来解决一样。

现在有nn个三元组(a,b,c)(a,b,c),你需要将他们以任意顺序安排在一个一维数组里,假设数组下标以11开始,对于一个你安排好之后的数列,我们定义他的价值是:
xx
请问这个数列所有可能中,他最小价值应该是多少?

输入描述:
第一行输入一个整数n表示三元组个数

接下来nn行,每行三个空格分隔的正整数分别表示这个三元组的(a,b,c)

1≤n≤10^5
1≤a,b,c≤100
输出描述:
输出一行一个整数表示答案
示例1
输入
3
3 2 2
2 4 3
6 1 3
输出
65
说明
样例的最小价值方案可以是:
[(6,1,3), (3,2,2),(2,4,3)]

大声bb
这个题我做了好久啊(然而糊涂AC/前面wa了好多发555)
后面事实证明他就是按照那啥排序就好了(但是排序依据我打错了,所以wa了好多次

#include<bits/stdc++.h>
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;
 
struct node
{
    int a,b,c;
}temp[1000005];
 
bool c1(node x,node y)
{
    return (x.a+x.c-x.b)>(y.a+y.c-y.b);
}
int main()
{
    int n;
    scanf("%d",&n);
    for(int i=1;i<=n;i++)
    {
        cin>>temp[i].a>>temp[i].b>>temp[i].c;
    }
    long long a1=0,a2=0,a3=0,ans=0;
    sort(temp+1,temp+1+n,c1);
    for(int i=1;i<=n;i++)
    {
        a1+=(temp[i].a*(i+1) + temp[i].b*(n-i) + temp[i].c*(i+2));
    }
    printf("%lld\n",a1);
    return 0;
}

E - Antinomy与红玉海
时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld

题目描述
沉迷《原初幻想41》的冒险者Antinomy来到了红玉海——远东之国和奥萨德次大陆之间的中立海域。

Antinomy走到天之御柱前,发现卑微红色职业们正在排队,无聊的在一起玩游戏,由于自己是高贵的蓝色职业,所以Antinomy无法理解他们在玩什么,但是可以看出,他们一共有nn个人,每个回合中需要有一个人当工具人来计分,剩下的人进行游戏。

但是他们都不想当工具人,而是想参与游戏,其中第ii个卑微红想至少参加R_i 个回合的游戏。

Antinomy想知道他们的游戏至少要进行多少个回合才能满足每个卑微红的要求?

注意,并不是每个卑微红都必须得当一次工具人,如果满足要求,每个人也可以一直当工具人。

输入描述:
第一行输入一个整数nn表示卑微红的数量。
第二行是nn个空格分隔的整数,分别表示R_1,R_2,R_3,…R_n
1≤n≤2×10^5
1≤R ≤ 10^9

输出描述:
输出一行一个整数表示答案
示例1
输入
6
1 1 4 5 1 4
输出
5
备注:
注意数据范围,C++的printf输出64位long long请使用%lld,unsigned long long请使用 %llu

小学生bb
输出一下最值就好啦(特判是不是所有的人想玩的回合数都一样,是的话要输出回合数+1

#include<bits/stdc++.h>
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;
  
int main ()
{
    long long n,r[200005];
    scanf("%lld",&n);
    for(int i=1;i<=n;i++)
    {
        scanf("%lld",&r[i]);
    }
    sort(r+1,r+1+n);
    if(r[n]!=r[1])printf("%lld\n",r[n]);
    else printf("%lld\n",r[n]+1);
    return 0;
}
发布了106 篇原创文章 · 获赞 12 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_44702847/article/details/103457563