zoukankan      html  css  js  c++  java
  • Codeforces--630E--A rectangle(规律)

    
    E - A rectangle

    Crawling in process... Crawling failed Time Limit:500MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u

    Description

    Developing tools for creation of locations maps for turn-based fights in a new game, Petya faced the following problem.

    A field map consists of hexagonal cells. Since locations sizes are going to be big, a game designer wants to have a tool for quick filling of a field part with identical enemy units. This action will look like following: a game designer will select a rectangular area on the map, and each cell whose center belongs to the selected rectangle will be filled with the enemy unit.

    More formally, if a game designer selected cells having coordinates (x1, y1) and (x2, y2), where x1 ≤ x2 and y1 ≤ y2, then all cells having center coordinates (x, y) such that x1 ≤ x ≤ x2 and y1 ≤ y ≤ y2 will be filled. Orthogonal coordinates system is set up so that one of cell sides is parallel to OX axis, all hexagon centers have integer coordinates and for each integer x there are cells having center with such x coordinate and for each integer y there are cells having center with such y coordinate. It is guaranteed that difference x2 - x1 is divisible by 2.

    Working on the problem Petya decided that before painting selected units he wants to output number of units that will be painted on the map.

    Help him implement counting of these units before painting.

    Input

    The only line of input contains four integers x1, y1, x2, y2 ( - 109 ≤ x1 ≤ x2 ≤ 109,  - 109 ≤ y1 ≤ y2 ≤ 109) — the coordinates of the centers of two cells.

    Output

    Output one integer — the number of cells to be filled.

    Sample Input

    Input
    1 1 5 5
    
    Output
    13
    
    
    从图中可以看出,x为整数时x=x1的直线总是落在六边形的中心线上,
    所以会多包含一部分六边形,(x2-x1+1)可以得到一行有多少个,
    y=y1总是落在六边形的边上,但是还会包含一部分,(y2-y1+2)个 ,
    这些都可以从图中看出 
    #include<iostream>
    using namespace std;
    int main()
    {
    	__int64 x1,x2,y1,y2;
    	while(cin>>x1>>y1>>x2>>y2)
    	{
    		__int64 ans=(x2-x1+1)*(y2-y1+2)/2-(x2-x1+1)/2;
    		cout<<ans<<endl;
    	}
    	return 0;
    }

  • 相关阅读:
    面向对象
    模块
    第四十课、前置操作符和后置操作符------------------狄泰软件学院
    uva -- 10766
    poj -- 3468
    poj --3264
    cstring 的重载
    hihocode ---1032
    省赛总结
    13周总结
  • 原文地址:https://www.cnblogs.com/playboy307/p/5273410.html
Copyright © 2011-2022 走看看