首页 > 其他分享 >iwtgm-23

iwtgm-23

时间:2023-11-23 20:44:37浏览次数:37  
标签:... 前缀 23 int ans iwtgm 权值 机关

题目链接

A.

首先,如果只有1个机关(除高度h)那么不需要水晶
试想,无论这个机关在哪里,当它关闭后,下一个机关就会开启...以此类推
反而机关多了情况会更复杂
设i和i-1机关都是打开的,我现在在机关i,然后i和i+1的机关会一起关闭,那么i+2一定要有一个开的机关,若没有,则需要水晶

int main(){
    scanf("%d",&T);
    while(T--){
        int ans=0;
        scanf("%d%d",&h,&n);
        for(int i=1;i<=n;i++)scanf("%d",&a[i]);
        a[++n]=0;
        for(int i=2;i<=n;i++){
            if(a[i]<=1)break ;
            if(a[i]-a[i+1]>1)ans++;
            else i++;
        }
        printf("%d\n",ans);
    }
    return 0;
}

B.

一种很新的思路,不从整体入手,从局部入手
考虑对于每个最终数(从大到小,因为一个数满足了大数对小数没有影响),记录下它们的位置,看它们之间是否存在最大值比这个数小,若存在,则需要两次魔法,若不存在,一次就好
当要被改变的数比最终数还小,无解,因为只能把数变小
这里用的st表查询区间最大值

int Min[200010][20],Max[200010][20];//f[i][j]表示从i开始,区间长度为1<<j的范围内(i到i+(1<<j)-1)的最大值或最小值。当j为0时,区间长度为1,就是i本身
int n,m;
int a[N],b[N],x[N];
void init() {
    //n是数组元素个数,m是询问个数
    for (int i = 1; i <= n; i++) {
        Min[i][0] = Max[i][0] = b[i];//长度为1,就是i本身
    }
    for (int i = 1; i <= 19; i++) {//i是区间长度,为log(n)(向下取整)
        for (int j = 1; j + (1 << i) - 1 <= n; j++) {//j是左端点,j+(1<<i)-1是右端点<=n
            Min[j][i] = min(Min[j][i - 1], Min[j + (1 << (i - 1))][i - 1]);//2^i=2^(i-1)+2^(i-1)
            Max[j][i] = max(Max[j][i - 1], Max[j + (1 << (i - 1))][i - 1]);//相当于分成两个长度为1<<(i-1)长度的区间
        }
    }
}
int query(int l,int r) {
    int s = __lg(r - l + 1);//所求区间长度
    int ma = max(Max[l][s], Max[r - (1 << s) + 1][s]);//会有重合部分但不影响(避免没有全部覆盖)
    return ma;
}

void solve() {
    cin>>n;
    for(int i=1;i<=n;i++)cin>>a[i];
    for(int i=1;i<=n;i++)cin>>b[i];
    map<int,int>mp;
    cin>>m;
    for(int i=1;i<=m;i++){
        cin>>x[i];
        mp[x[i]]++;
    }
    for(int i=1;i<=n;i++){
        if(a[i]<b[i]){
            cout<<"NO"<<endl;return ;
        }
    }
    init();
    map<int,vector<int>>v;
    for(int i=1;i<=n;i++){
        if(b[i]!=a[i]){
            v[b[i]].push_back(i);
        }
    }
    for(auto [t,vv]:v){
        int cur=vv.size();
        for(int i=0;i<vv.size()-1;i++){
            int x=vv[i],y=vv[i+1];
            if(x==y-1)cur--;
            else{
                int mx= query(x+1,y-1);
                if(mx<=t)cur--;
            }
        }
        if(cur>mp[t]){
            cout<<"NO"<<endl;return ;
        }
    }
    cout<<"YES"<<endl;
}

C.

一种很新的思路,感觉自己得到了飞升
把数组分成k份,第一份权值是1,第二份权值是2...
换个角度,也可以先把每一份权值都看成k
然后第一份的权值减去(k-1)...
然后因为前缀和,取k-1个不同的前缀和,那么第一份权值一定减了k-1...
也就是说取了k-1个前缀和后,一定会出现k份且权值从1递增
那么现在就是考虑取哪几个前缀和,显然让和最小的权值是1,至此,排序解决

int n,k;
ll a[N],s[N],ans;
void solve() {
    cin>>n>>k;
    for(int i=1;i<=n;i++){
        cin>>a[i];
        s[i]=s[i-1]+a[i];
    }
    sort(s+1,s+n);
    for(int i=1;i<k;i++)ans-=s[i];
    ans+=k*s[n];
    cout<<ans;
}

标签:...,前缀,23,int,ans,iwtgm,权值,机关
From: https://www.cnblogs.com/wwww-/p/17852454.html

相关文章

  • 2023-2024-1 20231329《计算机基础与程序设计》第9周学习总结
    作业信息这个作业属于哪个课程https://edu.cnblogs.com/campus/besti/2023-2024-1-CFAP这个作业要求在哪里https://www.cnblogs.com/rocedu/p/9577842.html#WEEK09这个作业的目标计算机科学概论第10,11章并完成云班课测试《C语言程序设计》第8章并完成云班课测试......
  • 每日总结20231123
    代码时间(包括上课)5h代码量(行):100行博客数量(篇):1篇相关事项:1、今天是周四,上午上了软件设计和软件需求分析,软件设计写的是中介者模式和备忘录模式,软件需求分析是验收的第一阶段,效果还不错。。2、今天下午的人机交互技术还差c/s的结构和flash动画没写,下周一需要验收,该加班了。3、......
  • 2023-2024 20231313《计算机基础与程序设计》第九周学习总结
    2023-202420231313《计算机基础与程序设计》第九周学习总结作业速达作业课程班级链接作业要求计算机基础与程序设计第九周学习总结作业内容计算机科学概论第10,11章《C语言程序设计》第8章并完成云班课测试,操作系统责任、内存与进程管理、分时系统、CPU调度、......
  • 学期(2023-2024-1) 学号(20231414) 《计算机基础与程序设计》第九周学习总结
    学期(2023-2024-1)学号(20231414)《计算机基础与程序设计》第九周学习总结作业信息这个作业属于哪个课程<班级的链接>(2023-2024-1-计算机基础与程序设计)这个作业要求在哪里<作业要求的链接>(2023-2024-1计算机基础与程序设计第九周作业)这个作业的目标<写上具体方面......
  • Spring_2023_11_23_3 Spring整合mybatis----注解方式
    Spring整合mybatis----注解方式2023-11-2317:18:29星期四a) 依赖的引入<!--spring基础依赖--><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><ver......
  • 2023-2024-1 20232315 《网络空间安全导论》第二周学习
      一、 我最近初步了解了密码学基础,了解了其起源、初步发展与应用、包含的主要内容以及在当下的情况,下面是大概的思维导图: 二、下面是我学习后的问题:1、信息加密与信息隐藏有何本质区别?解决方法:问AI答案: 问题2:当今密码学面临哪些挑战,该如何迎接这些挑战?答案:......
  • 百度网盘(百度云)SVIP超级会员共享账号每日更新(2023.11.23)
    一、百度网盘SVIP超级会员共享账号可能很多人不懂这个共享账号是什么意思,小编在这里给大家做一下解答。我们多知道百度网盘很大的用处就是类似U盘,不同的人把文件上传到百度网盘,别人可以直接下载,避免了U盘的物理载体,直接在网上就实现文件传输。百度网盘SVIP会员可以让自己百度账......
  • 2023最全的Web自动化测试介绍(建议收藏)
    做测试的同学们都了解,做Web自动化,我们主要用Selenium或者是QTP。有的人可能就会说,我没这个Java基础,没有Selenium基础,能行吗?测试虽然属于计算机行业,但其实并不需要太深入的编程知识!01、行业现状我们先看看目前的行业现状:​测试行业现在70%是以手工测试为主,那么只有20%是自动化......
  • 231103 - i18n Ally 国际化插件使用说明
    231103-i18nAlly国际化插件使用说明i18nAlly国际化插件使用说明搜索安装插件;在项目下的settings.json加入如下配置,localesPaths要结合项目目录进行配置;"i18n-ally.annotationInPlace":false,"i18n-ally.displayLanguage":"zh-chs","i18n-ally.sour......
  • 20211325 2023-2024-1 《信息安全系统设计与实现(上)》第十一周学习笔记
    202113252023-2024-1《信息安全系统设计与实现(上)》第十一周学习笔记一、任务要求自学教材第13章,提交学习笔记(10分),评分标准如下1.知识点归纳以及自己最有收获的内容,选择至少2个知识点利用chatgpt等工具进行苏格拉底挑战,并提交过程截图,提示过程参考下面内容(4分)“我在学***X......