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<<"="; }