2017哈尔滨理工大学新生赛(题补)

C:

C.一品五彩棒
Time Limit: 2000 MSMemory Limit: 256000 K
Total Submit: 303 (89 users)Total Accepted: 11 (11 users)Special Judge: No
Description

公元2017年11月19日,王权熊熊和东方平平因为妖馨斋出品的“一品五彩棒”棒棒糖大打出手。王权熊熊祭出神剑王权剑,东方平平不甘示弱,反手就拿出一打洋葱擦眼睛,想要放出大招——虚空之泪。

大战开始,打的天昏地暗,昏天黑地,飞沙走石,极其恐怖。

虚空之泪,只有具备强大法力且至情至性之人才能产生,世间最为坚硬,且可以通过切割空间达到瞬时缩短距离。

虚空之泪的形成需要三滴完美契合的普通泪滴。现有n滴普通泪滴,每滴泪滴具有坚硬属性,只有三滴普通泪滴的坚硬属性之和为0时,表示三滴泪滴完美契合,可以合成虚空之泪。问,n滴普通泪滴中,有多少组可以合成虚空之泪的普通泪滴?要求按照字典序输出它们的坚硬属性值。

Input

输入数据有多组,每组第一行输入一个整数n (1  n  3000)表示当前普通泪滴的数目。接下来输入n个整数ai(-106  ai 106),表示n滴泪滴的坚硬属性值。

Output

对于每组输入数据,找出所有可以合成虚空之泪的普通泪滴组合,按照提示里的顺序输出它们的坚硬属性值,相同的组合只输出一次,每种组合占一行。若不存在这种组合,不输出。每种组合输出到一行,两个数之间用空格隔开,行末不包含空格。

Sample Input

6

-1 0 1 2 -1 4

3

-1 -1 2
Sample Output

-1 -1 2

-1 0 1

-1 -1 2
Hint

输出顺序:不同组合之间按照第一个数字大小从小到大,若第一个数字相同,按照第二个数字从小到大,若第二个数字也相同,按照第三个数字从小到大。一个组合内的数字,按照从小到大的顺序输出。


思路:从小到大排序,第一重循环遍历所有数,确定第一个数后,从 该数的后一位 和 最大数 开始向中间寻找符合题意的值输出。

代码(以下代码未经验证,不保证正确性)

TLE的写法

#include<stdio.h>
#include<algorithm>
#include<string.h>
#include<math.h>
#include<stdlib.h>
using namespace std;

int v[3005];

int main()
{
    int n,a,b,c,i,j,k;
    while(~scanf("%d",&n))
    {
        a=99999999,b=9999999,c=9999999;
        for(i=0;i<n;i++)
            scanf("%d",&v[i]);
        sort(v,v+n);
        for(i=0;i<n-2;i++)
        {
            if(v[i]>0)break;
            if(v[i]==a)continue;
            a=v[i];
            for(j=i+1;j<n-1;j++)
            {
                if(v[i]+v[j]>0)break;
                if(v[j]==b)continue;
                b=v[j];
                for(k=j+1;k<n;k++)
                {
                    if(v[i]+v[j]+v[k]>0)break;
                    c=v[k];
                    if(a+b+c==0)
                    {
                        printf("%d %d %d\n",a,b,c);
                        break;
                    }
                }
                c=9999999;
            }
            b=99999999;
        }
    }
    return 0;
}

应该没毛病的写法

#include<stdio.h>
#include<algorithm>
#include<string.h>
#include<math.h>
#include<stdlib.h>
using namespace std;

int v[3005];

int main()
{
    int n,i,j,k;
    while(~scanf("%d",&n))
    {
        for(i=0;i<n;i++)
            scanf("%d",&v[i]);
        sort(v,v+n);
        for(i=0;i<n-2;i++)
        {
            if(i>0&&v[i]==v[i-1])continue;
            int l=i+1,r=n-1;
            while(l<r)
            {
                if(v[i]+v[l]+v[r]<0)l++;
                else if(v[i]+v[l]+v[r]>0)r--;
                else if(v[i]+v[l]+v[r]==0)
                {
                    printf("%d %d %d\n",v[i],v[l++],v[r--]);
                    while(l<r&&v[l]==v[l-1])l++;
                    while(l<r&&v[r]==v[r+1])r--;
                }
            }
        }
    }
    return 0;
}



F:

F.巴啦啦能量
Time Limit: 2500 MSMemory Limit: 256000 K
Total Submit: 70 (24 users)Total Accepted: 9 (9 users)Special Judge: No
Description

话说上回涂山小八进入“时空之门”,却不是回到现实世界,而是一间方正小屋。随着时空之门缓缓关上,小八才看清墙上排着很多奇怪的字符。正奇怪着,小屋内响起了说话声。

“你现在本应已回到现实世界,但你来的时间太久,能量已经用光,无法直接通过时空之门,所以才会来到此地。唯今之计只有获得巴啦啦能量,否则你依然会被永远留在此地。”

“如何获得巴啦啦能量?”

“看见墙上的巴啦啦密文了吗?我现在给你一个能量之匙,从巴啦啦密文中找出巴啦啦能量串即可获得巴啦啦能量。巴啦啦能量串是所有包含能量之匙的最小串,切记,若找到多个符合要求的巴啦啦能量串,不可贪多,只需带走第一个,否则前功尽弃。”

Input

输入数据有多组,每组数据输入第一行输入字符串巴啦啦密文S,第二行输入字符串能量之匙TS长度lens1lens105),T长度lent1lent10)(输入不包含空格),输入字符区分大小写。

Output

对于每组输入数据,输出找到的巴啦啦能量串,每组输出占一行。如果找不到巴啦啦能量串,输出一个空行。

Sample Input

ADOBECODEBANC

ABC

ABCDA

BD
Sample Output

BANC

BCD

太难辣,http://blog.csdn.net/riba2534/article/details/78600299


J:

J.递归画图
Time Limit: 1000 MSMemory Limit: 256000 K
Total Submit: 149 (47 users)Total Accepted: 32 (27 users)Special Judge: No
Description

递归图形是一类非常有意思的图形,今天介绍其中一种,点阵递归图(这个名字其实是随便起的)。点阵递归图有如下特点:

第一层若是:


第二层即为:

Input

输入数据有多组,第一行输入两个正整数abab1000),表示边长为a的正方形第一层图形,b表示将要输出的b层图形,接下来是a行字符串,每行字符串包含a个字符,字符为空格或*

Output

对于每组数据输出一个图形,每组输出后跟随一个空行。

Sample Input

Sample Output


Hint

输入输出为正方形图形,不是*的位置,保留空格占位。


思路:

代码:


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值