【济南集训】20191006解题报告

(离第一就差一点点,死亡)

第一题良心保底题(然而这个我也没有抓住)

有个特判忘了。。自闭

第二题就是裸的最长不下降子序列,我数组开小了,挂了3个点。。。

第三题又蓝又紫,我做不好。。

120。。被安排的明明白白

第一题:

猜数游戏(guess
【题目描述】
企鹅豆豆和企鹅豆沙在玩一个简单的猜数字小游戏,豆沙心想一个在 [1; 109] 之内
的正整数,然后豆豆猜一个数字,豆沙会告诉豆豆他猜的数字和答案的差的绝对值。这
个游戏进行了很多轮,然后现在告诉你他们每次问答记录,你需要推出每轮的答案,或
者判断存在多解或者无解。
【输入格式】
从文件 guess.in 中读入数据。
输入一行一个正整数 N 。接下来 N 行,每行两个整数 ai; biai 表示第 i 轮豆豆猜
的值, bi 表示第 i 轮豆沙回答的差。
【输出格式】
输出到文件 guess.out 中。
输出一行 N 个整数表示这 N 轮答案。
如果第 i 轮的答案存在且唯一,则输出这个答案。
如果第 i 轮存在多个答案,输出 -1
如果第 i 轮不存在答案,则输出 -2
【样例 1 输入】
2
3 5
10 11
【样例 1 输出】
8
21

很良心的一道题。。应该算是打卡题了

只需要注意一个点,要特判b=0的情况

代码十分简单就不放了

第二题:

绝世秒题(silly
【题目描述】
企鹅豆豆有一个序列非负整数 A ,然后他想找出 A 的一个子序列 B ,满足对于 B
中任意相邻两个元素的异或值大于 3,即 Bi xor Bi+1 > 3
现在他想知道序列 B 的长度最长能有多长?
这里的异或是指二进制异或,对应了 C + + ˆ 运算符。
【输入格式】
从文件 silly.in 中读入数据。
输入的第一行包含一个正整数 n,保证 n 106,表示序列 A 的长度。
接下来一行 N 个非负整数,表示序列 A。保证序列 A 中的每个元素不超过 109
【输出格式】
输出到文件 silly.out 中。
输出一个整数表示 B 可能的最长长度。
【样例 1 输入】
5
9 6 93 2 1
【样例 1 输出】
4
【样例 1 解释】
比如子序列 9 6 93 1 就是一个长度为 4 的合法子序列,并且没有长度为 5 的合法
的子序列。

裸裸的最长不下降子序列,当时想到的时候十分激动,终于可以A一道题了。。。

结果数组开小了

血的教训

10n=1*10n+1(不会你就给我用计算器啊啊啊)

数组加了一个0的AC代码:

#include<iostream>
#include<cstdio>
using namespace std;
void read(int &x)
{
    char c=0;
    x=0;
    while(!isdigit(c))
    c=getchar();
    while(isdigit(c))
    x=x*10+c-'0',c=getchar();
}
int a[1000001],dp[1000001];
int p,n;
int main()
{
    freopen("silly.in","r",stdin);
    freopen("silly.out","w",stdout);
    read(n);
    for(int i=1;i<=n;i++)
    {
        read(a[i]);
    }
    p=a[1];
    for(int i=1;i<=n;i++)
    {
        if((a[i]^p)<=3)
        {
            dp[i]=dp[i-1];
        }
        if((a[i]^p)>3)
        {
            dp[i]=dp[i-1]+1; 
            p=a[i];
        }
    }
    printf("%d",dp[n]+1);
    fclose(stdin);
    fclose(stdout);
    return 0;
}

第三题:

五彩树(tree
【题目描述】
企鹅豆豆有一颗五彩斑斓的树,每一个节点上有一种颜色 Ci。一对节点的缤纷值
定义为这两个节点之间的路径上的不同的颜色数。一个节点的绚丽值就是它和所有点
的缤纷值的和。现在企鹅豆豆想要知道每个点的绚丽值是多少?
【输入格式】
从文件 tree.in 中读入数据。
第一行一个整数 N, 代表树的节点个数;
接下来一行有 N 个数,第 i 个数代表每个节点的颜色值 Ci
接下来 N - 1 行,每行两个数字 u; v,表示 u v 之间有一条边。
【输出格式】
输出到文件 tree.out 中。
输出 N 行,每行一个数。第 i 行表示第 i 个节点的绚丽值。
【样例 1 输入】
5
1 2 3 2 3
1 2
2 3
2 4
1 5
【样例 1 输出】
10
9
11
9
12
【样例 1 解释】
对于第一个点,它和 12345 号点之间的缤纷值分别为 12322。所以他的绚丽值
1 + 2 + 3 + 2 + 2 = 10

这题。。。我用了Floyd暴力。。

写了大概三四十行if吧。。。

(真不怕RE----来自wsq)

然后光荣的没有调出来。。

正解思路是从链开始推,在放到树上就行。

(RP++!)

原文地址:https://www.cnblogs.com/Daz-Os0619/p/11628385.html