Codeforces Round #353 (Div. 2) B. Restoring Painting

題目鏈接點擊打開鏈接

B. Restoring Painting
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output

Vasya works as a watchman in the gallery. Unfortunately, one of the most expensive paintings was stolen while he was on duty. He doesn't want to be fired, so he has to quickly restore the painting. He remembers some facts about it.

  • The painting is a square 3 × 3, each cell contains a single integer from 1 to n, and different cells may contain either different or equal integers.
  • The sum of integers in each of four squares 2 × 2 is equal to the sum of integers in the top left square 2 × 2.
  • Four elements abc and d are known and are located as shown on the picture below.

Help Vasya find out the number of distinct squares the satisfy all the conditions above. Note, that this number may be equal to 0, meaning Vasya remembers something wrong.

Two squares are considered to be different, if there exists a cell that contains two different integers in different squares.

Input

The first line of the input contains five integers nabc and d (1 ≤ n ≤ 100 0001 ≤ a, b, c, d ≤ n) — maximum possible value of an integer in the cell and four integers that Vasya remembers.

Output

Print one integer — the number of distinct valid squares.

Examples
input
2 1 1 1 2
output
2
input
3 3 1 2 3
output
6
Note

Below are all the possible paintings for the first sample.

In the second sample, only paintings displayed below satisfy all the rules.

題意:給一個3*3的矩陣

題意:矩陣中可以填1-n共n個數字,已知a,b,c,d的值,要求每個2*2的矩陣數值之和都和左上角2*2矩陣相同,問一共有多少種填法

思路:一共有4個2*2的矩陣,且都包含最中間的那個方框,所以它可以放1-n任意一個數,可以不管它;

           假設左上角放的是x,根據可以得到三個方程;

          1<=x+a-c<=n,所以 c-b+1<=x<=c-b+n;

          1<=x+a-d<=n,所以d-a+1<=x<=d-a+n;

          1<=a+b+x-c-d<=n,所以c+d-a-b+1<=x<=c+d-a-b+n;

          同時1<=x<=n;

          所以x最小可以取cnt1=max(1,c-b+1,d-a+1,c+d-a-b+1);

                  最大可以取cnt2=min(n,c-b+n,d-a+n,c+d-a-b+n);

          如果cnt2<cnt1,沒有可行解,答案是0; 否則ans=(cnt2-cnt1+1)*n;

         要注意的是ans可能會很大,要用long long;

         貼上AC代碼:

#include<stdio.h>
#include<algorithm>
using namespace std;
int main()
{
    int n,a,b,c,d,i,cnt1,cnt2;long long ans;
    scanf("%d%d%d%d%d",&n,&a,&b,&c,&d);
    cnt1=max(1,max(max(c-b+1,d-a+1),c+d-a-b+1));
    cnt2=min(n,min(min(c-b+n,d-a+n),c+d-a-b+n));
    if(cnt2>=cnt1)
    ans=(long long)(cnt2-cnt1+1)*n;
    else ans=0;
    printf("%lld\n",ans);
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章