2018“氢舞杯”编程挑战赛2

问题 N: 逆反的01串

时间限制: 1Sec 内存限制: 128MB 提交: 10 解决: 7

题目描述

Fans是个ACM程序设计迷。有时侯,他表现出很强烈的逆反心理,你往东,他往西,你往南,他偏往北。这一次,不知道又是谁惹着他了,好端端的一个个01串,到了他的手里,都变成10串了。请你编个程序来模仿他的行为,将01串(长度≤200),全变成10串吧。

输入

0110100100100 1000000010000000000

输出

1001011011011 0111111101111111111思路:每一位取反
#include<stdio.h> 

int main()
{
    char a[100];
    while(gets(a)!=NULL){
          int i=0;
        while(a[i])
         {
          putchar(a[i] ^ 1);
          i++;
         }
         printf("\n");
    }
    return 0;
}

问题 M: 能量项链

时间限制: 1Sec 内存限制: 128MB 提交: 6 解决: 5

题目描述

在Mars星球上,每个Mars人都随身佩带着一串能量项链。在项链上有 N颗能量珠。能量珠是一颗有头标记与尾标记的珠子,这些标记对应着某个正整数。并且,对于相邻的两颗珠子,前一颗珠子的尾标记一定等于后一颗珠子的头标 记。因为只有这样,通过吸盘(吸盘是Mars人吸收能量的一种器官)的作用,这两颗珠子才能聚合成一颗珠子,同时释放出可以被吸盘吸收的能量。如果前一颗 能量珠的头标记为m,尾标记为r,后一颗能量珠的头标记为r,尾标记为n,则聚合后释放的能量为m*r*n(Mars单位),新产生的珠子的头标记为m, 尾标记为n。 
需要时,Mars人就用吸盘夹住相邻的两颗珠子,通过聚合得到能量,直到项链上只剩下一颗珠子为止。显然,不同的聚合顺序得到的总能量是不同的,请你设计一个聚合顺序,使一串项链释放出的总能量最大。 
例如:设N=4,4颗珠子的头标记与尾标记依次为(2,3) (3,5) (5,10) (10,2)。我们用记号◎表示两颗珠子的聚合操作,(j◎k)表示第j,k两颗珠子聚合后所释放的能量。则第4、1两颗珠子聚合后释放的能量为: 
(4◎1)=10*2*3=60。 
这一串项链可以得到最优值的一个聚合顺序所释放的总能量为 
((4◎1)◎2)◎3)=10*2*3+10*3*5+10*5*10=710。

输入

第一行是一个正整数N(4≤N≤100),表示项链上珠子的个数。第二行 是N个用空格隔开的正整数,所有的数均不超过1000。第i个数为第i颗珠子的头标记(1≤i≤N),当i〈N时,第i颗珠子的尾标记应该等于第i+1颗 珠子的头标记。第N颗珠子的尾标记应该等于第1颗珠子的头标记。 
至于珠子的顺序,你可以这样确定:将项链放到桌面上,不要出现交叉,随意指定第一颗珠子,然后按顺时针方向确定其他珠子的顺序。

输出

只有一行,是一个正整数E(E≤2.1*10^9),为一个最优聚合顺序所释放的总能量

样例输入

4
2  3  5  10
 
 1 #include<cstdio>
 2 #include<iostream>
 3 #define M 210
 4 using namespace std;
 5 int a[M],f[M][M];
 6 int main()
 7 {
 8     int n;
 9     scanf("%d",&n);
10     for(int i=1;i<=n;i++)
11     {
12         scanf("%d",&a[i]);
13         a[i+n]=a[i];
14     }
15     for(int len=1;len<=n-1;len++)
16       for(int i=1;i<=2*n-len;i++)
17       {
18           int j=i+len;
19           for(int k=i;k<j;k++)
20             f[i][j]=max(f[i][j],f[i][k]+f[k+1][j]+a[i]*a[k+1]*a[j+1]);
21       }
22     int ans=0;
23     for(int i=1;i<=n;i++)
24       ans=max(ans,f[i][i+n-1]);
25     printf("%d",ans);
26     return 0;
27 } 


问题 O: 剩下的树

时间限制: 1Sec 内存限制: 32MB 提交: 12 解决: 6


题目描述

有一个长度为整数L(1<=L<=10000)的马路,可以想象成数轴上长度为L的一个线段,起点是坐标原点,在每个整数坐标点有一棵树,即在0,1,2,...,L共L+1个位置上有L+1棵树。
    现在要移走一些树,移走的树的区间用一对数字表示,如 100 200表示移走从100到200之间(包括端点)所有的树。
    可能有M(1<=M<=100)个区间,区间之间可能有重叠。现在要求移走所有区间的树之后剩下的树的个数。

输入

两个整数L(1<=L<=10000)和M(1<=M<=100)。
    接下来有M组整数,每组有一对数字。

输出

可能有多组输入数据,对于每组输入数据,输出一个数,表示移走所有区间的树之后剩下的树的个数。

样例输入

4 2
1 2
0 2
11 2
1 5
4 7
0 0


 1 #include<cstdio>
 2 #include<cstring>//memset头文件
 3 const int maxn = 100010;
 4 int main() {
 5     int tree[maxn];
 6     int L, M, begin, end;
 7     int i, j;
 8     while (scanf("%d %d", &L, &M) != EOF) {
 9         if (L) {
10             memset(tree, 0, sizeof(tree));
11             for (i = 1; i <= M; i++) {
12                 scanf("%d %d", &begin, &end);
13                 for (j = begin; j <= end; j++)
14                     tree[j] = 1;
15             }
16             for (i = j = 0; i <= L; i++) {
17                 if (tree[i] == 0)
18                     j++;
19             }
20             printf("%d\n", j);
21         }
22     }
23     return 0;
24 }

问题 P: P1019

时间限制: 0Sec 内存限制: 128MB 提交: 13 解决: 6

题目描述

给出2个序列A={a[1],a[2],…,a[n]},B={b[1],b[2],…,b[n]},从A、B中各选出n个元素进行一一配对(可以不按照原来在序列中的顺序),并使得所有配对元素差的绝对值之和最大。

输入

输入的第1行为1个整数n 第2行包含n个整数,题目中的A序列。  第3行包含n个整数,题目中的B序列。

输出

一个数,最大配对

样例输入

4
2 5 6 3
1 4 6 7


 1 #include<iostream>
 2 #include<cstdio>
 3 #include<algorithm>
 4 using namespace std;
 5 int a[10000],b[10000];
 6 int n;
 7 int main()
 8 {
 9     while(scanf("%d",&n)==1)
10     {
11         for(int i=0;i<n;i++) scanf("%d",&a[i]);sort(a,a+n);
12         for(int i=0;i<n;i++) scanf("%d",&b[i]);sort(b,b+n);
13         int cnt=0;
14         for(int i=0,j=n-1;i<n;i++,j--)
15         {
16             cnt+=a[i]-b[j]>0?a[i]-b[j]:b[j]-a[i];
17         }
18         printf("%d\n",cnt);
19     }
20     return 0;
21 }
22
23  

问题 Q: 倒数第二

时间限制: 1Sec 内存限制: 128MB 提交: 10 解决: 7

题目描述

有人说倒数第一是毫无压力的,因为没人任何压力而言,但反而倒数第二是提心吊胆的,因为担心倒数第一有一天考试的时候不来,自己沦为倒数第一(^_^)

这道题就是求n个成绩(整数)中倒数第二小的数。
每一个整数都独立看成一个数,比如,有三个数分别是2,2,5,
那么,第二小的数就是2。

输入

输入包含多组测试数据。
输入的第一行是一个整数C,表示有C组测试数据;
每组测试数据的第一行是一个整数n,表示本组测试数据有n个整(2<=n<=10),  
接着一行是 n个整数 (每个数均小于100);

输出

请为每组测试数据输出第二小的整数,每组输出占一行。

样例输入

2
2
1 2
3
1 1 3
 
 1 #include <iostream>
 2 #include <stdlib.h>
 3 using namespace std;
 4
 5 int cmp(const void *x,const void *y)
 6 {
 7     return (*(int*)x - *(int*)y);
 8 }
 9
10 int main()
11 {
12     int c;
13
14     cin >> c;
15     while(c--)
16     {
17         int t,i,a[15];
18         cin >> t;
19         for(i = 0;i<t;i++)
20         cin >> a[i];
21         qsort(a,t,sizeof(int),cmp);
22         cout << a[1] << endl;;
23     }
24
25     return 0;
26 }

 

原文地址:https://www.cnblogs.com/dgwblog/p/9193676.html

时间: 2024-10-11 10:01:09

2018“氢舞杯”编程挑战赛2的相关文章

2018“氢舞杯”编程挑战赛

问题 F: 最小重量机器设计问题 时间限制: 1Sec 内存限制: 128MB 提交: 115 解决: 0 题目描述 设某一机器由n个部件组成,每一种部件都可以从m个不同的供应商处购得.设Wij 是 从供应商j处购得的部件i的重量,Cij 是相应的价格. 试设计一个算法,给出总价格不超过c的最小重量机器设计. ′编程任务: 对于给定的机器部件重量和机器部件价格,编程计算总价格不超过d的最小重量机器设 计. 输入 第一行有 3 个正整数 n ,m和 d.接下来的 2n 行,每 行m个数.前n行是c

[C++] 2017联发科技杯编程挑战赛 复赛题 “杰克船长的烦恼”

题目如下. 规则 杰克船长这次运气不错,抢到了一大堆金币.但他马上又开始发愁了, 因为如何给大家分金币,一直都是件不容易的事,每次杰克船长都要头疼好几天. 关于分金币,海盗的行规是这样的: 每次行动,船长会根据各个海盗的表现记功,事后论功行赏,给大家分金币. 分战利品的时候,海盗们会随意的站成一排,船长给每个人发一袋金币.袋子里的金币数目有多有少,但船长保证每个海盗至少会分到一枚金币. 拿到金币后,相邻的两个海盗会互相比较.如果其中一个功劳高些,那他的金币必须多一些,如果两个人分数一样,他们的金

第六届华为创新杯编程大赛-进阶1第1轮

洞穴逃生 描述: 精灵王子爱好冒险,在一次探险历程中,他进入了一个神秘的山洞.在洞穴深处,精灵王子不小心触动了洞穴内暗藏的机关,整个洞穴将很快塌陷,精灵王子必须尽快逃离洞穴.精灵王子的跑步速度为17m/s,以这样的速度可能是无法逃出洞穴的.庆幸的是精灵王子拥有闪烁法术,可在1s内移动60m,不过每次使用闪烁法术都会消耗魔法值10点.精灵王子的魔法值恢复的速度为4点/s,只有处在原地休息状态时才能恢复. 现在已知精灵王子的魔法初值M,他所在洞穴中的位置与洞穴出口之间的距离S,距离洞穴塌陷的时间T.

【大坑特坑】第六届华为“创新杯”编程大赛初赛题目(第五场)

简直没法吐槽华为的服务器质量了,登一次半小时,提交一次等半小时,然后第二个题的结果还不知道呢,服务器就挂了... 题目本身倒是还挺简单的. A题是鸡兔同笼问题: 给出鸡和兔子的头数和脚数(可能不对),让你判断鸡的个数和兔子的个数..小学经典问题. 关键是不合法的情况,总共有4种. 1.头比脚多.. 2.脚是奇数= = 3.脚>4*头或者脚<2*头. so.出来了. #include <iostream> #include <cstring> #include <c

第六届华为创新杯编程大赛第二轮(2014.4.29)

第一题:外星人比数的大小 来自星星的都教授除了所有感官比地球人高出七倍,始终容颜不老以外,还拥有一项在地球人看来特别神奇的能力,他会瞬间(0.00000000000000000000001s以内)按照他的规则比较地球人熟悉的两个十进制数字的大小,他比较的规则如下:1.将要比较的两个数字分别转换成二进制数字:2.计算两个二进制数字中1的个数,个数多的数字为两者中的大者:3.负数按照其绝对值进行比较:请利用地球人发明的计算机程序逼近都教授的特异功能,实现时可以有以下约束:1.输入数据为范围在-327

2018泰迪杯B题

http://www.tipdm.org/bdrace/jljingsai/20181008/1488.html  2018 年"泰迪杯"数据分析职业技能大赛 B 题 自动售货机商务数据分析与应用 一. 背景自动售货机以线上经营的理念,提供线下的便利服务,以小巧.自助的经营模式节省人工成本, 让实惠.高品质的商品触手可及,成为当下零售经营的又一主流模式. 自动售货机内商品的供给频率.种类选择.供给量.站点选择等是自动售货机运营者需要重点关注的问题.因此,科学的商业数据分析能够帮助经营者

专访POWER 8编程挑战赛选手黄文超:非专科生的编程算法之路

9月23日,IBM和CSDN联合宣布“ 2014 POWER 8极限性能挑战赛 ”正式启动.此次大赛主要面向广大CSDN注册开发者,大赛以云计算的方式为开发者提供了POWER 8开发环境,开发者利用POWER 8的特性,基于不同场景进行应用开发.此次大赛,不仅使更多的开发者充分利用了POWER 8,也为开发者.技术达人提供一个展示自我的舞台. 正如大赛发布仪式上,IBM大中华区副总裁侯淼所言,之所以要支持这样一个大赛,目的就是希望吸引更多的开发者去开发一些新的算法,把整个POWER 8引擎的能力

2018年星际争霸AI挑战赛–三星与FB获冠亚军,中科院自动化所夺得季军

雷锋网 AI 科技评论消息,2018 年 11 月 13-17 日,AAAI 人工智能与交互式数字娱乐大会 (AI for Interactive Digital Entertainment) 在阿尔伯塔大学举办.会上宣布了一年一度的星际争霸 AI 挑战赛结果:这也是即时战略(RTS)游戏 AI 比赛中最重要的比赛之一. 第八届(2018 年) AIIDE StarCraft AI Competition 星际争霸 AI 挑战赛共有 27 支团队参赛,包括知名机构如三星.中科院自动化所.Face

第二届战神杯线上编程挑战赛月赛第一题:回文数

题目详情: Njzy学习了回文串后联想到了回文数,他希望统计出一个区间内的全部回文数.如今给定一个闭区间[a,b],求这个区间里有多少个回文数. 比方[20,30],仅仅有一个回文数那就是22. 输入描写叙述: 输入包括多组測试数据,每组測试数据包括两个整数a,b, (0<a<=b<10^6). 输出描写叙述: 对于每组測试数据输出对应的答案. 答题说明: 输入例子: 1 10 20 30 300 400 输出例子: 9 1 10 解题思路: total[i]代表从1到i之间有多少回文数