Pipeline
Pipeline
| Time Limit: 1000MS | Memory Limit: 65535KB |
| Submissions: 1109 | Accepted: 263 |
Sample Input
5 1 2 2 2 1 3 3 -2 3 3
Sample Output
6
解析:
题意很好理解,就题上的测试用例,我可以得到如下图
那么测试数据的结果就是图中红色线段的和,因此就用计算y坐标到平行于x轴的直线y=m的最短距离
就有dis=|y0-m|+|y1-m|+|y2-m|+|y3-m|+```+|yn-m|,这个很容易就看出:当m取y0```yn的中点时,dis最小;如果不是很清楚,可以画如下线段函数图象,就一目了然了
因此要得到中点y坐标只需先对y1```yn进行排序,取中间值即可,代码如下:
# include<stdio.h> # include<math.h> # include<algorithm> using namespace std; int main() { int nCoord; int x[10005],y[10005]; int i,midy,ans=0; scanf("%d",&nCoord); for(i=0;i<nCoord;i++) scanf("%d %d",&x[i],&y[i]); sort(y,y+nCoord); midy=y[nCoord/2]; for(i=0;i<nCoord;i++) ans+=abs(y[i]-midy); printf("%d\n",ans); return 0; }
Soldiers
| Time Limit: 1000MS | Memory Limit: 65535KB |
| Submissions: 609 | Accepted: 180 |
Sample Input
5 1 2 2 2 1 3 3 -2 3 3
Sample Output
8
解析:
这道题上面那道题很相似,只是多了x坐标的排序,并需要对x坐标进行一点转换,由于y和上面一样,x是disx=|x0-midx|+|x1-(midx+1)|+···+|xn-(midx+n)|=|x0-midx|+|(x1-1)-midx|+···+|(xn-n)-midx|,因此先转换tx=xi-i,在对tx排序即可,如下:
# include<stdio.h> # include<math.h> # include<algorithm> using namespace std; int main() { int nCoord; int x[10005],y[10005],tx[10005]; int i,midtx,midy,ans=0; scanf("%d",&nCoord); for(i=0;i<nCoord;i++) scanf("%d %d",&x[i],&y[i]); sort(x,x+nCoord); sort(y,y+nCoord); for(i=0;i<nCoord;i++) tx[i]=x[i]-i; sort(tx,tx+nCoord); midtx=tx[nCoord/2]; midy=y[nCoord/2]; for(i=0;i<nCoord;i++) { ans+=abs(tx[i]-midtx); ans+=abs(y[i]-midy); } printf("%d\n",ans); return 0; }
PostOffice
| Time Limit: 1000MS | Memory Limit: 65535KB |
| Submissions: 318 | Accepted: 97 |
Sample Input
5 1 2 2 2 1 3 3 -2 3 3
Sample Output
10
解析:
这是多点到一个点的问题,只需像第一题一样,对x和y排序,取中点即可
# include<stdio.h> # include<math.h> # include<algorithm> using namespace std; int main() { int nCoord; int x[10005],y[10005]; int i,midy,midx,ans=0; scanf("%d",&nCoord); for(i=0;i<nCoord;i++) scanf("%d %d",&x[i],&y[i]); sort(x,x+nCoord); sort(y,y+nCoord); midx=x[nCoord/2]; midy=y[nCoord/2]; for(i=0;i<nCoord;i++) { ans+=abs(x[i]-midx); ans+=abs(y[i]-midy); } printf("%d\n",ans); return 0; }
浙公网安备 33010602011771号