北京化工大学2018年10月程序设计竞赛部分题解(a,c,e,h)(代码片段)

zhanga zhanga     2023-01-09     331

关键词:

目录

北京化工大学2018年10月程序设计竞赛部分题解(A,C,E,H)

竞赛事件相关

竞赛链接

虽然我发这个随笔的时候估计已经比完了,不过还是把链接放上来好了。

一个比赛

http://116.196.97.99/contest.php如果链接没设置好的话,可以在这里复制网址

竞赛题目

我做出来的

C.水题的ZZH
题目描述

ZZH是北化acm界新生代的大佬,每天会和无数来自全球各地的大佬进行交流。但是,ZZH每天水群的时间有限。ZZH想尽可能多的和更强的大佬进行交流。他把每个大佬的实力用一个数字Ω表示出来,并且每天和Ω总和最高的几位大佬进行交流。但是ZZH正在忙着水群,于是把这个问题交给了你。事成之后,ZZH会给你2147483647%1的金币作为奖励

输入

单组数据

第一行两个整数n,m,分别代表今天ZZH水群的时间(以分计算)和今天想要与ZZH交流的大佬的数量(<=2000)。

之后m行,分别有两个数字,代表和第i个大佬交流花费的时间(<n),以及大佬的Ω(<1000)。

输出

今天与ZZH交流的大佬的Ω的值的总和。

样例输入
70 3
71 100
69 3
1 2
样例输出
5

这道题一看就是很常见的背包问题,然后我不会做了,我用了自己以前的代码,我检讨,我反思!

#include <iostream>
#include <cstring>
using namespace std;
int main()

    int V,n;
    cin>>V>>n;
    int v[2100],p[2100],dp[2100];
    memset(v,0,sizeof(v));
    memset(p,0,sizeof(p));
    memset(dp,0,sizeof(dp));
    for(int i=1;i<=n;i++)
        cin>>v[i]>>p[i];
    for(int i=1;i<=n;i++)
        for(int j=V;j>=v[i];j--)
            dp[j]=max(dp[j-v[i]]+p[i],dp[j]);
    cout<<dp[V];

背包问题会就是会,不会也写不出来,大概。没什么好说的,下一道吧。

A.智力大奖赛
题目描述

技术分享图片技术分享图片

输入

只有一行,有一个整数N,表示大三角形的层数(N<=45000)

输出

有两行,
第一行只有一个数,表示小三角形的个数;
第二行也只有一个数,表示能量棒的个数。

样例输入
8
样例输出
64
108

听坐我对面的说A很好做,但是数据太大了。

emmmmm,好的,没问题,BigInteger走起!

大概思路就是第1行1个三角,第2行2+1个,第3行3+2个……

然后能量棒是第1行3根,第2行6根,第3行9根……

很简单的一道题,难点就在数据太大,不过,我BigInteger怕过谁??

import java.math.BigDecimal;
import java.util.Scanner;
import java.math.BigInteger;

public class Main 

    public static void main(String[] args) 
        // TODO Auto-generated method stub
        Scanner in = new Scanner(System.in);
        int n=in.nextInt();
        BigInteger x1 = BigInteger.ZERO;
        BigInteger x2 = BigInteger.ZERO;
        BigInteger x3 = BigInteger.ZERO;
        BigInteger y1 = BigInteger.ZERO;
        BigInteger a1 = BigInteger.ONE;
        BigInteger b1 = BigInteger.ONE;
        BigInteger a2 = BigInteger.ZERO;
        b1=b1.add(a1);
        b1=b1.add(a1);
        for(int i=0;i<n;i++) 
            x1=x1.add(a1);
            x2=x2.add(a2);
            a1=a1.add(BigInteger.ONE);
            a2=a2.add(BigInteger.ONE);
            y1=y1.add(b1);
            b1=b1.add(BigInteger.ONE);
            b1=b1.add(BigInteger.ONE);
            b1=b1.add(BigInteger.ONE);
        
        x3=x1.add(x2);
        System.out.println(x3); 
        System.out.println(y1); 
    

能随意切换C++和JAVA的我真棒233333

下一道,H吧,感觉挺简单的啊

H.数列
题目描述

故事不编了,m哥牛逼!

给出一个长度为n的数列a,现在有如下三种操作:
1、 1 p x: 将a[p]更改为x
2、 2 l r: 求a[l]到a[r]的最大值与最小值的差
3、 3 l r: 求a[l]到a[r]的和
现在给你一些操作,请你求出相应的数值。

输入

第一行输入一个数字T表示数据组数(1<=T<=10)
接下来T组数据,每组数据第一行为两个整数n、m(1<=n,m<=1e5),分别代表a的长度和操作数,下一行n个整数表示a[1]到an,接下来m行,每行一个如题目给出的输入格式的操作
(1<=p,l,r<=n,0<=x<=1000)

输出

对于每组数据
对每一个操作2或3,输出一个整数表示结果

样例输入
2
4 4
1 2 3 4
2 1 2
1 2 7
2 1 2
3 1 4
5 4
2 7 6 3 8
2 1 3
1 3 1
2 1 5
3 3 3
样例输出
1
6
15
5
7
1

这题真的很简单啊,不就是一些数组的操作吗?怎么做的人那么少。。。

唯一需要注意的就是题目中的数组是从1开始的。

#include <iostream>
using namespace std;
int suan(int a[],int l,int r)
    int m1,m2;
    m1=a[l];
    m2=a[l];
    for(int i=l+1;i<=r;i++)
        m1=m1>a[i]?m1:a[i];
        m2=m2<a[i]?m2:a[i];
    
    return m1-m2;

int add(int a[],int l,int r)
    int s=0;
    for(int i=l;i<=r;i++)
        s+=a[i];
    
    return s;

int main()

    int t,n,m,x,p,y,l,r;
    cin>>t;
    while(t--)
        cin>>n>>m;
        int a[n+1];
        for(int i=1;i<=n;i++)
            cin>>a[i];
        
        while(m--)
            cin>>x;
            switch(x)
                case 1:cin>>p>>y;
                        a[p]=y;
                        break;
                case 2:cin>>l>>r;
                        cout<<suan(a,l,r)<<endl;
                        break;
                case 3:cin>>l>>r;
                        cout<<add(a,l,r)<<endl;
                        break;
            
        
    

请不要在意我乱起的函数名!

然后这个时候我发现我排第12??!从来没这么高过,信心大增!!!

技术分享图片

继续加油!

看E好像做的人挺多的,我也来试试吧!

E.云计算
题目描述

北化ACM社团有n台云服务器,每台服务器都有一个使用期限,第i台服务器还能使用Ri天。现在有m个任务需要部署到云服务器上运行,第j个任务需要运行Tj天。第j个任务能够部署在第i台服务器上时当且仅当 Tj <=Ri,并且每台服务器在其使用期限内总共只能运行一个任务。即使Tk+Tj <=Ri,你也无法将第k个和第j个任务一起部署到第i 台服务器上,否则这题将失去其签到题的作用(看到签到题这几个字的时候我笑了)。为了能充分利用云服务器,现在需要计算最多能部署多少任务。而你作为北化ACM的希望,这个问题需要由你 来解决。

输入

单组数据
第一行两个整数代表 n和m
第二行 n个整数代表 R1,R2,...,Rn
第三行 m个整数代表T1,T2,...,Tm
1<= n,m,Tj ,Ri <=100000

输出

输出一个整数代表最多有多少个任务能够部署到云服务器上

样例输入
5 5
6 1 3 4 2 
4 6 6 2 5 
样例输出
3

既然是签到题,哈哈,那就没什么好说的了,来吧,我不怕你!

#include <iostream>
#include <algorithm>
using namespace std;
int main()

    int n,m,s=0;
    cin>>n>>m;
    int a[n],b[m];
    for(int i=0;i<n;i++)
        cin>>a[i];
    
    for(int i=0;i<m;i++)
        cin>>b[i];
    
    sort(a,a+n);
    sort(b,b+n);
    int j=0;
    for(int i=0;i<m;)
        if(b[i]<=a[j])
            i++;
            j++;
            s++;
        
        else
            j++;
        
        if(j==n)
            break;
        
    
    cout<<s;

嗯,很简单,就随便排排序,然后判断一下使用期限够不够就行了。

然后!!!第8了!!!
技术分享图片

不过很可惜,我就止步4道了,之后再也没做出来了,名次也掉到了50多名,不过也很强了啊!好久不做题了竟然还能突破之前的最后成绩。

我没做出来的

B.求素数
题目描述

技术分享图片

输入

共两行:
第一行为N何L,中间用空格隔开。 (1<=N<=100 , 1<=L<=7)
第二行为N个0~9的数字,中间用空格隔开。

输出

只有一行,含全部满足条件的素数,中间用逗号隔开,保证至少存在一个素数。

样例输入
10 3
8 9 1 0 2 3 5 4 7 6
样例输出
547

自己感觉代码没问题了,但就是过不了。。就不放了。

D.积木
题目描述

我懒得编故事了 m哥牛逼!
有n个积木,第i个积木的高度为a[i],求每个积木前面有几个比它矮的积木

输入

多组输入,每组由两行组成,第一行输入n,第二行输入n个数,为n个积木的高度a[i]
//(1<=n<=100000)(1<=a[i]<=1000000000)

输出

每组数据输出n个数,第i个数为第i个积木前面比他矮的积木的个数

样例输入
5
1 2 3 4 5
样例输出
0 1 2 3 4

这道题是喜闻乐见的超时,最后也没找到好的算法。

看不懂,不想看的

F.罗dalao的密码
题目描述

众所周知,罗dalao十分的厉害。有一天,罗dalao发明了一种密码,用来给文档加密(可认为文档是一个长度为n的字符串s)。
罗dalao要对s[l]...s[r]加密,首先要反转区间s[l]...sr,然后使k=(r-l+1)/2(向下取整),再反转区间s[l]...s[l+k-1]和s[l+k]...s[r],以此类推,一直到区间长度都为1为止。(加密整个文档相当于加密区间s[1]...s[n])
有一天你找到了一篇罗dalao加密过的文档,现在要你求出某个位置的字符加密前的位置。

输入

第一行输入整数T(0<T<=1000),表示数据组数,接下来T行,每行两个整数n和p(1<=p<=n<=1e18),分别表示文档长度和询问的位置

输出

输出T行,每行一个整数,表示每组数据中加密后p位置的字符的原位置

样例输入
4
4 1
4 2
4 3
4 4
样例输出
3
4
1
2
G.罗dalao的小电影
题目描述

罗dalao非常的厉害,于是会有很多人向他请教一些问题,而他每天有L分钟专门用来解答问题。由于来请教的人很多,所以要找罗dalao请教问题,需要预定。
于是,罗dalao知道每天会有n个人来请教问题,第i个到来的人在第ai分钟到来,罗dalao解答问题要用ti分钟(罗dalao精明的安排保证ai+ti<=ti+1和an+tn<=L),然而罗dalao想找空闲的时间看小电影,罗dalao看每一部小电影都要从头看到尾,期间不能有中断,每部小电影的时长为m,罗dalao想知道他每天最多可以看多少部小电影,现在请你帮他计算一下。

输入

单组
第一行3个整数:n,L和m(0<=n<=1e5,1<=L<=1e9,1<=m<=L)
接下来n行,每行两个整数ai和ti(0<=ai<=L-1,1<=ti<=L)

输出

输出一个整数,表示罗dalao最多能观看多少部小电影

样例输入
2 11 3
0 1
1 1
样例输出
3
I.Leo的简单规律题
题目描述

Leo喜欢吃烧烤,而且只吃三种,羊肉串,青菜,火腿肠,她吃烧烤之前喜欢把烧烤摆成一长串,而且还有特别的摆放规则,摆错了她这一顿就不吃了。
规则有:1.对于连续的三个烤串,不能三个烤串都是同一种。
2.对于连续的三个烤串,如果三种烤串都有,青菜不能放在中间(在吃肉中途吃菜是会令人自闭的)
3.依旧是对于连续的三个烤串,第一串和第三串都是青菜的话,中间不能是羊肉或者火腿肠(她的意思是吃素减肥)
现在有三种烤串都有无数根,她想摆出长度为n的烤串,请你求出方案数(由于结果可能会很大,所以只需给出答案模1000000007)

输入

第一行有一个数字T(T<100),表示有T组数据
接下来的T行,每行一个数字n (1≤N≤1010)

输出

对于每一组数据,输出摆出长度为n的烤串的方案数

样例输入
4
2
3
4
6
样例输出
9
20
46
244
问题 J.Leo的简单数列
题目描述

Leo有两个数列,它们的长度都是n
在最开始,a数列里都是0,b数列是Leo随机填充的n个数(数字为1-n,保证b数列是1-n的一个排列)
现在Leo可以进行两种操作
1. add L R 表示她给a数列从a[L],a[L+1],...,a[R],都加一

  1. query L R 表示她想知道当 L<= i <=R 时 a[i]/b[i](向下取整)的所有项的总和
    当然Leo在数学这一块还不是很熟练,上次月考数学才110分,所以想请你帮她完成这些操作
输入

多组数据
对于每组数据,第一行有2个数字n,q,表示a与b的长度 和操作数。1<= n,q < =100000
第二行有n个数字,表示数列b的初始状态
接下来的q行,每行一个操作,具体操作格式如题目所给
1<= L <= R <= n

输出

对于每一个query操作,输出一行表示求和的结果。

样例输入
6 10
6 1 4 3 2 5
query 1 4
add 2 2
query 3 6
add 1 6
add 3 4
query 2 5
query 1 6
add 2 4
query 1 4
query 3 5
样例输出
0
0
2
2
4
1

总结

我果然还是只能做简单题。。

竞赛网站





































华南师大2017年acm程序设计竞赛新生初赛题解

华南师大2017年ACM程序设计竞赛新生初赛题解华南师范大学第很多届ACM程序设计竞赛新生赛(初赛)在2017年11月20日-27日成功举行,共有146名同学有效参赛(做出1题)。进入决赛的资格初定为完成并通过5题或以上,决赛时间是12... 查看详情

2016ccpc东北地区大学生程序设计竞赛(2018年8月22日组队训练赛)(代码片段)

题目链接:http://acm.hdu.edu.cn/search.php?field=problem&key=2016CCPC%B6%AB%B1%B1%B5%D8%C7%F8%B4%F3%D1%A7%C9%FA%B3%CC%D0%F2%C9%E8%BC%C6%BE%BA%C8%FC+-+%D6%D8%CF%D6%C8%FC&source=1&searchmode=sour 查看详情

2018年ti杯大学生电子设计竞赛

2018年TI杯大学生电子设计竞赛目录标题2018年TI杯大学生电子设计竞赛1、A题:电流信号检测装置(本科)--2018年TI杯大学生电子设计竞赛2、B题:灭火飞行器(本科)--2018年TI杯大学生电子设计竞赛3、C题ÿ... 查看详情

c题:无线充电电动小车(本科)--2018年ti杯大学生电子设计竞赛

...电电动小车(本科)–2018年TI杯大学生电子设计竞赛文章目录C题:无线充电电动小车(本科)--2018年TI杯大学生电子设计竞赛1、任务2、要求3.说明1、任务设计并制作一个无线充电电动车,包括无线充... 查看详情

a题:电流信号检测装置(本科)--2018年ti杯大学生电子设计竞赛

...信号检测装置(本科)--2018年TI杯大学生电子设计竞赛文章目录A题:电流信号检测装置(本科)--2018年TI杯大学生电子设计竞赛1、任务2、要求3、说明1、任务如图1所示,由任意波信号发生器产生的信号经... 查看详情

2018年数学建模国赛时间

2018高教社杯全国大学生数学建模竞赛的具体时间已经确定为9月13日(周四)20时至9月16日(周日)20时。作为四大国家级大学生竞赛之一,数学建模大赛是针对遇到的问题或者具体事例,通过数学建模的方式对结果进行预测,建... 查看详情

2018年湘潭大学程序设计竞赛g-又见斐波那契(代码片段)

推一推矩阵直接快速幂。1#include<bits/stdc++.h>2#defineLLlonglong3#definepiipair<int,int>4#definemkmake_pair5#definefifirst6#definesesecond7usingnamespacestd;89constintN=1e5+7;10constintM=1e5+7;11cons 查看详情

2018年长沙理工大学第十三届程序设计竞赛题解

 【题目链接】 A- LL简单题。#include<bits/stdc++.h>usingnamespacestd;intT;chars[2000];intmain()while(gets(s))intlen=strlen(s);for(inti=0;s[i];i++)if(s[i]>=‘A‘&&s[i]<=‘Z‘)s[ 查看详情

数学建模2022年整年数学建模竞赛时间表

目录1MathorCup杯-高校数学建模挑战赛2美国大学生数学建模竞赛3“华东杯”大学生数学建模邀请赛4“华中杯”大学生数学建模挑战赛5五一数学建模竞赛6长三角高校数学建模竞赛7全国大学生电工数学建模竞赛8“深圳杯”数学建模... 查看详情

数学建模2022年整年数学建模竞赛时间表

目录1MathorCup杯-高校数学建模挑战赛2美国大学生数学建模竞赛3“华东杯”大学生数学建模邀请赛4“华中杯”大学生数学建模挑战赛5五一数学建模竞赛6长三角高校数学建模竞赛7全国大学生电工数学建模竞赛8“深圳杯”数学建模... 查看详情

2018年“三盟科技杯”中国大学生程序设计竞赛(湖南)

2018年“三盟科技杯”中国大学生程序设计竞赛(湖南)A.Easyh-index题目描述:给出一个数组\(a_i\),求最大的\(h\),使得至少有\(h\)个数不少于\(h\)。solution模拟。时间复杂度:\(O(nlogn)\)B.Higherh-index题目描述:写论文,当一份论文花... 查看详情

2017年“达内杯”台州学院第十届大学生程序设计竞赛非官方题解

 感谢crq兄弟搞了这次校赛,让我认识到了自己傻的时候确实傻的可爱。crq棒棒哒,我们OJ也十年多了,不容易啊。大家能用得上的时候确实要练好基本功啊。5259:多项式值统计  TimeLimit(Common/Java):1000MS/3000MS  Memor... 查看详情

f题:无线话筒扩音系统(本科)--2018年ti杯大学生电子设计竞赛

...话筒扩音系统(本科)--2018年TI杯大学生电子设计竞赛文章目录F题:无线话筒扩音系统(本科)--2018年TI杯大学生电子设计竞赛1、任务2、要求3、说明1、任务设计制作一个短距无线话筒扩音系统,用于会场... 查看详情

d题:手势识别装置--2018年ti杯大学生电子设计竞赛

D题:手势识别装置–2018年TI杯大学生电子设计竞赛文章目录D题:手势识别装置--2018年TI杯大学生电子设计竞赛1.任务2.要求3.说明1.任务基于TI公司传感芯片FDC2214设计制作一个手势识别装置,实现... 查看详情

b题:灭火飞行器(本科)--2018年ti杯大学生电子设计竞赛

...1a;灭火飞行器(本科)--2018年TI杯大学生电子设计竞赛文章目录B题:灭火飞行器(本科)--2018年TI杯大学生电子设计竞赛1、任务2、要求3.说明1、任务基于四旋翼飞行器设计一个灭火飞行器(简称飞行... 查看详情

h题:简易功率测量装置(高职高专)--2018年ti杯大学生电子设计竞赛

...测量装置(高职高专)--2018年TI杯大学生电子设计竞赛文章目录H题:简易功率测量装置(高职高专)--2018年TI杯大学生电子设计竞赛1、任务2、要求3、说明1、任务利用TI的MSP430F5529设计并制作一个简易功率测量... 查看详情

g题:简易数字信号时序分析装置(高职高专)--2018年ti杯大学生电子设计竞赛

...析装置(高职高专)–2018年TI杯大学生电子设计竞赛文章目录G题:简易数字信号时序分析装置(高职高专)--2018年TI杯大学生电子设计竞赛1、任务2、要求3、说明1、任务设计一个数字信号时序分析装置,... 查看详情

e题:变流器负载试验中的能量回馈装置(本科)--2018年ti杯大学生电子设计竞赛

...量回馈装置(本科)–2018年TI杯大学生电子设计竞赛文章目录E题:变流器负载试验中的能量回馈装置(本科)--2018年TI杯大学生电子设计竞赛1、任务2、要求3、说明1、任务设计并制作一个变流器及负载试验时... 查看详情