Codeforces Round #647 (Div. 2) (D.Johnny and Contribution E.Johnny and Grandmaster 题解)(训练)

本文解析了两道算法竞赛题目,一是关于无向图的贡献问题,要求按照特定规则填充图中节点并输出填充顺序;二是关于数组划分问题,目标是最小化两部分元素的幂次方差,提供了详细的解题思路与代码实现。

D - Johnny and Contribution 

题目大意

       给你m个顶点,n条边的无向图,每个顶点都有自己的期望w[i],将图中所有点填入数字,规则是在填任意一点时,其填入的数字是从1开始且这个点的邻居没有的最小数字,输出填图的顺序。

解题思路

       首先,将所有期望是1的点全部填入1,将与其有一条边连接的点都填入2,若其中有点的期望值不是2,则说明不存在这种图,即直接退出,输出-1。                                                                                                                                                                                    以此类推,每次都将上一个期望值的邻居填入此次的期望值,每次记录填入数字的点,并判断是否符合该点的期望即可。

代码

#include<bits/stdc++.h>
#define ll long long
#define MOD 1000000007  
#define INF 0x3f3f3f3f
#define mem(a,x) memset(a,x,sizeof(a))  
#define ios ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
using namespace std;
vector<int>v[500005];
vector<int>vv[500005];
vector<int>ans;
int ss[500005];
int w[500005];
int main()
{
    ll n,m;
    cin>>n>>m;
    int x,y;
    for(int i=1;i<=m;i++){
        scanf("%d %d",&x,&y);
        v[x].push_back(y);
        v[y].push_back(x);
    }
    for(int i=1;i<=n;i++){
        int c;
        scanf("%d",&c);
        vv[c].push_back(i);
        w[i]=1;
    }
    for(int i=1;i<=n;i++){
       for(auto j:vv[i]){
          if(w[j]!=i){
              cout<<"-1";
              return 0;
          }
          for(auto u:v[j]){
              if(w[u]==i)w[u]++;
          }
          ans.push_back(j);
       }
    }
    for(auto i:ans){
       cout<<i<<" ";
    }
    return 0;
}

 

E - Johnny and Grandmaster

题目大意

       给你n个数字k[i],再给你一个p,问你将k这个数组分成两部分,使两个部分的p的k[i]次方的差最小,问该差值最小是几?最终结果需要mod1000000007

解题思路

       该问题在可以转化为求把一串数字分成两串,是两者的差值最小,由于该数组有p的幂次方组成,因此其中大数的影响一定比小数的影响大,分两种情况,1、大数减去其后的所有小数的num值大于等于0,则最终答案就是该num值。2、大数减去其后的小数的num值小于0,则需要在相减的过程中,如果出现num=0并且后面还有数字时,把前面的全部抛弃,将大数改为后一个小数(即当在减k[i]的p次的过程中等于0,则将k[i+1]的p次设为大数)。以此类推,最后得到的num,就是最小值。

        注意点:1、数字范围较大,在求幂的时候需要用快速幂。                                                                                                                              2、在相减过程中,会出现差值num=1000000007的情况,此时会出现误判0,所以需要在引入一个余数,来保证该差值num真的为0.

代码

#include<bits/stdc++.h>
#define ll long long
#define MOD 1000000007  
#define INF 0x3f3f3f3f
#define mem(a,x) memset(a,x,sizeof(a))  
#define ios ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
using namespace std;
ll fastpow(ll a,ll n,ll o)
{
     ll base=a;
     ll res=1;
     while(n){
        if(n&1)
            res=(res*base)%o;
        base=(base*base)%o;
        n>>=1;
     }
     return res%o;
}
ll k[1000006];
bool cmp(ll a,ll b)
{
   return a>b;
}
int main()
{
    ll t,n,p;
    ll e=12345678;
    scanf("%lld",&t);
    while(t--){
      scanf("%lld %lld",&n,&p);
      for(int i=1;i<=n;i++){
         scanf("%lld",&k[i]);
      }
      sort(k+1,k+n+1,cmp);
      ll num=0,num2=0;
      for(int i=1;i<=n;i++){
         ll temp=(fastpow(p,k[i],MOD)+MOD)%MOD;
         ll temp2=(fastpow(p,k[i],e)+e)%e;      //防止误判
         if(num==0&&num2==0){
            num=temp;         
            num2=temp2;     
         }else{
            num=(num+MOD-temp)%MOD;
            num2=(num2+e-temp2)%e;
         }
      }
      printf("%lld\n",num);
    }
    return 0;
}

 

内容概要:本文研究了计及碳排放的多微网电能交互分布式运行策略,提出了一种基于交替方向乘子法(ADMM)的优化方法,旨在实现多微电网系统在满足能源供需平衡的同时降低碳排放。文中构建了包含分布式电源、储能系统、可控负荷及碳排放约束的多微网协同优化模型,通过ADMM算法将全局优化问题分解为各微网子系统独立求解的子问题,实现分布式协同调度,在保障各微网自治性的同时兼顾系统整体的经济性与低碳性。研究通过Matlab代码完成了算法仿真,验证了所提策略在提升能源利用效率、减少碳排放、增强系统鲁棒性与可扩展性方面的有效性,为低碳化、去中心化的能源互联网运行提供了理论支持与实践参考。; 适合人群:具备电力系统分析、优化理论及Matlab编程基础的科研人员、电气工程及相关专业的研究生,以及从事智慧能源、分布式能源系统规划与运行的工程技术人员。; 使用场景及目标:①应用于多微电网系统的分布式能量管理与协同优化调度;②支持“双碳”目标下的低碳电网运行策略设计与政策评估;③为ADMM等分布式优化算法在能源系统中的工程化应用提供完整的模型构建、算法实现与仿真验证案例。; 阅读建议:读者应结合Matlab代码深入理解ADMM算法的迭代流程、拉格朗日函数构造与收敛条件设定,重点关注模型中碳排放因子的引入方式、变量分解机制与子问题求解过程,建议通过调整微网数量、碳价参数及通信拓扑结构进行多场景仿真,以深化对分布式协同机制与环保经济权衡关系的理解。
下载代码方式:https://pan.quark.cn/s/cc130f55eddd BUCK变换器,亦称为降压型转换器,在开关电源技术中属于一种基础电路拓扑,其核心功能在于实现从高电压到低电压的转换,并且在转换过程中确保输出端电压的稳定性。本文的核心内容集中在对BUCK变换器的运行机制进行剖析、阐释电流连续模式(CCM)与断续模式(DCM)之间的差异,并深入探讨这两种模式在稳态下的相互关系,同时研究BUCK变换器的交流等效电路模型以及电压与电流补偿回路的构建方法。BUCK变换器的原理示意图如图1所示,其显著特征在于输出电压值低于输入电压值,输出电流保持连续状态,而输入电流则呈现出脉动特性。变换器的工作过程可以划分为两个主要阶段:在第一个阶段,即开关管导通期间,电感件负责储存能量,电流呈现出线性增长的趋势,并且同时向负载提供能量;在第二个阶段,即开关管截止期间,电感通过二极管实现能量的续流,电流则表现出线性递减的态势。依据电感件的伏平衡原理,可以推导出涉及开关管占空比、电感件电感量、输入电压以及输出电压之间关系的数学公式,这些公式对于深入理解和设计BUCK变换器具有关键性的指导意义。 接下来,文章对CCM和DCM两种模式进行了详细的比较分析。在CCM模式下,电感电流在整个开关周期内均保持连续的状态,而在DCM模式下,电感电流则会出现中断现象。确定BUCK变换器工作模式的关键依据是其电感电流纹波值与输出电流值相等这一边界条件。当电流纹波值等于零,即在整个开关周期内电感电流保持完全连续时,BUCK变换器被归类为CCM模式;相对地,若电流纹波值大于零,则表明变换器处于DCM模式;介于两者之间的情况则界定为CCM与DCM的过渡状态。 在DCM模式下,对BUCK...
源码链接: https://pan.quark.cn/s/ae09e867d64c S参数指的是散射参数,其英文全称为“Scattering-Parameter”。该参数用于表征电路网络中信传输与反射的特性,是微波领域中衡量电路网络性能的核心指标。以二端口网络为例,比如单根传输线,其包含四个S参数,分别为S11、S12、S21和S22。其中,S11代表端口1的反射系数,S12代表端口1至端口2的反向传输系数,S21代表端口2至端口1的正向传输系数,而S22则表示端口2的反射系数。在高速电路设计领域,S参数是评估电路网络性能的关键依据。对于互易性网络,存在S12=S21的关系;对于对称性网络,满足S11=S22的条件;而对于无耗性网络,则有S11*S11+S21*S21=1,即网络不产生能量损耗,从端口1输入的能量要么被反射回端口1,要么被传输至端口2。在实际应用场景中,S参数能够用于评估电路网络的性能表现,例如,S11体现回波损耗,即有多少能量被反射回源端(Port1),该值越小越好,通常推荐S11<0.1,即-20dB。S21则反映插入损耗,即有多少能量被传输到目的端(Port2),该值越大越优,理想值为1,即0dB,传输效率越高,一般建议S21>0.7,即-3dB。此外,S参数还可用于判断电路网络的互易性与对称性。在高速电路设计过程中,这些参数具有显著意义,因为它们对电路网络的性能和稳定性具有直接影响。S参数是评估电路网络性能的核心指标,能够衡量电路网络的信传输和反射能力,对于高速电路设计而言至关重要。关于Z参数和Smith圆图,Z参数属于阻抗参数,而Smith圆图是反射系数(以符Γ表示)的极坐标图形。Smith圆图可用于评估电路网络的阻抗匹配状况...
内容概要:本文围绕基于序贯蒙特卡洛模拟法的配电网可靠性评估展开研究,系统阐述了该方法在电力系统中的应用原理与实现路径。通过Matlab代码实现了系统状态抽样、状态分析、可靠性指标计算等关键环节,并结合IEEE标准测试系统进行仿真验证,有效评估配电网在不同运行工况下的可靠性水平。研究不仅提供了完整的算法实现框架,还拓展至阶梯式碳交易、供需响应、N-k安全约束等多种复杂场景,体现了其在现代综合能源系统优化中的广泛适用性。配套资源丰富,涵盖多个电力系统前沿研究方向的技术实现与论文复现案例。; 适合人群:具备电力系统基础知识和Matlab编程能力的科研人员与工程技术人员,特别适用于从事配电网可靠性分析、综合能源系统优化、电力系统仿真等领域的高校研究生、科研机构研究人员及电力行业工程师。; 使用场景及目标:①掌握序贯蒙特卡洛模拟法在配电网可靠性评估中的建模与仿真方法;②学习利用Matlab进行电力系统随机模拟与数据分析;③为电网规划、运行风险评估及故障恢复策略制定提供量化依据;④拓展对智能优化算法、机器学习及多能协同调度在电力系统中集成应用的理解。; 阅读建议:此资源不仅提供可运行的Matlab代码,还融合了大量科研实践案例,建议读者结合文中仿真模型与实际算例进行动手复现,深入理解算法细节与工程背景,同时关注相关领域如微电网优化、故障诊断、路径规划等交叉技术的发展,以提升综合科研与工程应用能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值