Ants、Competitive Problem Setting

Ants

题目描述:
jc大佬演讲比赛差一点就进决赛了,他很郁闷,所以又来了一堆小蚂蚁,看看大家有没有补题,补了就是水题了,没补就让你们也陪他郁闷郁闷(比赛期间禁止复制代码,互相交流,如若发现,取消资格!!!!!)

一队蚂蚁在一根水平杆上行走,每只蚂蚁固定速度 1cm/s. 当一只蚂蚁走到杆的尽头时,立即从秆上掉落. 当两只蚂蚁相遇时它们会掉头向相反的方向前进. 我们知道每只蚂蚁在杆上的初始位置, 但是, 我们不知道蚂蚁向哪个方向前行. 你的任务是计算所有蚂蚁都杆上掉落可能的最短时间和最长时间.
Input
第一行包含一个整数,给出测试实例数量. 每组数据开始有两个整数: 杆的长度 (单位:cm) 和杆上蚂蚁数量 n. 之后是 n 个整数给出每只蚂蚁从杆的最左边开始的位置, 且是无序的. 输入的每个整数都不大于 1000000 ,两个数字用空格分开.
Output
对于每组输入输出两个整数. 第一个整数表示所有蚂蚁从杆上掉落可能的最短时间(如果它们前行方向选择得当) ,第二个整数表示可能的最长时间.

Sample Input

10 3
2 6 7
214 7
11 12 7 13 176 23 191

Sample Output

4 8
38 207

分析:
当两只蚂蚁相遇后返回,则两者的时间交换,所以可以无视蚂蚁的区别,当两只蚂蚁相遇时它们保持原样交错而行。这样每只蚂蚁都是独立运动的,那么只要找每只蚂蚁掉下去的时间就行了。
这道题如果用cin输入则会超时,要用scanf。

CODE:

#include <iostream>
#include <algorithm>
#include <cstdio>
using namespace std;
int main()
{
    int t;
    scanf("%d",&t);
    while(t--)
    {
        int l,n,i;
        scanf("%d%d",&l,&n);
        int mi,ma,remi,rema,a;
        remi=rema=0;
        for(i=0; i<n; i++)
        {
            scanf("%d",&a);
            mi=min(a,l-a);
            remi=max(remi,mi);
            ma=max(a,l-a);
            rema=max(rema,ma);
        }
        printf("%d %d\n",remi,rema);
    }
    return 0;
}

Competitive Problem Setting

题目描述
Chiaki经常给各种比赛出题,每场比赛需要的题目数从3到25不等,因此对题目的管理显得非常重要。

为了方便管理,Chiaki决定给每个题目取一个只有3个字符的编码。对于一个标题为ss的题目,它的编码是s长度为3的前缀。

现在给出Chiaki出的n个题的标题,求出这n个题的编码是否互不相同。

输入描述
输入有多组数据。第一行有一个整数T,表示测试数据组数。然后对于每组数据:

第一行包含一个整数n (3≤n≤25),表示题目数目。

接下来n行,每行包含一个字符串si (3≤si≤25),表示第i个题目的标题。保证si
仅由英语小写字母组成。

保证所有数据中nn的和不超过1000。

输出描述
对于每组数据,如果这n个题目的编码互不相同,输出Yes,否则输出No
样例输入

2
23
rectangles
tables
knight
dice
pawn
drilling
thewaytobytemountain
stamps
byteanteantowns
circulargame
permutation
quasitemplate
cakes
diamond
cards
fishes
chess
typetwodebruijnsequences
fibonaccimachine
colouring
programmingcontest
watchmen
tram
3
abcd
abce
cccd

样例输入

Yes
No

样例解释 1
对于第1个样例,所有长度为3的前缀都互不相同,所以输出是Yes。

对于第2个样例,前两个题目的前缀都是abc,所以输出是No。

CODE:

#include <iostream>
#include <string>
#include <cstdio>
using namespace std;

int main()
{
    int t;
    cin>>t;
    while(t--)
    {
        int n,i,j;
        cin>>n;
        string a[26];
        bool flag=true;
        for(i=0; i<n; i++)
        {
            cin>>a[i];
            a[i]=a[i].substr(0,3);  //截取字符串,从0开始,截取三个。因为只需判断前三个。
            if(flag)
                for(j=0; j<i; j++)
                {
                    if(a[i].compare(a[j])==0)  //判断相同
                        flag=false;
                }
        }
        if(flag)
            cout<<"Yes"<<endl;
        else
            cout<<"No"<<endl;
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_44350170/article/details/102527184