TZOJ5103: Electric Fence

题意:

求出三个点(0,0),(n,m),(p,0)组成的三角形中整点的数量(不包括边界)

题解:

数据范围不大考虑暴力:

可以分别计算出对于一条直线方程来说某个点x下方有多少个整点。

对于p<n的情况先计算(0,0),(n,m),(n,0)的三角形内整点数量再减去(p,0),(n,m),(n,0)内整点数量加上边界的点数。

对于p>n的情况分别计算两个三角形的点数相加在加上直线x=n上的m-1个点。对于部分直角三角形的情况(n=p或n=0)不能加上直线x=n上的点。

#define _CRT_SECURE_NO_WARNINGS
#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<vector>
using namespace std;
typedef long long LL;
typedef pair<int, int> PII;
const LL N = 1e3 + 10, MOD = 1e9 + 7, INF = 0x3f3f3f3f;

void solve()
{
	int n, m, p, ans = 0;
	scanf("%d%d%d", &n, &m, &p);
	for (int i = 1; i < n; ++i)
	{
		int t = i * m;
		ans += (t - 1) / n;//不计数边界上的点,故-1
	}
	if (p < n)
	{
		for (int i = p + 1; i < n; ++i)
		{
			LL t = (i - p) * m;
			ans -= t / (n - p);
		}
	}
	else if (p > n)
	{
		if (n)ans += m - 1;
		for (int i = p - 1; i > n; --i)
		{
			LL t = (p - i) * m;
			ans += (t - 1) / (p - n);
		}
	}
	printf("%d\n", ans);
}
int main()
{
	int T = 1;
	//scanf("%d", &T);
	while (T--)
	{
		solve();
	}
	return 0;
}

被迫营业的第二天w

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值