zoukankan      html  css  js  c++  java
  • 【CCPC-Wannafly Winter Camp Day4 (Div1) A】夺宝奇兵(水题)

    点此看题面

    大致题意:(n)种宝藏,每种各两个。让你依次获得(1sim n)号宝藏,然后依次获得剩余的(nsim1)号宝藏,求最少步数。

    简单结论

    其实这题有一个十分简单的结论,即你只需考虑相邻两号宝藏的两种匹配方式即可。

    因为这是相互独立的、互不影响的,所以这道题就很水了。

    也就是分别考虑两种匹配方式下的距离和,取(min)记录答案。

    不过要注意第(n)号的两个宝藏之间的距离也要计入答案。

    代码

    #include<bits/stdc++.h>
    #define Tp template<typename Ty>
    #define Ts template<typename Ty,typename... Ar>
    #define Reg register
    #define RI Reg int
    #define Con const
    #define CI Con int&
    #define I inline
    #define W while
    #define min(x,y) ((x)<(y)?(x):(y))
    #define abs(x) ((x)<0?-(x):(x))
    #define dis(A,B) (abs(A.x-B.x)+abs(A.y-B.y))
    #define LL long long
    using namespace std;
    int n,m;struct Item {int x,y;}A,B,lstA,lstB;
    class FastIO
    {
    	private:
    		#define FS 100000
    		#define tc() (A==B&&(B=(A=FI)+fread(FI,1,FS,stdin),A==B)?EOF:*A++)
    		#define tn (x<<3)+(x<<1)
    		#define D isdigit(c=tc())
    		char c,*A,*B,FI[FS];
    	public:
    		I FastIO() {A=B=FI;}
    		Tp I void read(Ty& x) {x=0;W(!D);W(x=tn+(c&15),D);}
    		Ts I void read(Ty& x,Ar&... y) {read(x),read(y...);}
    }F;
    int main()
    {
    	RI i;Reg LL ans=0;F.read(n,m,lstA.x,lstA.y,lstB.x,lstB.y);
    	for(i=2;i<=n;++i,lstA=A,lstB=B) F.read(A.x,A.y,B.x,B.y),ans+=min(dis(lstA,A)+dis(lstB,B),dis(lstA,B)+dis(lstB,A));//统计答案
    	return printf("%lld",ans+dis(lstA,lstB)),0;//最后记得加上第n号的两个宝藏之间的距离
    }
    
  • 相关阅读:
    java中重载与重写的区别
    Java中数组的初始化方式
    break和continue的区别
    do while 循环和while循环的区别
    Java注释分类
    Java中的switch语句后面的控制表达式的数据类型
    DBA_TABLES之BLOCKS AND EMPTY_BLOCKS
    show_space 脚本
    Linux 6 配置multipath
    环保创业的可行之道——Leo鉴书上66
  • 原文地址:https://www.cnblogs.com/chenxiaoran666/p/CometOJDay4Div1A.html
Copyright © 2011-2022 走看看