首页 > 其他分享 >C - Tile Distance 2

C - Tile Distance 2

时间:2024-06-23 22:53:52浏览次数:23  
标签:Distance sy sx tx ty long ------- Tile

C - Tile Distance 2

https://atcoder.jp/contests/abc359/tasks/abc359_c

 

思路

在x方向上,让s<t

然后 如果s在tile的左边,移动到右边,  如果t在tile的右边,移动到左边,

计算x 和 y方便的必走的steps,

y方向上容易计算(跨的格子就是), x方向有些复杂, s在x方向上,不用花费(配合y方向上走步),可延伸到最大位置为 sx+ysteps,

如果tx在此最大位置之内,则x方向不用花费, 否则必须花费。

 

t相对s三种位置。

 

 

Code

https://atcoder.jp/contests/abc359/submissions/54883741

long long sx, sy, tx, ty;

int main()
{
    cin >> sx >> sy >> tx >> ty;
    
    /*
    keep source before target in x direction
    */
    if (sx > tx){
        swap(sx, tx);
        swap(sy, ty);
    }

    /*
    if (sx,sy) in the left side of one brick
    i.e. sx+sy is even
    -------
    |s |  |
    -------
    then move s to its right tile, like below
    -------
    |  |s |
    -------
    */
    if ((sx+sy)&1 == 0){
        sx++;
    }
    
    /*
    if (tx,ty) in the right side of one brick
    i.e. tx+ty is odd
    -------
    |  |s |
    -------
    then move s to its left tile, like below
    -------
    |s |  |
    -------
    */
    if ((tx+ty)&1 == 1){
        tx--;
    }

    // xdiff must be not less than zero.
    // ydiff is of any value
    long long xdiff = tx - sx;
    long long ydiff = ty - sy;

    /*
    caculate the step of x-neccessary steps
    caculate the step of y-neccessary steps
    */
    long long xsteps = 0;
    long long ysteps = abs(ydiff);

    /*
    if x position of target is greater than sx extent scope,
    than x-neccessary steps are needed.
    */
    long long sx_extent = sx + ysteps;
    if (tx > sx_extent){
        xsteps = (tx - sx_extent + 1)/2;
    }

    long long total = xsteps + ysteps;
    cout << total << endl;

    return 0;
}

 

标签:Distance,sy,sx,tx,ty,long,-------,Tile
From: https://www.cnblogs.com/lightsong/p/18264066

相关文章

  • ABC359 G - Sum of Tree Distance
    题目链接题目大意给出一棵树,树上每个节点都有一种颜色,求所有颜色相同的节点两两之间距离的总和。 题解想来写题解主要是看了一下官方解法都写的需要“重心分解”,应该是对应中文语境下的树的点分治。实际上点分治写起来很费事,可以用启发式合并替代。具体来说,dfs时每个节点......
  • abc359_G Sum of Tree Distance 题解
    题目链接:Atcoder或者洛谷先考虑暴力,显然是枚举整棵树的路径,这个枚举复杂度显示是\(O(n^2)\),还不考虑计算\(f(i,j)\),考虑使用点分治优化枚举复杂度:\(O(n\log{n})\)。接下来考虑如何计算每条路径的\(f(i,j)\),注意到\(f(i,j)\):当且仅当\(a[i]=a[j]\)时,答案加上\(dis(i,j......
  • E - Alphabet Tiles
    E-AlphabetTileshttps://atcoder.jp/contests/abc358/tasks/abc358_e 思路dp[i][j]---前i项组成j长度字符串的方案总数。状态转移为:dp[i-1][j]*combination[j+l][l] ---->dp[i][j+l]l==0,1,...,ci  Codehttps://atcoder.jp/contests/abc358/submis......
  • [题解]ABC358E Alphabet Tiles
    AtCoder~E-AlphabetTilesLuogu~ABC358EAlphabetTiles题意简述给定正整数\(K\)和\(C_1,C_2,\dots,C_{26}\)。请求出长度在\(1\)到\(K\)之间,满足下列条件的字符串个数(取模\(998244353\)):该字符串全由大写字母组成。对于\(1\lei\le26\),下面条件成立:设\(a......
  • synchronized内置锁和volatile关键字
    synchronized内置锁对象锁和类锁:对象锁是用于对象实例方法,或者一个对象实例上的,类锁是用于类的静态方法或者一个类的class对象上的。我们知道,类的对象实例可以有很多个,但是每个类只有一个class对象,所以不同对象实例的对象锁是互不干扰的,但是每个类只有一个类锁。但是有一点......
  • ABC348E Minimize Sum of Distances 题解
    ABC348EMinimizeSumofDistances题目大意给定一棵共\(n\)个节点的树,第\(i\)个点的权重为\(c_i\)。定义\(f(x)\)表示树上所有点到节点\(x\)的距离乘上权重,即\(f(x)=\sum\limits_{i=1}^n(c_i\timesdis(x,i))\)。求\(\min\limits_{u=1}^nf(u)\)。Solve一眼换根......
  • volatile、extern、static、expilcit、const关键字
    一、volatile volatile关键字用于告诉编译器,一个变量的值可能在程序执行期间以不可预见的方式发生变化,编译器不应对该变量进行优化。即:编译器不能对这个变量进行优化,必须每次都从内存中读取它的值,而不能缓存到寄存器中。示例: volatileintflag=0;voidcheck_flag(......
  • volatile关键字的作用
    在Java并发编程中,volatile和synchronized是两种常见的同步机制。它们虽然都可以用于多线程环境下的变量同步,但在语义和使用场景上有显著区别。以下是详细的对比与补充:volatile关键字volatile关键字用于声明共享变量,并为其赋予两层语义:可见性保证:当一个线程修改了volat......
  • volatile的用法
    1.作用防止编译器优化对该变量的访问过程,确保每次访问都能得到最新的值。编译器通常会对代码进行优化,例如将变量的值存储在寄存器中,以减少对内存的访问2.应用场景:1.硬件寄存器2.中断服务程序中的变量3.多线程程序中的共享变量//stm32f407xx.htypedefstruct{__IOui......
  • C#中volatile与lock用法
    C#中volatile与lock用法 更新时间:2014年10月28日14:28:52 投稿:shichen2014  这篇文章主要介绍了C#中volatile与lock用法,较为详细的分析了C#中volatile与lock的适用情况及用法实例,具有一定的参考借鉴价值,需要的朋友可以参考下 本文实例讲述了C#中volatile与lock......