C:
C.一品五彩棒 | |||||
| |||||
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.巴啦啦能量 | |||||
| |||||
Description | |||||
话说上回涂山小八进入“时空之门”,却不是回到现实世界,而是一间方正小屋。随着时空之门缓缓关上,小八才看清墙上排着很多奇怪的字符。正奇怪着,小屋内响起了说话声。 “你现在本应已回到现实世界,但你来的时间太久,能量已经用光,无法直接通过时空之门,所以才会来到此地。唯今之计只有获得巴啦啦能量,否则你依然会被永远留在此地。” “如何获得巴啦啦能量?” “看见墙上的巴啦啦密文了吗?我现在给你一个能量之匙,从巴啦啦密文中找出巴啦啦能量串即可获得巴啦啦能量。巴啦啦能量串是所有包含能量之匙的最小串,切记,若找到多个符合要求的巴啦啦能量串,不可贪多,只需带走第一个,否则前功尽弃。” | |||||
Input | |||||
输入数据有多组,每组数据输入第一行输入字符串巴啦啦密文S,第二行输入字符串能量之匙T,S长度lens(1≤lens≤105),T长度lent(1≤lent≤105 )(输入不包含空格),输入字符区分大小写。 | |||||
Output | |||||
对于每组输入数据,输出找到的巴啦啦能量串,每组输出占一行。如果找不到巴啦啦能量串,输出一个空行。 | |||||
Sample Input | |||||
ADOBECODEBANC ABC ABCDA BD | |||||
Sample Output | |||||
BANC BCD |
太难辣,http://blog.csdn.net/riba2534/article/details/78600299
J:
J.递归画图 | |||||
| |||||
Description | |||||
递归图形是一类非常有意思的图形,今天介绍其中一种,点阵递归图(这个名字其实是随便起的)。点阵递归图有如下特点: 第一层若是:
第二层即为: | |||||
Input | |||||
输入数据有多组,第一行输入两个正整数a,b(ab<1000),表示边长为a的正方形第一层图形,b表示将要输出的b层图形,接下来是a行字符串,每行字符串包含a个字符,字符为空格或*。 | |||||
Output | |||||
对于每组数据输出一个图形,每组输出后跟随一个空行。 | |||||
Sample Input | |||||
| |||||
Sample Output | |||||
| |||||
Hint | |||||
输入输出为正方形图形,不是*的位置,保留空格占位。 |
思路:
代码: