【CF 1042】 Round #510 (Div. 2)

记录一下自己的丑代码。D题还不会,看别人代码也不懂,虽然就十来行。。日后再补

A:http://codeforces.com/contest/1042/problem/A

/*
* @Author: SamsonHo
* @Date:   2018-09-17-16.04.25
* @URL:
*/
#include<bits/stdc++.h>
#define INF 0x3f3f3f3f
using namespace std;
typedef long long LL;
const int MAXN = 1e5+10;
int a[105];
int main(void)
{
    int n,m;
    while(~scanf("%d%d",&n,&m))
    {
        for(int i = 1; i <= n; ++i)
        {
            scanf("%d",&a[i]);
        }
        sort(a+1,a+1+n);
        int Max = a[n]+m;
        int pos = 1;
        for(int i = 1; i < n; ++i)
        {
            if(a[n] == a[i])    break;
            if(m > a[n]-a[i])
            {
                m -= a[n]-a[i];
                a[i] = a[n];
            }
            else
            {
                a[i] += m;
                m = 0;
                break;
            }
        }
        if(m)
        {
            printf("%d %d\n",a[1]+m/n+(m%n!=0), Max);
        }
        else
        {
            printf("%d %d\n",a[n], Max);
        }

    }
}

B:http://codeforces.com/contest/1042/problem/B

B的代码就更丑了,当时没想到怎么做,只能暴力敲一下了。

/*
* @Author: SamsonHo
* @Date:   2018-09-17-16.25.55
* @URL:
*/
#include<bits/stdc++.h>
#define INF 0x3f3f3f3f
using namespace std;
typedef long long LL;
const int MAXN = 1e5+10;
//struct juice
//{
//    int v,a,b,c;
//}ju[1005];
//bool cmp(juice x,juice y)
//{
//    return x.v < y.v;
//}
int a[11],v;
//a b c ab  ac bc abc;
//1 3 5  4  6   8  9
int main(void)
{
    int n;
    char str[5];
    while(~scanf("%d",&n))
    {
        for(int i = 0; i < 10; ++i)
            a[i] = 300005;
        int tmp;
        for(int i = 1; i <= n; ++i)
        {
            scanf("%d%s",&v,str);
            tmp = 0;
            for(int j = 0; str[j]; ++j)
            {
                if(str[j] == 'A')
                    tmp += 1;
                else if(str[j] == 'B')
                    tmp += 3;
                else if(str[j] == 'C')
                    tmp += 5;
            }
            if(v < a[tmp])
                a[tmp] = v;
        }
        int ans = 300005;
        ans = min(ans,a[1]+a[3]+a[5]);
        ans = min(ans,a[4]+a[5]);
        ans = min(ans,a[6]+a[3]);
        ans = min(ans,a[8]+a[1]);
        ans = min(ans,a[9]);
        ans = min(ans,a[4]+a[6]);
        ans = min(ans,a[4]+a[8]);
        ans = min(ans,a[6]+a[8]);
        if(ans == 300005)
            puts("-1");
        else
            printf("%d\n",ans);
    }
}

C:http://codeforces.com/contest/1042/problem/C

C的话也是模拟做了一下,想到正数的话就直接乘就好了,但是要优先处理负数,两个负数相乘可以变正数,所以偶数个就直接两两相乘就消化掉了,奇数个的情况下如果有0存在,可以和0相乘就消去一个值最大的负数,剩下的还是两两相乘。第二步再处理0,一直进行操作1到只剩一个。再把剩下的那个2操作消灭掉。但是还有个情况就是0 0 0 这样的,最后剩的那个0不能消掉。

啊,情况好多,这种办法赛场上要不是没思路真的不想碰运气……

/*
* @Author: SamsonHo
* @Date:   2018-09-17-16.47.41
* @URL:
*/
#include<bits/stdc++.h>
#define INF 0x3f3f3f3f
using namespace std;
typedef long long LL;
const int MAXN = 2e5+10;
vector<int> zero;
vector<int> z;
vector<int> f;
int a[MAXN],s0;
bool cmp(int x,int b)
{
    return a[x] > a[b];
}
void dealzero()
{

}
int main(void)
{
    int n;
    while(~scanf("%d",&n))
    {
        zero.clear();
        z.clear();
        f.clear();
        int cnt = 0;
        for(int i = 1; i <= n; ++i)
        {
            scanf("%d",&a[i]);
            if(a[i] == 0)
                zero.push_back(i);
            else if(a[i] > 0)
                z.push_back(i);
            else
                f.push_back(i);
        }
        s0 = zero.size();
        int sf = f.size();
        int ff = 0;
        if(sf % 2 == 1)
        {
            ff = 1;
            sort(f.begin(),f.end(),cmp);
            if(s0 > 0)
                printf("1 %d %d\n",f[0],zero[0]);
            else
                printf("2 %d\n",f[0]);
            for(int i = ff+1; i < sf; ++i)
            {
                printf("1 %d %d\n",f[i],f[ff]);
            }
            --sf;
        }
        else if(sf % 2 == 0)
        {
            for(int i = 1; i < sf; ++i)
            {
                printf("1 %d %d\n",f[i],f[0]);
            }
        }
        if(s0 >= 1)
        {
            int len = zero.size();
            for(int i = 1; i < len; i++)
                printf("1 %d %d\n",zero[i],zero[0]);

        }
        int sz = z.size();
        for(int i = 1; i < sz; ++i)
        {
            printf("1 %d %d\n",z[i],z[0]);
        }
        if(sf && sz)
            printf("1 %d %d\n",f[ff],z[0]);
        if((sf || sz) && s0)
            printf("2 %d\n",zero[0]);
    }
}

D:http://codeforces.com/contest/1042/problem/D

待补

内容概要:本文详细介绍了如何使用Matlab对地表水源热泵系统进行建模,并采用粒子群算法来优化每小时的制冷量和制热量。首先,文章解释了地表水源热泵的工作原理及其重要性,随后展示了如何设定基本参数并构建热泵机组的基础模型。接着,文章深入探讨了粒子群算法的具体实现步骤,包括参数设置、粒子初始化、适应度评估以及粒子位置和速度的更新规则。为了确保优化的有效性和实用性,文中还讨论了如何处理实际应用中的约束条件,如设备的最大能力和制冷/制热模式之间的互斥关系。此外,作者分享了一些实用技巧,例如引入混合优化方法以加快收敛速度,以及在目标函数中加入额外的惩罚项来减少不必要的模式切换。最终,通过对优化结果的可视化分析,验证了所提出的方法能够显著降低能耗并提高系统的运行效率。 适用人群:从事暖通空调系统设计、优化及相关领域的工程师和技术人员,尤其是那些希望深入了解地表水源热泵系统特性和优化方法的专业人士。 使用场景及目标:适用于需要对地表水源热泵系统进行精确建模和优化的情景,旨在找到既满足建筑负荷需求又能使机组运行在最高效率点的制冷/制热量组合。主要目标是在保证室内舒适度的前提下,最大限度地节约能源并延长设备使用寿命。 其他说明:文中提供的Matlab代码片段可以帮助读者更好地理解和复现整个建模和优化过程。同时,作者强调了在实际工程项目中灵活调整相关参数的重要性,以便获得更好的优化效果。
内容概要:本文详细介绍了如何利用Blender和Python为污水处理厂创建高精度3D渲染效果图及其背后的参数化建模方法。首先,作者展示了如何通过Python代码管理复杂的设备数据结构(如嵌套字典),并将其应用于3D模型中,确保每个工艺段的设备参数能够准确反映在渲染图中。接着,文章深入探讨了具体的材质处理技巧,比如使用噪声贴图和溅水遮罩来增强金属表面的真实感,以及如何优化渲染性能,如采用256采样+自适应采样+OpenImageDenoise的降噪组合拳,将渲染时间缩短至原来的三分之一。此外,文中还涉及到了一些高级特性,如通过Houdini的粒子系统模拟鸟类飞行路径,或者利用Three.js实现交互式的在线展示。最后,作者强调了参数化建模的重要性,它不仅提高了工作效率,还能更好地满足客户需求,尤其是在面对紧急的设计变更时。 适合人群:从事污水处理工程设计的专业人士,尤其是那些希望提升自己3D建模技能和提高工作效率的人。 使用场景及目标:适用于需要快速生成高质量污水处理厂设计方案的场合,特别是在投标阶段或向客户展示初步概念时。通过这种方式,设计师可以在短时间内制作出逼真的效果图,帮助客户直观理解设计方案,并且可以根据客户的反馈迅速调整模型参数,从而加快决策过程。 其他说明:除了技术细节外,本文还分享了许多实用的经验和技巧,如如何平衡美观与效率之间的关系,以及怎样应对实际项目中的各种挑战。对于想要深入了解这一领域的读者来说,这是一份非常有价值的学习资料。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值