2019.2.6C++赛 7、8待换思路

1.无聊的hbz
1、3、5的倍数分别切换一次状态,初始为关,求最终多少开着

答案:888

2.羊羊过桥
两羊同行以慢者计时,一羊走回传手电,求最快都过桥时间

答案:15
(贪心,过河问题

3.拼火柴

4.是男人就挑战一百层
3次机会,坏了不能用,求用最优策略最坏情况需要测试多少次测出性能

答案:14
鸡蛋测试

5.沙漠旅行

6.无人机航线规划
搜索

7.龙宫盗宝

8.yzm铺地毯

慢 递归

#include<iostream>
#include<cstdio>
using namespace std;
int n;
char map[1000][2000];
int main()
{
    map[1][1]='#';
    map[1][2]='#';
    scanf("%d",&n);
    int t=1;
    for(int i=1;i<=n;i++)
    {
        for(int a=1;a<=3;a++)
        {
            for(int b=1;b<=3;b++)
            {
                if(a==1&&b==1)continue;
                if(a==2&&b==2)
                {
                    for(int p=t+1;p<=t*3;p++)
                        for(int q=t*2+1;q<=t*3*2;q++)
                            map[p][q]=' ';
                    continue;
                }
                for(int p=1;p<=t;p++)
                {
                    int pp=t*(a-1);
                    for(int q=1;q<=t*2;q++)
                    {
                        int qq=t*(b-1)*2;
                        map[pp+p][qq+q]=map[p][q];
                    }
                }
            }
        }
        t*=3;
    }
    for(int i=1;i<=t;i++)
    {
        for(int j=1;j<=t*2;j++)
            printf("%c",map[i][j]);
        printf("\n");
    }
    return 0;
}

9.最短时间
内存超限。。因为第一次竟然忘了标记访问过。。

1625: 最短时间
时间限制:500ms
内存限制:100M
最短时间
描述:

梦工厂有 n 个分厂(从 1 开始编号),有m对分厂通过双向铁路相连。
为了保证每两个分厂之间的同学可以方便地进行交流,掌舵人张老师就在那些没有铁路连接的分厂之间建造了公路。
在两个直接通过公路或铁路相连的分厂之间移动,需要花费 1 小时。
现在菜鸡wxy和hbz都从1厂出发,wxy开火车,hbz开汽车,各自前往n厂。但是,他们中途不能同时停在同一个分厂
(但是可以同时停在n厂)。
现在请你来为wxy和hbz分别设计一条线路,使他们尽可能快地到达n厂(即要求他们中最后到达n厂的时间最短)。
所有的公路或铁路可以被多次使用,求最短时间。(火车和汽车可以同时到达n,也可以先后到达。)

输入:
首先有 2 个整数 n 和 m (2<=n<=500, 0<=m<=n*(n-1)/2 分别表示梦工厂分厂的数目和铁路的数目;

接下来的 m 对数字,每对由两个整数 u 和 v 构成,表示小镇 u 和小镇 v 之间有一条铁路。(u!=v 1<=u,v<=n)
输入保证无重边

输出

输出一个整数,表示答案,如果没有合法的路线规划,输出-1

输入样例:
4 3
1 2
2 3
3 4

输出样例:
3

#include<iostream>
#include<cstdio>
#include<queue>
using namespace std;
int n,m,u,v,h=-1;
int r[505][505];
struct Node
{
    int x;
    int T;
};
Node t,tt;
queue<Node>Q;
bool vis[505];
void bfs(int f)
{
    while(!Q.empty())
    {
        t=Q.front();
        Q.pop();
        if(t.x==n)
        {
            h=t.T;
            break;
        }
        for(int i=n;i>1;i--)
        {
            if(r[t.x][i]==f&&!vis[i])
            {
            	vis[i]=1;//内存超限的原因。。。。 
                tt.x=i;
                tt.T=t.T+1;
                Q.push(tt);
            }
        }
    }
}
int main()
{
    scanf("%d%d",&n,&m);
    for(int i=1;i<=m;i++)
    {
        scanf("%d%d",&u,&v);
        r[u][v]=r[v][u]=1;
    }
    if(m==0||m==n*(n-1)/2)h=-1;
    else{
        t.x=1;
        t.T=0;
        Q.push(t);
        /*rail*/
        if(!r[1][n])//1到n没有铁路直连;公路时间为1;求铁路 
        bfs(1);
        /*road*/
        else
        bfs(0);
    }
    printf("%d\n",h);
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值