cf 215 C. Crosses yy题
链接:http://codeforces.com/problemset/problem/215/C
2 seconds
256 megabytes
standard input
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.
The input consists of a single line containing three integers n, m and s (1 ≤ n, m ≤ 500, 1 ≤ s ≤ n·m).
The integers are separated by a space.
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.
2 2 1
4
3 4 5
4
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题的更多相关文章
- CF 628B New Skateboard --- 水题
CD 628B 题目大意:给定一个数字(<=3*10^5),判断其能被4整除的连续子串有多少个 解题思路:注意一个整除4的性质: 若bc能被4整除,则a1a2a3a4...anbc也一定能被4整 ...
- CF 628A --- Tennis Tournament --- 水题
CF 628A 题目大意:给定n,b,p,其中n为进行比赛的人数,b为每场进行比赛的每一位运动员需要的水的数量, p为整个赛程提供给每位运动员的毛巾数量, 每次在剩余的n人数中,挑选2^k=m(m & ...
- CF #636 (Div. 3) 对应题号CF1343
unrated 选手悠闲做题,然后只做出四个滚蛋了 符合 div3 一贯风格,没啥难算法 E最后就要调出来了,但还是赛后才A的 CF1343A Candies 传送门 找到一个 \(x\),使得存在一 ...
- [YY题]HDOJ5288 OO’s Sequence
题意:求这个式子 $\sum \limits_{i=1}^{n} \sum \limits_{j=1}^{m} f(i, j) mod (10^9 + 7)$ 的值 就是对每个区间[i, j]枚举区间 ...
- CF 420B Online Meeting 模拟题
只是贴代码,这种模拟题一定要好好纪念下 TAT #include <cstdio> #include <cstring> #include <algorithm> ...
- CF 214B Hometask(想法题)
题目链接: 传送门 Hometask Time Limit: 2 seconds Memory Limit: 256 megabytes Description Furik loves mat ...
- 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 ...
- HDU-4414 Finding crosses 水题
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4414 直接暴力判断即可. //STATUS:C++_AC_15MS_232KB #include &l ...
- noj 2069 赵信的往事 [yy题 无限gcd]
njczy2010 2069 Accepted 31MS 224K 1351Byte G++ 2014-11-13 13:32:56.0 坑爹的无限gcd,,,尼玛想好久,原来要x对y算一次,y再 ...
随机推荐
- f-Strings:一种改进Python格式字符串的新方法
好消息是,F字符串在这里可以节省很多的时间.他们确实使格式化更容易.他们自Python 3.6开始加入标准库.您可以在PEP 498中阅读所有内容. 也称为“格式化字符串文字”,F字符串是开头有一个f ...
- Python基础之字符编码,文件操作流与函数
一.字符编码 1.字符编码的发展史 阶段一:现代计算机起源于美国,最早诞生也是基于英文考虑的ASCII ASCII:一个Bytes代表一个字符(英文字符/键盘上的所有其他字符),1Bytes=8bit ...
- luogu3755 [CQOI2017]老C的任务
扫描线水题. #include <algorithm> #include <iostream> #include <cstdio> using namespace ...
- Android圆弧背景
代码改变世界 Android圆弧背景 <?xml version="1.0" encoding="utf-8"?><shape xmlns:a ...
- 两周多学完Java 23种设计模式
最近两周任务不是很繁重,对于一个刚入职4个月的菜鸟来说,学习设计模式并灵活使用简直天方夜谭:但是当我询问我导师需要学点啥的时候?“<Java设计模式>,这个必须要学”,一句简单粗略的 ...
- HDU 5833 Zhu and 772002 ——线性基
[题目分析] 这题貌似在UVA上做过,高精度高斯消元. 练习赛T2,然后突然脑洞出来一个用Bitset的方法. 发现代码只需要30多行就A掉了 Bitset大法好 [代码] #include < ...
- c++ primer note
---恢复内容开始--- 1.decltype 2.auto 3.cbegin 4.cend 5.constexpr 6.(*Parray)[10]=&arr; //Parray 指向一个含有 ...
- VMware VMnet8 模式共享主机网络配置静态 IP 和 DNS
一.简介 NAT网络模式: 1. 宿主机可以看做一个路由器,虚拟机通过宿主机的网络来访问 Internet: 2. 可以安装多台虚拟机,组成一个小型局域网,例如:搭建 hadoop 集群.分布式服务 ...
- (2)Swing窗体基本设置
import javax.swing.*; import javax.swing.plaf.FontUIResource; import java.awt.*; import java.util.En ...
- 一个iOS开发者的Flutter“历险记”
1. 官方简介 Flutter是谷歌的移动UI框架,可以快速在iOS和Android上构建高质量的原生用户界面. 官方介绍: 快速开发: 毫秒级的热重载,修改后,您的应用界面会立即更新.使用丰富的.完 ...