路中信息竞赛No.1解题报告

来源:互联网 发布:apache serveradmin 编辑:程序博客网 时间:2024/05/02 00:27

 

解题报告:

   1.愤怒的大锤

(angry.cpp/c/pas)

【问题描述】

大家好,我叫王大锤!今天,我看到一个和我长得一模一样的人他叫段公子。(A:什么!你确

定一模一样?照镜子呢吧你!王:真的,听说别人叫他陈大锤。)我很生气,抓住他的头发,甩他,

使其做匀速圆周运动(A:圆周运动!你这是要闹哪样啊!),我告诉你他的身高l(m),及角速度

w(rad/s),请你求出他的臭鞋子(可看作质点)受到的向心加速度a(m/s²)。(***,打个人也能编题,

你脑子进浆糊啦!) *段公子头发这么短,长度就忽略不计了。

【输入】

第一行为两个数l,w.

【输出】

输出仅一行,为一个数a(保留两位小数,记住四舍五入)。

【输入输出样例】

【数据范围与提示】

不需要你用什么高精度。( ^_^ )/~~

输入数据可能为浮点数哦。

提示:小盆友,什么是匀速圆周运动呢?就是绕着一个点转圈圈,这个角速度中的角seita

与原来初中学的1°啊什么的不一样,这个是用弧长/半径,比如说2π就代表着360°。这个貌似

没有用。上公式:

a=(2π)²*r/T²。对了T是周期,就是搞一圈的时间。

想要简单的公式??门儿都没有。

=====================================================================================

编者注:= = 感觉还是不知道他讲的什么东西,我再补充一点点。弧度制的角度没有单位,比如

说2π就代表着360°,但为了区分于一般数字,也可以把rad当作其单位,如2π rad,角速度即物体

单位时间内转过的角度。与角速度相关的一个物理量叫做线速度,即我们一般情况下讲的速率。

线速度v=w*r; 还有一个物理量叫转速(r),和角速度差不多,是物体单位时间内转的圈数,而周期

就是转一圈需要的时间, rT=1; 要是理解了这些那题目就和a+b没什么区别,仔细看看吧。

只能帮你们到这里了。。。要是被物理知识卡了就去揍桃子吧。

angry.in angry.out

1 6 36.00

 

题意:一道物理题,无类型可言。

     解体:搞好保留两位小数,输入lw,向心加速度为w²*l

           Printf(“%.2lf”,&w²*l)中,直接帮忙四舍五入了,又一步完成。解题完结。

 

Int   Main

  Double lw

Cin>>lw

Printf(“%.2lf”,&w²*l);

Returned 0

 

2

2.皮蛋的姨妈

(aunt.cpp/c/pas)

【问题描述】

人的身体有时会有异常反应,皮蛋的妈妈有很多姐妹,也就是皮蛋的姨妈。她们经常会

来看望皮蛋。小姨妈每23 天来一次,大姨妈每28 天来一次,第三个姨妈33 天。在她们来

看望这天,人会在相应的方面表现不同。例如,他大姨妈来了的时候,会思维迟钝,天天喝

红糖茶。因为三个姨妈的间隔时间不同,所以通常三个反应不会落在同一天。所以,皮蛋想

知道何时三个姨妈会在同一天到。你的任务输出从给定时间d 开始(不包括给定时间)下一

次三个姨妈在同一天的时间(距给定时间的天数)。例如:给定时间为10,下次出现三个姨

妈同天的时间是12,则输出2。

【输入】

输入四个整数:a, b, c和d。a, b, c分别表示第一、第二和第三姨妈出现的时间。d 是

给定的时间,可能小于a, b, 或c。所有给定时间是非负的并且小于365, 所求的时间小于

21252

当p = e = i = d = -1时,输入数据结束。

【输出】

从给定时间起,下一次三个姨妈同天的时间(距离给定时间的天数)。

采用以下格式:

Case 1: the next triple peak occurs in 1234 days.

注意:即使结果是1天,也使用复数形式“days”。

【输入输出样例】

【数据范围与提示】

所求时间d<21252,0≤每组数据的子数据数≤15.

PS:不要告诉皮蛋,233333,这是佐佐出的←.

aunt.in aunt.out

0 0 0 0

4 5 6 7

-1 -1 -1 -1

Case 1: the next triple peak occurs in 21252 days.

Case 2: the next triple peak occurs in 19575 days.

 

 

皮蛋的姨妈

求最小公倍数的加强版,在给定的起始天数下求最小公倍数,写个for循环,先找出小姨妈最先出现的时候,再找大姨妈,找大姨妈时,应加上小姨妈的周期23再找,按这样再找第三姨妈,一个一个枚举吧,直到找到了,输出这个数。*注意换行。

 

#include <cstdio>

#include <cstdlib>

 

int main()

{

    freopen("aunt.in","r",stdin);

    freopen("aunt.out","w",stdout);

    int a, b, c, d, j, no = 1;

    scanf("%d%d%d%d", &a, &b, &c, &d);

    while( a != -1 && b != -1 && c != -1 && d != -1)

    {

        for( j = d + 1; j <= 21252; j++ )

            if( ( j - a ) % 23 == 0 ) break;

        for(; j <=21252; j+= 23 )

            if( ( j - b ) % 28 == 0 ) break;

        for(; j <= 21252; j+= 23 * 28 )

            if( ( j - c) % 33 == 0 ) break;

        printf("Case %d", no);

        printf(": the next triple peak occurs in %d days.\n", j - d );

        scanf("%d%d%d%d", &a, &b, &c, &d);

        no++;

    }

    return 0;

}

 

 

3.yoso_so泡妹子

yoso.cpp/c/pas

【问题描述】

从前有一个学霸,叫yoso_so,梦寐以求能够泡到很多妹子,以增长SAN值。他在梦中

来到一个n*m的街区,每一个方格里都有着一个能增长不同SAN值的妹子,为了避免上学迟

,他从入口开始走,只能向下或向右,每走到一个方格里,就可以泡到那里的妹子,然后

便转化为他的SAN值。求他最多能增长的SAN值。

【输入】

第一行:n,mn,m<=1000)。

接下来nm列的整数,表示街区内每个妹子能增长的SAN值。

【输出】

一行一个最大整数sum

【输入输出样例】

【数据范围与提示】

对于30%的数据,0<n,m<=5

对于100%的数据,0<n,m<=1000,最终答案<2^31

PS右右出的→.

yoso.in yoso.out

10 10

0 1 2 3 4 5 6 7 8 9

1 1 1 1 1 1 1 1 1 0

2 1 1 1 1 1 1 1 1 0

3 1 1 1 1 1 1 1 1 0

4 1 1 1 1 1 1 1 1 0

5 1 1 1 1 1 1 1 1 0

6 1 1 1 1 1 1 1 1 0

7 1 1 1 1 1 1 1 1 0

8 1 1 1 1 1 1 1 1 0

9 1 1 1 1 1 1 1 1 5

58

 

 

可以用动规做,典型的简单动规。因为题目要求只有向右和向下,所以从s[1][1]开始向右走,找到s[i][j-1],s[i-1][j]中最大的,s[i][j]+=maxs[i][j-1],s[i-1][j]);

直到结束

那么s[n][m]就是最大值。

#include <iostream>

#include <cstdio>

#include <algorithm>

using namespace std;

int n,m,s[1010][1010];

int main()

{

    freopen("yoso.in","r",stdin);

    freopen("yoso.out","w",stdout);

    cin>>n>>m;

    for(int i=1;i<=n;i++)

        for(int j=1;j<=m;j++)

        scanf("%d",&s[i][j]);

    for(int i=1;i<=n;i++)

        for(int j=1;j<=m;j++)

        s[i][j]+=max(s[i-1][j],s[i][j-1]);

    cout<<s[n][m];

    return 0;

}

 

4.任意删数

(shan.cpp/c/pas)

【问题描述】

lqms有一位学霸中的男神,男神中的学霸,那就是RY,为什么他那么厉害呢?那与他

每天的锻炼有关。除了每天的身体锻炼,他还进行脑部锻炼进行强化。今天,他又想到一个

蛋疼的问题。

给出两个数ms,求出在数m中任意取出s个数字后的最大与最小值。

【输入】

一行两个数msm表示要取值的数,s表示要取得个数,保证输入的数据合法。

【输出】

一行两个数,用逗号隔开。第一个表示最小数,第二个表示最大数。若开头有零,则去

掉。若全部是零则输出“0(不包括引号)。

【输入输出样例】

【数据范围与提示】

对于30%的数据,0<m<=10^9

对于100%的数据,0<m<=10^1000

保证删除的位数小于数字原本的位数。

这是框框出的XD

shan.in shan.out

123 1 23 12

 

这题是有难度的,最主要的是找到思路,(最小)就是从最左边开始找,找到比后一个大的,就擦掉这个数。(最大)就是找到比后一个小的。

Erase就是擦掉这个数字。

#include <iostream>

#include <cstdio>

#include <algorithm>

using namespace std;

int m;

string s;

void xiao(string s);

void da(string s);

int main()

{

    freopen("shan.in","r",stdin);

    freopen("shan.out","w",stdout);

    cin>>s>>m;

    xiao(s);

    da(s);

    return 0;

}

void xiao(string s)

{

    int f=0;

    for(int i=0;i<m;i++)

        for(int j=0;j<s.length();j++)

            if(j==s.length()-1||s[j]>s[j+1]){

                s.erase(s.begin()+j);

                break;

            }

    int x=0;

    while(s[x]=='0'){s[x]='a';x++;}

    for(int i=0;i<s.length();i++)

        if(s[i]!='a'){cout<<s[i];f=1;}

    if(f==1)cout<<" ";

    else cout<<0<<" ";

}

void da(string s)

{

    int f=0;

    for(int i=0;i<m;i++)

        for(int j=0;j<s.length();j++)

            if(j==s.length()-1||s[j]<s[j+1]){

                s.erase(s.begin()+j);

                break;

            }

    int x=0;

    while(s[x]=='0'){s[x]='a';x++;}

    for(int i=0;i<s.length();i++)

        if(s[i]!='a'){cout<<s[i];f=1;}

    if(f==1)cout<<endl;

    else cout<<0<<endl;

}

 

5.小晖的决心

(number.cpp/c/pas)

【问题描述】

你们知道吗?其实,小晖同学在初中时科学学得很不好,连简单的原子数都不会求。但

是,他计算机学得很好,用电脑编写了各种学习外挂;这是当年他写的PASCAL计算原子数,

现在他要你重新编程。

现给出n种物质,请你编程判断该物质单分子所含原子数。输出原子数m

【输入】

1行输入物质种数n

2行到n+1行为物质的化学式。

【输出】

n,每行代表对应的分子所含的原子数。

【输入输出样例】

【数据范围与提示】

小晖用黄一强的人头担保

对于20%的数据

*分子只含一种原子

对于另外30%的数据

*每个原子的原子数<10

对于100%的数据

1.以上化学式均正确无误

2. 1<=n<=20

3.字符串长度不超过20

4.没有结晶水合物及某些盐和碱、配合物、络合物,例如:Ag(NH3)2OHCaOH

2Fe2SO43,总之不会有括号。

number.in number.out

2

He

HCl

12

 

字符串的处理:一一读入,如遇到大写的字母,kk++,如遇到小写的,不管他,如遇到数字,将其输完,并kk+=(这个数字-1)。完成。因为题目说不用考虑“()”和有结晶水的分子,这样就行了。

 

#include <iostream>

#include <cstdio>

#include <algorithm>

using namespace std;

int n;

int main()

{

    freopen("number.in","r",stdin);

    freopen("number.out","w",stdout);

    cin>>n;

    char b;

    scanf("%c",&b);

    for(int i=1;i<=n;i++){

        char a;

        int kk=0;

        while(scanf("%c",&a)==1&&a!='\n'){

            if(a>='A'&&a<='Z')

            {

                kk++;

            }

            else if(a>='1'&&a<='9')

            {

                int kkk=a-'0';

                while(scanf("%c",&a)==1&&a>='0'&&a<='9')

                    kkk=kkk*10+a-'0';

                kk=kk+kkk-1;

                if(a=='\n')break;

                else if(a>='A'&&a<='Z'){

                    kk++;

                }

            }

        }

    cout<<kk<<endl;

    }

 

    return 0;

}

0 0
原创粉丝点击