2019年暑假集训第八套题

问题 A: 回文串2

题目描述

陈老师的学生都已经接触过回文串了,现在陈老师给他们一个更难的问题:有一串字符串,它的最长回文子串(字串含义:串中任意个连续的字符组成的子序列称为该串的子串)的长度是多少? 

输入

输入问价为“hui.in” 

输入为一行字符串,仅由小写英文字母组成。 

输出

输出文件为“hui.out” 

输出一个整数,表示输入串的最长回文子串的长度 

样例输入

abac

样例输出

3

提示

【数据范围】 

对于100%的数据,输入字符串长度不超过1000 

题解:

1、分为两种情况来考虑:奇序回文和偶序回文

2、判断是否是回文串的标准:s[i-j]==s[i+j](是回文)

代码:

#include<bits/stdc++.h>
using namespace std;
string s;
int main()
{
    cin>>s;
    int len=s.size();
    int t;
    int maxx=-1;
    for(int i=0;i<len;i++)
    {
        for(int j=0;i-j>=0&&i+j<len;j++)
        {
            if(s[i-j]!=s[i+j])break;
            t=2*j+1;
        }
        maxx=max(maxx,t);
        for(int j=0;i-j>=0&&i+j<len;j++)
        {
            if(s[i-j]!=s[i+j+1])break;
            t=2*j+2;
        }
        maxx=max(t,maxx);
    }
    cout<<maxx<<endl;
}

问题 B: 排名

题目描述

Cwbc和XHRlyb都参加了SDOI2018,他们特别关心自己的排名。
我们定义每一场比赛每位选手的标准分为它的分数乘以满分再除以比赛中选手所获得的最高分。

NOIP2017的满分为600分,SDOI2018每一天的比赛满分均为300分。
我们定义总分为NOIP2017的标准分的25%,加上SDOI2018 前两天标准分之和的25%,再加上SDOI2018后两天标准分之和的50%。

XHRlyb告诉你每一次比赛每个选手的分数,你需要按照名次从高到低依次输出他们的名字和总分。
聪明的你在仔细阅读题目后,一定可以顺利的解决这个问题!

输入

输入数据有多组数据,对于每组数据,格式为:
第一行,一个整数n,表示选手数量。
接下来n行,每一行有用空格隔开的一个字符串和五个整数,分别表示选手姓名、NOIP2017成绩以及SDOI2018四天比赛的成绩

输出

输出数据应有多组,每组输出有多行,每行应有一个选手姓名和他的总分。

输出的总分应保留5位小数,且如果总分的误差不超过10^-5,我们认为两名选手并列。

若两名选手并列,则按姓名的字典序顺序从小到大输出。

样例输入

7
tzt 570 290 155 300 295
tyc 570 260 225 295 300
rqy 540 275 110 290 290
cz 520 260 130 285 290
hly 490 185 155 290 285
zhx 510 220 110 285 285
dzm 510 185 85 280 280

样例输出

tyc 589.74138
tzt 574.16667
rqy 539.89262
cz 534.91682
hly 515.95886
zhx 512.77374
dzm 490.38869

提示
保证姓名均为小写字母且个数在[2,10]之间,每次比赛的分数不会超过满分也不会低于0分。
保证选手总数不会超过2 * 105。

题解:

这题比较烦,解释一下题目的意思:

给你n个选手五场比赛的分数,其中一场满分600分,四场300分,用题目中的计算方法去计算他们的总分

代码:

#include<bits/stdc++.h>
using namespace std;
int n;
const double wucha=1e-5;
struct node
{
    char name[25];
    double a,b,c,d,e;
    double zf;
}s[200005];
int cmp(const node a,const node b)
{
    if(fabs(a.zf-b.zf)>wucha)
        return a.zf>b.zf;
    else
    {
        if(strcmp(a.name,b.name)>0)return false;
        else return true;
    }
}
int main()
{
    while(scanf("%d",&n)!=EOF)
    {
        double max_a=-1,max_b=-1,max_c=-1,max_d=-1,max_e=-1;
        for(int i=1;i<=n;i++)
        {
            scanf("%s%lf%lf%lf%lf%lf",s[i].name,&s[i].a,&s[i].b,&s[i].c,&s[i].d,&s[i].e);
            max_a=max(s[i].a,max_a);
            max_b=max(s[i].b,max_b);
            max_c=max(s[i].c,max_c);
            max_d=max(s[i].d,max_d);
            max_e=max(s[i].e,max_e);
        }
        for(int i=1;i<=n;i++)
        {
            s[i].a=s[i].a*600/max_a;
            s[i].b=s[i].b*300/max_b;
            s[i].c=s[i].c*300/max_c;
            s[i].d=s[i].d*300/max_d;
            s[i].e=s[i].e*300/max_e;
            s[i].zf=s[i].a*0.25+(s[i].b+s[i].c)*0.25+(s[i].d+s[i].e)*0.5;
        }
        sort(s+1,s+1+n,cmp);
        for(int i=1;i<=n;i++)
        {
            printf("%s %.5lf\n",s[i].name,s[i].zf);
        }
    }
}
发布了43 篇原创文章 · 获赞 12 · 访问量 3647

猜你喜欢

转载自blog.csdn.net/xzerui/article/details/97613648