计蒜之道 测试赛

题目链接:http://www.jisuanke.com/minicourse/63

绿色能源

蒜头又要改变世界了。这次他将为一些恶劣地形环境设计太阳能取电方案。

在最新的设计中,太阳能板被设置在一些太阳能塔上,与塔同高。

这一次,将有 n 座太阳能塔被设置,这些塔已经被提前制作完成,其中 i 号塔高为 hi,现在工程师需要确定将塔安置在哪些位置,以获得最大的总能量。

太阳能塔被安置的地形环境由 m 个点的多边形来表示。多边形的每个点将会给出对应的坐标(xi, yi),xi <
xi+1

经过测量可知,太阳在此地的照射角度恒为 α 度。太阳的阳光洒满在最左上角到最右下角的区域。获取的太阳能的多少取决于被太阳光照射的塔的长度。

当两座塔被安置的较近时,左边的塔的影子会落在右边的塔上,这样右边的塔产生的能量就会有一定程度的减少。同理,周围起伏的地形也会对太阳能塔有一些遮挡,从而使获取的能量有所减少。

<IMG style="BOX-SIZING: border-box; MAX-WIDTH: 100%; BORDER-TOP: 0px; HEIGHT: auto; BORDER-RIGHT:
0px; VERTICAL-ALIGN: middle; BORDER-BOTTOM: 0px; MARGIN: auto; BORDER-LEFT: 0px; DISPLAY: block" src="http://res.jisuanke.com/img/nanti/419.png" a="" <="">

你的任务是设计太阳能塔的安置位置方案,使得所有太阳能塔获得尽可能多的能量。

输入

输入文件的第一行包含三个整数 n, m, α(1 ≤ n ≤ 104, 2 ≤ m ≤ 104,
1 ≤ α < 90)。

第二行包含 n 个整数 hi, 为塔的高度(1 ≤ hi ≤
103)。

接下来的 m 行为 xi,yi 对,为地形的顶点坐标(|xi|
≤ 105, xi < xi+1,
|yi| ≤ 103)。

输出

输出文件的第一行为最大的可能获得的太阳能量值,绝对误差不超过 10-6

接下来的 n 行输出太阳能塔安置位置的 x 点坐标,绝对误差不超过 10-9

太阳能塔的坐标的输出顺序请与输入顺序保持一致。

如果有多种使得总能量值最大的方案,输出任意一种即可。

样例1

输入:

5 4 1020 10 20 15 100 1040 2050 070 30

输出:

52.34288864959254516.00.070.065.365.3

每次数学题都有点麻烦的说。有时间再写;

转载请注明出处:寻找&星空の孩子

淘汰赛车

赛车比赛在潘多拉星球变得越来越流行了。但是他们的比赛跟我们平常的不太一样:n 辆赛车在一条长长的直道上展开同台竞技。每辆赛车的速度都为 1m/s,整条赛道在每一米都有坐标标记。

在比赛的赛车中,赛车 i 从 0 秒开始由 ai 向 bi 移动。到达
bi 之后转而返回由 bi 向
ai 移动。循环往复。

又是蒜头菌!原来这是蒜头菌正在玩的一个手机小游戏。蒜头菌可以在某些位置放下 TNT 炸毁某些赛车。因为他有 m 个问题。其中,问题 j 是:在 tj 时刻,在 xi 到
yi 之间共有几辆赛车?

你的任务就是回答萌蒜头的问题。

输入

输入的第一行包含两个数字 n 和 m(1 ≤ n, m ≤ 1000),分别代表正在比赛的赛车数量和蒜头的问题数。

接下来的 n 行中,每行包含 2 个整数 ai、bi(0 ≤ ai,
bi ≤ 109, ai !=
bi),分别代表赛车 i 的起点和终点。

再接下来的 m 行中,每行包含 3 个整数 xj,yj,tj(0
≤ xj ≤ yj ≤
109, 0 ≤ tj ≤ 109),分别代表问题
j 的左右坐标边界和询问的时间。

输出

输出共有 m 行,每行各有一个整数,分别代表对应的 m 个问题的答案。

样例1

输入:

5 5
0 1
0 2
2 3
3 5
4 5
0 5 0
0 1 2
0 2 1
2 5 2
2 5 3

输出:

5
1
2
4
3

算出每个状态(时间点)车停的位置就好了(注意起始方向)

转载请注明出处:寻找&星空の孩子

#include<stdio.h>
#define LL long long
struct car
{
    LL a;
    LL b;
} num[1005];
LL ffabs(LL x)
{
    if(x<0)return -x;
    else return x;
}
int main()
{
    LL n,m;
    LL x,y,t;
    scanf("%lld%lld",&n,&m);
    for(int i=0; i<n; i++)
    {
        scanf("%lld%lld",&num[i].a,&num[i].b);
    }
    for(int i=0; i<m; i++)
    {
        scanf("%lld%lld%lld",&x,&y,&t);
        LL ca=0;
        for(int j=0; j<n; j++)
        {
            if(num[j].a<num[j].b)
            {
                if(num[j].a>y||num[j].b<x) continue;
                if(num[j].a>=x&&num[j].b<=y)
                {
                    ca++;
                    continue;
                }
                else
                {
                    LL sum=-1;
                    if(t==0)
                    {
                        sum=num[j].a;
                    }
                    else if(t<=num[j].b-num[j].a)
                    {
                        sum=num[j].a+t;
                    }
                    else
                    {
                        LL s=t/ffabs(num[j].b-num[j].a);
                        LL tp=t%ffabs(num[j].b-num[j].a);
                        if(s%2==0)
                        {
                            sum=num[j].a+tp;
     //                       if(tp==0)sum=num[j].b;
                        }
                        else
                        {
                            sum=num[j].b-tp;
      //                      if(tp==0)sum=num[j].a;
                        }
                    }
                    if(sum>=x&&sum<=y)ca++;
                }
            }
            else
            {
                if(num[j].a<x||num[j].b>y) continue;
                if(num[j].b>=x&&num[j].a<=y)
                {
                    ca++;
                    continue;
                }
                else
                {
                    LL sum=-1;
                    if(t==0)
                    {
                        sum=num[j].a;
                    }
                    else if(t<=ffabs(num[j].a-num[j].b))
                    {
                        sum=num[j].a-t;
                    }
                    else
                    {
                        LL s=t/ffabs(num[j].b-num[j].a);
                        LL tp=t%ffabs(num[j].b-num[j].a);
                        if(s%2==0)
                        {
                            sum=num[j].a-tp;
  //                          if(tp==0)sum=num[j].b;
                        }
                        else
                        {
                            sum=num[j].b+tp;
  //                          if(tp==0)sum=num[j].a;
                        }
                    }
                    if(sum>=x&&sum<=y)ca++;
                }
            }

        }
        printf("%lld\n",ca);
    }
    return 0;
}

置换的玩笑

小蒜头又调皮了。这一次,姐姐的实验报告惨遭毒手。

姐姐的实验报告上原本记录着从 1 到 n 的序列,任意两个数字间用空格间隔。但是“坑姐”的蒜头居然把数字间的空格都给删掉了,整个数字序列变成一个长度为 1 到 100 的且首部没有空格的数字串。

现在姐姐已经怒了,蒜头找你写个程序快点把试验数据复原。

输入

输入文件有一行,为一个字符串——被蒜头搞乱的实验数据。

字符串的长度在 1 到 100 之间。

输出

输出共一行,为姐姐的原始测试数据—— 1 到 n 的输出。

任意两个数据之间有一个空格。

如果有多组符合要求的正确解,输出其中任意一组即可。

样例1

输入:

4111109876532

输出:

4 1 11 10 9 8 7 6 5 3 2

思路:深搜;技巧根据串的长度先求出最大值,先搜两位数;

转载请注明出处:寻找&星空の孩子

#include<stdio.h>
#include<string.h>
char ch[105];
bool vc[105];
bool vis[105];
int num[105];
int mmax;
int len;
bool flag=false;
int ttt=0;
void dfs(int k,int t)
{

    if(flag) return ;
    num[t]=k;
    int tt=ch[k]-'0';
    if(k+1<len)
    {
        int tp=(ch[k]-'0')*10+ch[k+1]-'0';
        if(tp<=mmax&&!vis[tp]&&!vc[k]&&!vc[k+1])
        {
//           printf("--------------------\n");
            vis[tp]=true;
            vc[k]=true;
            vc[k+1]=true;
            dfs(k+2,t+1);
            vis[tp]=false;
            vc[k]=false;
            vc[k+1]=false;
        }
        if(t==mmax&&k>=len){flag=true; return;}

    }
    if(!vis[tt]&&!vc[k]&&tt<=mmax&&k<len)
    {
        vis[tt]=true;
        vc[k]=true;
        dfs(k+1,t+1);
        vis[tt]=false;
        vc[k]=false;
    }
    if(t==mmax&&k>=len){flag=true; return;}
}
int main()
{
    scanf("%s",ch);
    len=strlen(ch);

    if(len<10) mmax=len;
    else
    {
        mmax=9+(len-9)/2;
    }

    num[0]=1;
    memset(vis,false,sizeof(vis));
    memset(vc,false,sizeof(vc));
    dfs(0,0);
    if(flag)
    {
        for(int i=0,j=1; i<len; i++)
        {
            if(i==num[j])
            {
                printf(" ");
                j++;
            }
            printf("%c",ch[i]);
        }
    }
    return 0;
}
/*
1111085697423
1111085297423
1102345678911
*/

作弊揭发者

鉴于我市拥堵的交通状况,市政交管部门经过听证决定在道路两侧安置自动停车收费系统。当车辆驶入车位,系统会通过配有的摄像头拍摄车辆画面,通过识别车牌上的数字、字母序列识别车牌,通过连接车管所车辆信息数据库确认车辆,进行扣费。

斗智斗勇的好戏一般从此处展开…

一些车主通过在停车时遮挡车牌上的一个或多个数字、字母序列,来阻碍识别系统的识别工作,以此逃避停车费用的缴纳。

车主这简直是用轻轻的一挡搞出来一个世界难题有木有?!管理是一方面,技术解决才是王道啊。

这么难的项目不得不交给计蒜客实验室了。D 神负责识别颜色,E 神负责型号识别,可能的车牌范围就这么一点点的被缩小了。作为实习生的蒜头也是任务艰巨,将已经存在车辆数据库中的可与当前已知信息相匹配的车牌信息筛选出来,这可是整个项目的第一步啊,重要性我就不多说了,加油吧。

输入

输入文件的第一行包含 9 个字符的字符序列代表识别的。

其中可识别的字符已由大写字母和数字显示,“*”表示因为遮挡而未被识别的字符。

输入文件的第二行包含一个整数 n (1 ≤ n ≤ 1000) —— 机动车数据库中的牌照信息的数量。

接下来 n 行,包含相应的牌照信息,每行一个。

牌照信息为长度为 9 的仅包含数字和大写字母的字符串。所有的牌照信息保证各不相同。

输出

输出文件的第一行为一个整数 k (0 ≤ k ≤ n) —— 符合给定要求的牌照数。

接下来的 k 行,输出所有可能的牌照信息。

样例1

输入:

A**1MP19*
4
A001MP199
E885EE098
A111MP199
KT7351TTB

输出:

2
A001MP199
A111MP199

暴力!

转载请注明出处:寻找&星空の孩子

#include<stdio.h>
#include<string.h>
char ans[1005][15];
int main()
{
    char tp[15],num[15];
    int n,ca=0;
    scanf("%s",num);
    scanf("%d",&n);
    while(n--)
    {
        scanf("%s",tp);
        bool bo=true;
        for(int i=0;i<9;i++)
        {
            if(num[i]=='*') continue;
            if(num[i]!=tp[i]){bo=false;break;}
        }
        if(bo){strcpy(ans[ca++],tp);}
    }
    printf("%d\n",ca);
    for(int i=0;i<ca;i++)
    printf("%s\n",ans[i]);
    return 0;
}

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-08-26 02:34:54

计蒜之道 测试赛的相关文章

计蒜之道 测试赛 (BCD)

测试赛写写题解不会被吐槽吧... 淘汰赛车 时限:1000ms 内存:262144K 赛车比赛在潘多拉星球变得越来越流行了.但是他们的比赛跟我们平常的不太一样:n 辆赛车在一条长长的直道上展开同台竞技.每辆赛车的速度都为 1m/s,整条赛道在每一米都有坐标标记. 在比赛的赛车中,赛车 i 从 0 秒开始由 ai 向 bi 移动.到达 bi 之后转而返回由 bi 向 ai 移动.循环往复. 又是蒜头菌!原来这是蒜头菌正在玩的一个手机小游戏.蒜头菌可以在某些位置放下 TNT 炸毁某些赛车.因为他有

计蒜之道2015程序设计大赛初赛第二场——人人都有极客精神

计蒜之道2015程序设计大赛初赛第二场——人人都有极客精神 (一)体面 人人公司是一家极为鼓励极客精神的公司,当有重要的项目需要上线但又时间太紧,甚至需要当天上线的时候,往往会挂起海盗旗开启电子日期显示,让大家可以在对时间有更明确的感知的情况下,同心协力搞定重要的项目.海盗旗下方的电子屏显示的日期形式为 YYYYMMDD (年份占 4 位.月份占 2 位.天数占 2 位). 日期电子屏幕上每个数字对应的显示如下图: 从上图可以得知每个数字对应的笔画数,比如 2 的笔画数是 5,8 的笔画数是 7

计蒜之道2015程序设计大赛初赛第一场——搜狗输入法的分词算法

(一)题面 计蒜之道2015程序设计大赛初赛第一场——搜狗输入法的分词算法 搜狗输入法最近的用户输入中出现了一种新的输入模式,形如 “0k1234567”,搜狗的工程师发现这一模式后了解到,这是一种新被提出的对于十五进制数字的标记模式,其中 “0k” 是标记进制为15的前缀标记,之后的部分 “1234567” 是实际的十五进制的数字串. 在发现这一标记模式后,搜狗的工程师开始尝试在已有的分词算法上进一步加入对于十五进制数字串的处理,把网页上的这种形式的 15 进制数正确地提取出来.我们知道,标记

2017 计蒜之道 初赛 第一场 B.阿里天池的新任务

2017 计蒜之道 初赛 第一场 B.阿里天池的新任务 1 /* QYP kuai wo dai ma*/ 2 #include<algorithm> 3 #include<iostream> 4 #include<iomanip> 5 #include<cstring> 6 #include<cstdlib> 7 #include<cstdio> 8 #include<queue> 9 #include<ctime

计蒜之道2015程序设计大赛初赛第三场——腾讯手机地图

计蒜之道2015程序设计大赛初赛第三场——腾讯手机地图 (一)题面 腾讯手机地图的定位功能用到了用户手机的多种信号,这其中有的信号的作用范围近,有的信号作用的范围则远一些.有的信号相对于用户在不同的方位强度是不同的,有的则是在任何一个方向上信号强度都一致的. 已知用户面向北方拿着自己的手机,在不同方位的各种信号覆盖区域可以被抽象成以用户为圆心的一系列扇形.已知每个扇形的半径 r,和每个扇形的两条边相对于正东方向的夹角度数.每个信号覆盖区域抽象出的扇形都可以通过从第一条边逆时针旋转到第二条边画出.

2017计蒜之道 初赛 第二场 百度的科学计算器(简单)

/** 题目:2017计蒜之道 初赛 第二场 百度的科学计算器(简单) 链接:https://nanti.jisuanke.com/t/15504 题意:给一个合法的表达式,包含加号+.减号-.括号().数字常量,表达式中没有空格. 输入数据保证数字常量以及计算过程中数值绝对值均不超过 10^12??,对于浮点型数值常量,保证小数点后不超过 666 位. 思路:暴力模拟:python有函数可以直接调用. 坑点:如果表达式中出现过浮点数,那么输出结果保留6位小数, 否则输出整数,不出现小数. */

计蒜之道2015程序设计大赛初赛第四场——爱奇艺的自制节目

计蒜之道2015程序设计大赛初赛第四场——爱奇艺的自制节目 (一)题面 爱奇艺作为一家视频网站巨头,要为上亿的用户每天都提供“悦享品质”的服务.除了引进一些优秀的影视作品外,爱奇艺还做了一些诸如奇葩说.晓松奇谈的自制节目.爱奇艺最近又准备制作四档新的节目,它们分别是 W, X, Y, Z:但是现在能用来录这些节目的演播室只有两个,分别是演播室 A 和演播室 B. W 节目的现场搭建比较复杂,每一期都要在演播室 A 来录制,X 节目的摄影机位调整会影响节目质量,每一期都固定在演播室 B 来录制.而

2018 计蒜之道复赛 贝壳找房魔法师顾问(并查集+dfs判环)

贝壳找房在遥远的传奇境外,找到了一个强大的魔法师顾问.他有 22 串数量相同的法力水晶,每个法力水晶可能有不同的颜色.为了方便起见,可以将每串法力水晶视为一个长度不大于 10^5105,字符集不大于 10^5105 的字符串.现在魔法师想要通过一系列魔法使得这两个字符串相同.每种魔法形如 (u,\ v),\ u,\ v \le 10^5(u, v), u, v≤105,可以将一个字符 uu改成一个字符 vv,并且可以使用无限次.出于种种原因,魔法师会强行指定这两个串能否进行修改. 若失败输出 -

计蒜之道 測试赛

题目链接:http://www.jisuanke.com/minicourse/63 绿色能源 蒜头又要改变世界了. 这次他将为一些恶劣地形环境设计太阳能取电方案. 在最新的设计中,太阳能板被设置在一些太阳能塔上,与塔同高. 这一次,将有 n 座太阳能塔被设置.这些塔已经被提前制作完毕.当中 i 号塔高为 hi,如今project师须要确定将塔安置在哪些位置.以获得最大的总能量. 太阳能塔被安置的地形环境由 m 个点的多边形来表示.多边形的每一个点将会给出相应的坐标(xi, yi).xi < x