链接:http://codeforces.com/problemset/problem/215/C

C. Crosses
time limit per test

2 seconds

memory limit per test

256 megabytes

input

standard input

output

standard output

There is a board with a grid consisting of n rows and m columns,
the rows are numbered from 1 from top to bottom and the columns are numbered from 1 from
left to right. In this grid we will denote the cell that lies on row number i and column number j as (i, j).

A group of six numbers (a, b, c, d, x0, y0),
where 0 ≤ a, b, c, d, is a cross, and there
is a set of cells that are assigned to it. Cell (x, y)belongs to this set if at
least one of two conditions are fulfilled:

  • |x0 - x| ≤ a and |y0 - y| ≤ b
  • |x0 - x| ≤ c and |y0 - y| ≤ d

The picture shows the
cross (0, 1, 1, 0, 2, 3) on the grid 3 × 4.

Your task is to find the number of different groups of six numbers, (a, b, c, d, x0, y0) that
determine the crosses of an area equal to s, which are placed entirely on the grid. The cross is placed entirely on the grid, if any
of its cells is in the range of the grid (that is for each cell (x, y) of the cross 1 ≤ x ≤ n; 1 ≤ y ≤ m holds).
The area of the cross is the number of cells it has.

Note that two crosses are considered distinct if the ordered groups of six numbers that denote them are distinct, even if these crosses coincide as sets of points.

Input

The input consists of a single line containing three integers nm and s (1 ≤ n, m ≤ 500, 1 ≤ s ≤ n·m).
The integers are separated by a space.

Output

Print a single integer — the number of distinct groups of six integers that denote crosses with area s and that are fully placed on then × m grid.

Please, do not use the %lld specifier to read or write 64-bit integers in С++. It is preferred to use the cin, cout streams or the %I64dspecifier.

Sample test(s)
input
2 2 1
output
4
input
3 4 5
output
4
Note

In the first sample the sought groups of six numbers are: (0, 0, 0, 0, 1, 1), (0, 0, 0, 0, 1, 2), (0, 0, 0, 0, 2, 1), (0, 0, 0, 0, 2, 2).

In the second sample the sought groups of six numbers are: (0, 1, 1, 0, 2, 2), (0, 1, 1, 0, 2, 3), (1, 0, 0, 1, 2, 2), (1, 0, 0, 1, 2, 3).


题意:

给你n*m矩阵,问有多少个不同的    (a, b, c, d, x0, y0) 
  面积等于s。

  • |x0 - x| ≤ a and |y0 - y| ≤ b
  • |x0 - x| ≤ c and |y0 - y| ≤ d

满足这个条件 相当于两个一x0 。y0 为中心的。边长全为奇数的矩形并。

一个矩形长为2a+1,宽为2b+1   还有一个是(2*c+1) * (2*d+1)

做法:

枚举当中一个矩形的长和宽。

假设面积超过s显然不行。

假设等于s。那么还有一个肯定比它小或者相等。

ans+=(n-i/2*2)*(m-j/2*2)*   (((i/2+1)*(j/2+1)-1)*2+1);

(n-i/2*2)*(m-j/2*2) 这个算有多少位子 能够做为矩形 中心

(((i/2+1)*(j/2+1)-1)*2+1)  枚举那个小的边长

假设小于s的话。枚举还有一个矩阵的长度。长度小于i

然后计算宽度。

宽度假设小于m而且也是奇数

ans+=(n-i/2*2)*(m-wid/2*2)*2;    枚举中心点能够在的位置。由于两个矩形不同所以abcd能够对换 所以*2

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <limits.h>
#include <malloc.h>
#include <ctype.h>
#include <math.h>
#include <string>
#include <iostream>
#include <algorithm>
using namespace std;
#include <stack>
#include <queue>
#include <vector>
#include <deque>
#include <set>
#include <map> int main()
{ int n,m,s; scanf("%d%d%d",&n,&m,&s);
__int64 ans=0;
for(int i=1;i<=n;i+=2)//枚举比較长的长方形 长度
{
for(int j=1;j<=m;j+=2)
{
if(i*j>s)
continue;
else if(i*j==s)//一个包括还有一个
{
ans+=(n-i/2*2)*(m-j/2*2)* (((i/2+1)*(j/2+1)-1)*2+1);
// 位子*枚举边长
}
else
{
for(int len=1;len<i;len+=2)//长小的
{
if((s-i*j)%len==0)
{
int wid=(s-i*j)/(len)+j;
//长的 j
//宽的 wid
if(wid<=m&&(wid&1))
ans+=(n-i/2*2)*(m-wid/2*2)*2;
//确定位置 由于不同 所以abcd能够换 *2
}
}
}
}
}
printf("%I64d\n",ans); scanf("%d%d%d",&n,&m,&s);
return 0;
}

cf 215 C. Crosses yy题的更多相关文章

  1. CF 628B New Skateboard --- 水题

    CD 628B 题目大意:给定一个数字(<=3*10^5),判断其能被4整除的连续子串有多少个 解题思路:注意一个整除4的性质: 若bc能被4整除,则a1a2a3a4...anbc也一定能被4整 ...

  2. CF 628A --- Tennis Tournament --- 水题

    CF 628A 题目大意:给定n,b,p,其中n为进行比赛的人数,b为每场进行比赛的每一位运动员需要的水的数量, p为整个赛程提供给每位运动员的毛巾数量, 每次在剩余的n人数中,挑选2^k=m(m & ...

  3. CF #636 (Div. 3) 对应题号CF1343

    unrated 选手悠闲做题,然后只做出四个滚蛋了 符合 div3 一贯风格,没啥难算法 E最后就要调出来了,但还是赛后才A的 CF1343A Candies 传送门 找到一个 \(x\),使得存在一 ...

  4. [YY题]HDOJ5288 OO’s Sequence

    题意:求这个式子 $\sum \limits_{i=1}^{n} \sum \limits_{j=1}^{m} f(i, j) mod (10^9 + 7)$ 的值 就是对每个区间[i, j]枚举区间 ...

  5. CF 420B Online Meeting 模拟题

    只是贴代码,这种模拟题一定要好好纪念下 TAT #include <cstdio> #include <cstring> #include <algorithm> ...

  6. CF 214B Hometask(想法题)

    题目链接: 传送门 Hometask Time Limit: 2 seconds     Memory Limit: 256 megabytes Description Furik loves mat ...

  7. Codeforces Round #215 (Div. 2) D题(离散化+hash)

    D. Sereja ans Anagrams time limit per test 1 second memory limit per test 256 megabytes input standa ...

  8. HDU-4414 Finding crosses 水题

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4414 直接暴力判断即可. //STATUS:C++_AC_15MS_232KB #include &l ...

  9. noj 2069 赵信的往事 [yy题 无限gcd]

    njczy2010 2069 Accepted 31MS   224K 1351Byte G++ 2014-11-13 13:32:56.0 坑爹的无限gcd,,,尼玛想好久,原来要x对y算一次,y再 ...

随机推荐

  1. Android 8.0 adb shell dumpsys activity activities | findstr mFocusedActivity 获取当前的 activity 显示空的

    adb shell dumpsys activity activities | findstr mFocusedActivity Android 7.0 现象: Android 8.0 现象: 改用: ...

  2. div的显示隐藏方法汇总

    JQuery DIV 动态隐藏和显示的方法 1. 如果在载入是隐藏: <head> <script language="javascript"> funct ...

  3. 【转载】CentOS 7安装Python3.5,并与Python2.7兼容并存

    CentOS 7下安装Python3.5 CentOS7默认安装了python2.7.5,当需要使用python3的时候,可以手动下载Python源码后编译安装. 1.安装python3.5可能使用的 ...

  4. A. Test for Job

    A. Test for Job Time Limit: 5000ms Case Time Limit: 5000ms Memory Limit: 65536KB   64-bit integer IO ...

  5. 刷题总结——蚯蚓(NOIP2016DAY2T2)

    题目: 题目背景 NOIP2016 提高组 Day2 T2 题目描述 本题中,我们将用符号 

  6. Numpy 布尔型数组

    一  给定一个列表,返回大于10的元素. 在python中,有两种方法.一种方法是循环遍历,第二种方法是使用内置函数filter() 在数组中,有更为简单的方法.即布尔型索引 布尔型索引: 将同样大小 ...

  7. 洛谷 [P3205] 合唱队

    区间DP 手动模拟一下,我们发现本题就是一个左右加数的区间DP #include <iostream> #include <cstdio> #include <cstri ...

  8. 扰动法--*BZOJ3157: 国王奇遇记

    求$\sum_{i=1}^ni^mm^i$.$n \leq 1e9,m \leq 200$. 其实我也不知道这东西为啥叫“扰动法”,大概是在黑暗的边缘试探?就是那种,人家再多一点就被您看破了,然后您就 ...

  9. perl学习之精髓中的精髓

    1.是函数就有返回值: 比如:chomp函数,其可以除去换行符,但其也有返回值 chomp($xx) #这是去除xx的换行符 $yy=chomp($xx)  #这是看这次除去了几个换行符,也就是函数运 ...

  10. thinkphp框架做项目的前期配置

    ThinkPHP 目录结构说明 ThinkPHP.php:框架的公共入口文件 App:项目放置目录 Common:包含框架的一些公共文件.系统定义.系统函数和惯例配置等 Lang:系统语言文件目录 L ...