Codeforces Round #395 (Div. 2) A,B,C,D 题解

本文总结了近期参加的一场 CodeForces 比赛经历,详细解析了 A 至 D 四题的解题思路及代码实现,特别针对 C 题的失败进行了反思,并分享了正确的解题策略。

contest link: 点这里
快20天没打CF了,昨天打了一场,C题最后还FST了,感觉真是妙啊,掉分掉分。

A,水题

#include <bits/stdc++.h>
using namespace std;
int main(){
    int a, b, c;
    cin >> a >> b >> c;
    int ans = 0;
    for(int i = 1; i <= c; i++){
        if(i%a == 0 && i %b == 0) ans++;
    }
    cout << ans << endl;
}

B, 水题

#include <bits/stdc++.h>
using namespace std;
int n, a[200010], ans[200010];
int main()
{
    scanf("%d", &n);
    for(int i = 1; i <= n; i++)
    {
        scanf("%d", &a[i]);
    }
    bool odd = 1;
        int l1 = 1, r1 = n;
    int l2 = 1, r2 = n;
    while(l1 <= r1)
    {
        if(odd)
        {
            ans[l2++] = a[r1];
            ans[r2--] = a[l1];
            l1++;
            r1--;
        }
        else
        {
            ans[l2++] = a[l1];
            ans[r2--] = a[r1];
            l1++;
            r1--;
        }
        odd ^= 1;
    }
    for(int i = 1; i <= n; i++) cout << ans[i] << " ";
}

C, 题意是让我们找到一个点,值得断开这个点之后,所有子树都要满足只能存在一种颜色,问能不能找到这个点?
我的做法是,直接对于每个点统计与他相连的点并且颜色和它不同的点的数目,最后这些点中>=2的超过两遍肯定无解,否则考虑只有一个,那么遍历找到>=2的就行了,没有的话,就遍历这个树,发现u和它的儿子节点颜色不同输出这个点就好了,如果整个图都相同输出1就好了。但是我这样FST了因为我少写了一个东西,考虑一下这个数据

8

1 2

1 3

3 5

3 6

1 4

4 7

4 8

1 3 1 1 1 1 1 2

我跑出来的答案是YES,正确应该是NO,因为我少考虑了子节点只有一个和父亲不同的点并且存在多种的情况,我们发现无解的情况肯定这种节点个数>=4,所以特判一下就可以A了,我好弱智啊。

#include <bits/stdc++.h>
using namespace std;
const int maxn = 1e6+10;
struct edge{
    int v, nxt;
}E[maxn*2];
int head[maxn], cnt;
void addedge(int u, int v){
    E[cnt].v = v, E[cnt].nxt = head[u], head[u] = cnt++;
}
int n, c[maxn], scc[maxn];
int main(){
    memset(head, -1, sizeof(head)); cnt = 0;
    scanf("%d", &n);
    for(int i = 1; i < n; i++){
        int u, v;
        scanf("%d%d", &u, &v);
        addedge(u, v);
        addedge(v, u);
    }
    int flag = 0;
    for(int i = 1; i <= n; i++) scanf("%d", &c[i]);
    for(int i = 1; i <= n; i++){
        scc[i] = 0;
        for(int j = head[i]; ~j; j = E[j].nxt){
            int v = E[j].v;
            if(v == i) continue;
            if(c[v] != c[i]) scc[i]++;
        }
        if(scc[i] == 1) flag++;
    }
    int tt = 0;
    for(int i = 1; i <= n; i++){
        if(scc[i] >= 2){
            tt++;
        }
    }
    //for(int i = 1; i <= n; i++) cout << scc[i] << " "; cout << endl;
    if(tt >= 2){
        printf("NO\n");
    }
    else if(tt == 1){
        printf("YES\n");
        for(int i = 1; i <= n; i++){
            if(scc[i] >= 2){
                printf("%d\n", i);
                break;
            }
        }
    }
    else{
        if(flag >= 4){
            printf("NO\n");
            return 0;
        }
        printf("YES\n");
        bool ok = 0;
        for(int i = 1; i <= n; i++){
            for(int j = head[i]; ~j; j = E[j].nxt){
                int v = E[j].v;
                if(v == i) continue;
                if(c[v] != c[i]){
                    printf("%d\n", i);
                    ok = 1;
                    break;
                }
            }
            if(ok) break;
        }
        if(ok == 0) printf("1\n");
    }
}

D, 一直在想怎么把矩阵转化成图的那种???结果赛后看到大佬们说两个左上角的矩形的奇偶性肯定是不同的,仔细想了一下,卧槽???智商需要充值了啊,而且根据4色定理,这题肯定是有解的。。附上官方题解:http://codeforces.com/blog/entry/50205

#include <bits/stdc++.h>
using namespace std;
int main(){
    int n, x1, y1, x2, y2;
    scanf("%d", &n);
    printf("YES\n");
    while(n--){
        scanf("%d%d%d%d", &x1, &y1, &x2, &y2);
        x1 = abs(x1), y1 = abs(y1);
        printf("%d\n", (x1%2)*2 + (y1%2) + 1);
    }
    return 0;
}

E,留坑,待填,队友爸爸靠你了。

标题基于Python的汽车之家网站舆情分析系统研究AI更换标题第1章引言阐述汽车之家网站舆情分析的研究背景、意义、国内外研究现状、论文方法及创新点。1.1研究背景与意义说明汽车之家网站舆情分析对汽车行业及消费者的重要性。1.2国内外研究现状概述国内外在汽车舆情分析领域的研究进展与成果。1.3论文方法及创新点介绍本文采用的研究方法及相较于前人的创新之处。第2章相关理论总结和评述舆情分析、Python编程及网络爬虫相关理论。2.1舆情分析理论阐述舆情分析的基本概念、流程及关键技术。2.2Python编程基础介绍Python语言特点及其在数据分析中的应用。2.3网络爬虫技术说明网络爬虫的原理及在舆情数据收集中的应用。第3章系统设计详细描述基于Python的汽车之家网站舆情分析系统的设计方案。3.1系统架构设计给出系统的整体架构,包括数据收集、处理、分析及展示模块。3.2数据收集模块设计介绍如何利用网络爬虫技术收集汽车之家网站的舆情数据。3.3数据处理与分析模块设计阐述数据处理流程及舆情分析算法的选择与实现。第4章系统实现与测试介绍系统的实现过程及测试方法,确保系统稳定可靠。4.1系统实现环境列出系统实现所需的软件、硬件环境及开发工具。4.2系统实现过程详细描述系统各模块的实现步骤及代码实现细节。4.3系统测试方法介绍系统测试的方法、测试用例及测试结果分析。第5章研究结果与分析呈现系统运行结果,分析舆情数据,提出见解。5.1舆情数据可视化展示通过图表等形式展示舆情数据的分布、趋势等特征。5.2舆情分析结果解读对舆情分析结果进行解读,提出对汽车行业的见解。5.3对比方法分析将本系统与其他舆情分析系统进行对比,分析优劣。第6章结论与展望总结研究成果,提出未来研究方向。6.1研究结论概括本文的主要研究成果及对汽车之家网站舆情分析的贡献。6.2展望指出系统存在的不足及未来改进方向,展望舆情
### Codeforces Round 1005 Div. 2 A-F Problem Solutions #### A. Money Change 为了处理货币转换问题,可以将所有的金额都转化为分的形式来简化计算。通过遍历输入数据并累加各个部分的金额,最后求得剩余的钱数并对100取模得到最终结果[^2]。 ```cpp #include <iostream> using namespace std; int main() { int s, xi, yi; cin >> s; int total_cents = 0; for (int i = 0; i < s; ++i) { cin >> xi >> yi; total_cents += xi * 100 + yi; } cout << (s * 100 - total_cents) % 100 << endl; } ``` #### B. Odd and Even Pairs 此题目要求找到至少一对满足条件的索引:要么是一个偶数值的位置,或者是两个奇数值位置。程序会读入测试次数`t`以及每次测试中的数组长度`n`及其元素,并尝试找出符合条件的一对索引输出;如果没有这样的组合则返回-1[^3]。 ```cpp #include <cstdio> int main() { int t, n, num; scanf("%d", &t); while (t--) { int evenIndex = 0, oddIndex1 = 0, oddIndex2 = 0; scanf("%d", &n); for (int i = 1; i <= n; ++i) { scanf("%d", &num); if (num % 2 == 0 && !evenIndex) evenIndex = i; else if (num % 2 != 0) { if (!oddIndex1) oddIndex1 = i; else if (!oddIndex2) oddIndex2 = i; } if ((evenIndex || (oddIndex1 && oddIndex2))) break; } if (evenIndex) printf("1\n%d\n", evenIndex); else if (oddIndex1 && oddIndex2) printf("2\n%d %d\n", oddIndex1, oddIndex2); else printf("-1\n"); } return 0; } ``` 由于仅提供了前两道题的具体描述和解决方案,在这里无法继续给出完整的C至F题解答。通常情况下,每一道竞赛编程题都有其独特的挑战性和解决方法,建议查阅官方题解或社区讨论获取更多帮助。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值