UVa 10642 - Can You Solve It?

题目:二维平面上的整数点,用路径链接起来(0,0)->(1,0)->(0,1)->(2,0)->..

给你两点坐标,求两点间步长(在路径上的距离)。

分析:简单题。

我们发现点是按照x+y的递增序,且y的递增序(x+y相同时)排列的;

所以每个点对应的路径上的位置为:(x+y)*(x+y+1)/ 2 + y。

说明:注意使用long long防止数据溢出。

#include <algorithm>
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cstdio>
#include <cmath>

using namespace std;

int main()
{
	int T,x1,y1,x2,y2;
	while (~scanf("%d",&T))
	for (int t = 1 ; t <= T ; ++ t) {
		scanf("%d%d%d%d",&y1,&x1,&y2,&x2);

		long long n = (x1+y1)*(x1+y1+1LL)/2LL+y1;
		long long m = (x2+y2)*(x2+y2+1LL)/2LL+y2;

		printf("Case %d: %lld\n",t,m-n);
	}
    return 0;
}
时间: 2024-10-31 22:24:47

UVa 10642 - Can You Solve It?的相关文章

UVA 10341 Solve It

Problem F Solve It Input: standard input Output: standard output Time Limit: 1 second Memory Limit: 32 MB Solve the equation: p*e-x + q*sin(x) + r*cos(x) + s*tan(x) + t*x2 + u = 0 where 0 <= x <= 1. Input Input consists of multiple test cases and te

UVA Solve It(二分查找)

Problem F Solve It Input: standard input Output: standard output Time Limit: 1 second Memory Limit: 32 MB Solve the equation: p*e-x+ q*sin(x) + r*cos(x) + s*tan(x) + t*x2 + u = 0 where 0 <= x <= 1. Input Input consists of multiple test cases and ter

UVa 10341 (二分求根) Solve It

很水的一道题,因为你发现这个函数是单调递减的,所以二分法求出函数的根即可. 1 #include <cstdio> 2 #include <cmath> 3 //using namespace std; 4 5 const double e = 1e-14; 6 double p, q, r, s, t, u; 7 8 inline double f(double x) 9 { return p*exp(-x) + q*sin(x) + r*cos(x) + s*tan(x) +

UVa 11734 - Big Number of Teams will Solve This

题目:一个ACM的判题的小程序,两组字符全相同,为正确,比标准多输出空格,为格式错误,其他为错误. 分析:字符串.从前向后扫描,如果两字符不同,若A串当前字符不是空格,则错误: 若是空格,则一定不会是正确,滤过空格,看剩余部分,如果剩下字符相同则格式错误: 否则,一定错误: 说明:注意结束位置的空格.想起几年前开发自己OJ的日子了. #include <iostream> #include <cstdlib> #include <string> #include <

UVA - 10341 - Solve It (二分求解)

思路:给你一个公式,求零点,从题目条件可以看出,此函数式是递减的,所以只要从两头往中间二分答案即可,注意精度问题,因为要精确到小数点后4位,<1e-6居然还WA,<1e-9才过,所以说尽量使精度高点 这里e的n次方可以用exp(n)表示,也可以用pow(M_E, n)表示 以下是math.h中定义的一些常量: /* Definitions of useful mathematical constants * M_E - e * M_LOG2E - log2(e) * M_LOG10E - lo

UVA 11014 - Make a Crystal(容斥原理)

UVA 11014 - Make a Crystal 题目链接 题意:给定一个NxNxN的正方体,求出最多能选几个整数点.使得随意两点PQ不会使PQO共线. 思路:利用容斥原理,设f(k)为点(x, y, z)三点都为k的倍数的点的个数(要扣掉一个原点O).那么全部点就是f(1),之后要去除掉共线的,就是扣掉f(2), f(3), f(5)..f(n).n为素数.由于这些素数中包括了合数的情况,而且这些点必定与f(1)除去这些点以外的点共线,所以扣掉.可是扣掉后会扣掉一些反复的.比方f(6)在f

uva 10003 Cutting Sticks 简单区间dp

// uva 10003 Cutting Sticks 区间dp // 经典的区间dp // dp(i,j)表示切割小木棍i-j所需要的最小花费 // 则状态转移为dp(i,j) = min{dp(i,k) + dp(k,j) + a[j]-a[i]) // 其中k>i && k<j // a[j] - a[i] 为第一刀切割的代价 // a[0] = 0,a[n+1] = L; // dp数组初始化的时候dp[i][i+1]的值为 0,这表示 // 每一段都已经是切割了的,不

UVA 1048 - Low Cost Air Travel(最短路)

UVA 1048 - Low Cost Air Travel 题目链接 题意:给定一些联票,在给定一些行程,要求这些行程的最小代价 思路:最短路,一张联票对应几个城市就拆成多少条边,结点表示的是当前完成形成i,在城市j的状态,这样去进行最短路,注意这题有坑点,就是城市编号可能很大,所以进行各种hash 代码: #include <cstdio> #include <cstring> #include <vector> #include <queue> #in

UVA 11367 - Full Tank?(最短路+DP)

UVA 11367 - Full Tank? 题目链接 题意:给定一个无向图,每个点有一个加油站,有一个油价,现在一辆车,每次询问要从起点s走到t,邮箱容量为c,问最小代价 思路:dijkstra算法,d数组多一个状态,表示当前油量即可 不过这题如果每次都把所有状态转移完,挺费时间的,卡着时间过的 后面改成每次1升1升加油去转移状态,效率会比较快,因为有很多无用状态可以省去 代码: #include <cstdio> #include <cstring> #include <