CCF计算机能力认证2019-03题解

01 小中大

CCF计算机能力认证2019-03题解_第1张图片

思路

前两道题一般都非常水,注意一些细节就很容易ac,这道题就按照题意来就好了,要注意的一个地方就是输出格式,这道题卡输出格式卡的特别严格,尤其是中位数的格式,要注意分中位数为整数和分数进行输出,不然就会wa

#include
#include
using namespace std;
const int maxn=100001;
int n,mid,a[maxn];
int main()
{
    cin>>n;
    for(int i=0; i>a[i];
    sort(a,a+n);
    if(n%2==0)
    {
        mid=a[n/2]+a[n/2+1];
        if(mid%2!=0)
            cout<

02 24点

CCF计算机能力认证2019-03题解_第2张图片

思路

也是非常基础的一道题,直接将数据存入栈中,然后遇到乘除的时候先计算出结果,然后将结果放入栈中,注意将减法转化为加法。

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
int main()
{
    int T;
    cin>>T;
    string s;
    stack num1,num2;
    while(T--)
    {
        cin>>s;
        bool flag=false;
        for(int i=0; i

03 损坏的RAID5

CCF计算机能力认证2019-03题解_第3张图片
CCF计算机能力认证2019-03题解_第4张图片
CCF计算机能力认证2019-03题解_第5张图片
CCF计算机能力认证2019-03题解_第6张图片

思路

一道究极恶心的模拟题,关键就是看懂题意,然后按题意模拟就好了,算法方面没有难度,但就是恶心人,我都怀疑这是在考语文的阅读理解,真的不想做这道题了,还要注意一点,直接写cin的话会TL,但是因为用到了string,所以scanf又不能用,所以需要在开头加一句ios::sync_with_stdio(false);防止cin超时。


#include
#include
#include
using namespace std;
string book="0123456789ABCDEF";
int n,m,s,l,_maxk;
int id;
string a[10005];
int _toint(char ch)
{
    if(ch>='0'&&ch<='9')
        return(ch-'0');
    else
        return(ch-'A'+10);
}
void _xor(string &s1,string s2)
{
    for(int i=0; i>n>>s>>l;
    //s为阵列条带大小,单位为块
    //2个字符等于一个字节,一个块为4个字节,8个字符
    for(int i=0; i>id;
        cin>>a[id];
        _maxk=a[id].size()/8/s;//最大的条带数目
    }
    cin>>m;
    while(m--)
    {
        int b;
        cin>>b;//要读取的块的编号
        int y=b/s;//y是条带号
        int k=y/(n-1);//k是条带在第k排
        int k1=(y%(n*n-n))/(n-1);//k1是数据带在第k1排
        int rd1=(n-1)-k1%n;//rd1是冗余带所在的磁盘编号
        int diskid=(y%(n*n-n)+1-k1*(n-1)+rd1)%n;//diskid是数据带所在的磁盘编号
        if(k>=_maxk)
            cout<<"-"<

04 消息传递接口

额,不会,叠甲,过!
(os:这套题好恶心啊,基本上难点都在读题,然后读懂模拟就好了,算法强,但是读题弱的孩子好可怜)

05 317号子任务

CCF计算机能力认证2019-03题解_第7张图片
CCF计算机能力认证2019-03题解_第8张图片

#include 
using namespace std;
struct E
{
    int v,w;
    bool operator < (const E&b)const
    {
        return w>b.w;
    }
};
int n,m,k;
int ff[10000+10];
priority_queue,greater > d[10000];
vector edge[10000];
 
 
void dijkstra(int k)
{
    priority_queue Q;
    int dis[10000];
    for(int i=0;idis[t.v]+w)
                dis[u]=dis[t.v]+w,
                Q.push((E){u,dis[u]});
        }
    }
}
 
int main()
{
    scanf("%d%d%d",&n,&m,&k);
    int num=0,x;
    for(int i=0;i

思路

图论中的最短路径,使用dj会超时,这里用优先队列优化后还是超时,但是60分了,我太难了

你可能感兴趣的:(乱七八糟)