A-收集纸片

链接:https://ac.nowcoder.com/acm/contest/5713/A

题目描述

我们把房间按照笛卡尔坐标系进行建模之后,每个点就有了一个坐标。 假设现在房子里有些纸片需要被收集,收集完纸片你还要回归到原来的位置,你需要制定一个策略来使得自己行走的距离最短。你只能沿着 x 轴或 y 轴方向移动,从位置 (i,j) 移动到相邻位置 (i+1,j),(i-1,j),(i,j+1) 或 (i,j-1) 距离增加 1。

输入描述:

在第一行中给出一个T,1≤T≤10, 代表测试数据的组数。
对于每组输入,在第一行中给出房间大小,第二行给出你的初始位置。
接下来给出一个正整数 n,1≤n≤10,代表纸片的个数。
接下来 n 行,每行一个坐标代表纸片的位置。
保证房间小于 20×20,纸片一定位于房间内。

这题数据范围比较小,可以通过深搜+回溯的方法进行遍历
对每个纸片进行取或不取的操作,找出一条最短的回到原点的路径
当然遍历过程也可以增加剪枝操作,如果比已有的最短路大,就可以返回。

#include <bits/stdc++.h>
using namespace std;
int t,n,m,sx,sy,c,xx[10],yy[10];
int min1;
int d[10];
void dfs(int r,int step,int prex,int prey)
{
    if(r==c)
    {
        step=step+abs(sx-prex)+abs(sy-prey);
        min1=min(min1,step);
        return;
    }
    for(int i=0;i<c;i++)
    {
        if(d[i])continue;
        d[i]=1;
        dfs(r+1,step+abs(xx[i]-prex)+abs(yy[i]-prey),xx[i],yy[i]);
        d[i]=0;
    }
}
int main()
{
    cin>>t;
    while(t--)
    {
        cin>>n>>m>>sx>>sy>>c;
        for(int i=0;i<c;i++)
            cin>>xx[i]>>yy[i];
        min1=0x3f3f3f3f;
        memset(d,0,sizeof(d));
        dfs(0,0,sx,sy);
        cout<<"The shortest path has length ";
        cout<<min1<<endl;

    }
}

E-数字比较

链接:https://ac.nowcoder.com/acm/contest/5713/E

题目描述

牛牛很喜欢对数字进行比较,但是对于3 > 2这种非常睿智的比较不感兴趣。上了高中之后,学习了数字的幂,他十分喜欢这种数字表示方法,比如xy。 由此,他想出了一种十分奇妙的数字比较方法,给出两个数字x和y,请你比较图片说明图片说明 的大小,如果前者大于后者,输出">",小于则输出"<",等于则输出"="。

输入描述:

两个数字x和y。
满足1 <= x,y <= 1e9

输出描述:

一个字符,">","<"或者"="。
由于数据范围比较大,因此可以通过两边取对数的方法比较大小

#include<bits/stdc++.h>
using namespace std;
double x,y;
int main()
{
    cin>>x>>y;
    if(x*log(y)>y*log(x))cout<<"<";
    else if(x*log(y)<y*log(x))cout<<">";
    else cout<<"=";
}