BestCoder Round #60 HDOJ5504 5505 5506题解

本文探讨了在算法实现和数据结构应用中的优化策略,包括排序算法、动态规划、哈希算法等,以及如何通过分类讨论和求解复杂度来提高程序效率。

题目链接:点击打开链接


A: 读入数据的时候先把非0的乘到一起, 然后对n分类讨论, n为1直接输出a[0], 0的个数为n输出0. 而后对ans分类讨论, 大于0直接输出, 

小于0的时候, 若0的个数为n - 1输出0, 其他情况则找到绝对值最小的负数除掉就为答案.

AC代码:

#include "iostream"
#include "cstdio"
#include "cstring"
#include "algorithm"
using namespace std;
const int MAXN = 100;
const int INF = 0x3f3f3f3f;
typedef long long ll;
int main(int argc, char const *argv[])
{
    int t, n;
    scanf("%d", &t);
    while(t--) {
        ll ans = 1, num = 0, a[MAXN];
        bool flag = false;
        scanf("%d", &n);
        for(int i = 0; i < n; ++i) {
            scanf("%lld", &a[i]);
            if(a[i]) ans *= a[i];
            else num++;
        }
        if(n == 1) {
            printf("%lld\n", a[0]);
            continue;
        }
        if(num == n) {
            printf("0\n");
            continue;
        }
        if(ans > 0) printf("%lld\n", ans);
        else if(n - num == 1) printf("0\n");
        else  {
            ll m = -INF;
            for(int i = 0; i < n; ++i)
                if(a[i] < 0 && a[i] > m) m = a[i];
            printf("%lld\n", ans / m);
        }
    }
    return 0;
}


B: m无法整除n则ans为-1. 其他情况则首先m自除n, 而后m不为1时, 每次求出m n的gcd, m自除gcd, n乘gcd, gcd为1时ans也为-1.

AC代码:

#include "iostream"
#include "cstdio"
#include "cstring"
#include "algorithm"
using namespace std;
typedef unsigned long long ull;
ull n, m;
ull gcd(ull x, ull y)
{
    return y == 0 ? x : gcd(y, x % y);
}
int main(int argc, char const *argv[])
{
    int t;
    scanf("%d", &t);
    while(t--) {
        scanf("%lld%lld", &n, &m);
        if(m % n != 0) {
            printf("-1\n");
            continue;
        }
        ull ans = 0, x;
        m /= n;
        while(m != 1) {
            x = gcd(m, n);
            n *= x;
            m /= x;
            ans++;
            if(x == 1) break;
        }
        if(m != 1) printf("-1\n");
        else printf("%lld\n", ans);
    }
    return 0;
}


C: 首先要转化, 给你n组数, 每次可以指定一个数, 包含这个数的那一组可以被删掉, 问你l次操作能不能使所有集合都被删掉. 注意到题目

中数据的范围, 直接暴力. 最后通过判断vis数组是否全为true即可.

AC代码:

#include "iostream"
#include "cstdio"
#include "cstring"
#include "algorithm"
#include "vector"
using namespace std;
const int MAXN = 305;
vector<int> v[MAXN];
int n, l;
bool vis[MAXN];
int main(int argc, char const *argv[])
{
    int t;
    scanf("%d", &t);
    while(t--) {
        memset(vis, false, sizeof(vis));
        for(int i = 0; i < MAXN; ++i)
            v[i].clear();
        scanf("%d%d", &n, &l);
        for(int i = 1; i <= n; ++i) {
            int a;
            scanf("%d", &a);
            for(int j = 0; j < a; ++j) {
                int x;
                scanf("%d", &x);
                v[x].push_back(i);
            }
        }
        for(int i = 0; i < l; ++i) {
            int m = -1, val = -1;
            for(int j = 0; j < MAXN; ++j) {
                int x = 0;
                for(int k = 0; k < v[j].size(); ++k)
                    if(!vis[v[j][k]]) x++;
                if(x > m) {
                    m = x;
                    val = j;
                }
            }
            if(val >= 0)
                for(int j = 0; j < v[val].size(); ++j)
                    vis[v[val][j]] = true;
        }
        bool flag = false;
        for(int i = 1; i <= n; ++i)
            if(!vis[i]) {
                flag = true;
                break;
            }
        if(flag) printf("NO\n");
        else printf("YES\n");
    }
    return 0;
}


内容概要:本文系统性地介绍了基于“断线解环”思想的配电网辐射状拓扑约束建模方法,旨在通过Matlab代码实现,复现顶级EI论文中的核心技术。该方法聚焦于保障配电网在运行过程中维持严格的辐射状结构,防止环路形成,从而提高系统的安全性、稳定性和运行效率。文章深入阐述了如何利用混合整数线性规划(MILP)等优化技术处理复杂的拓扑约束条件,并结合标准配电网络进行仿真验证,特别适用于含分布式电源接入的现代复杂配电网。资源包不仅包含完整的Matlab实现代码,还整合了大量前沿科研方向的相关代码与资料,涵盖微电网优化调度、电动汽车协同管理、风光储联合系统、路径规划、深度学习预测等多个热门领域,并提供YALMIP等建模工具的支持,极大地方便了科研人员的学习、复现与二次开发。; 适合人群:具备电力系统、自动化、电气工程或相关工科专业背景,熟练掌握Matlab/Simulink仿真环境,正在从事电力系统优化、智能电网、分布式能源等领域科研或工程应用的人员,尤其适合研究生、博士生及具有一定科研基础的工程师。; 使用场景及目标:① 深入理解并掌握配电网辐射状拓扑约束的数学建模原理与“断线解环”策略的核心思想;② 成功复现高水平EI/SCI期刊论文中的优化模型与算法流程;③ 借助所提供的丰富案例代码,快速开展微电网经济调度、电动汽车优化、新能源预测、多目标优化等方向的科研项目;④ 熟练运用YALMIP等高级建模语言进行电力系统优化问题的建模、求解与分析。; 阅读建议:建议读者优先关注网盘中提供的完整代码、说明文档及示例数据,严格按照资源目录结构循序渐进地学习,重点剖析“断线解环”在消除环路、保证拓扑可行性方面的具体实现逻辑。务必亲自动手运行、调试和修改Matlab代码,以深化对理论模型与编程实现之间联系的理解。同时,可充分利用文中列举的其他研究主题作为灵感来源,拓展自身的科研视野与创新思路。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值