zoukankan      html  css  js  c++  java
  • 题解 UVA10812 Beat the Spread!

    题解 UVA10812 Beat the Spread!

    这里提供一份良(mei)心(yong)的:

    题目翻译

    题目描述

    超级碗冠军比赛-文斯·隆巴迪杯赛快到了。为了打发等待半场广告和服装故障(?)的时间,当地黑客组织了一个游戏投注池。会员们把赌注押在最后两个得分的总和上,或押在两个得分之差的绝对值上。根据每场赌注的中将好吗,你能推断出最后的得分吗?

    输入格式

    第一行一个 (n) ,表示测试数据的数量。

    接下来 (n) 行,每行代表一组测试数据。每组测试数据都给出非负整数 (s)(t) ,分别表示两个得分之和与差的绝对值。

    输出格式

    对于每组测试数据,输出一行两个最终得分,大的在前。若不存在这样的得分,输出 "inpossible" 回想一下,足球得分恒非负。

    题目大意

    对于每组数据,输入 (a+b)(|a-b|) ,求出 (a)(b) 的值。

    题目思路

    题目要求先输出较大数,那我们假设对于两个得分有 (a ge b) ,则有一元二次方程组:

    [egin{cases}a+b=s\a-b=tend{cases} ]

    自然地联想到消元法:

    两式相加得:

    [2a=s+tRightarrow a=frac{s+t}{2} ]

    两式相减得:

    [2b=s-tRightarrow b=frac{s-t}{2} ]

    题目要求 (a)(b) 都为整数,故当 (s+t) 为奇数时一定不符合题意,输出 ( extit{impossible})

    另外考虑 (s)(t) 都是正整数故不存在 (s+t<0) 的情况,所以当 (s-t<0) 时输出 ( extit{impossible})

    Code

    #include<bits/stdc++.h>
    using namespace std;
    long long s,t,n;
    int main()
    {
    	cin>>n;
    	while(n--)
    	{
    		cin>>s>>t;
    		if(s+t<0||s-t<0||(s+t)%2) puts("impossible");
    		else printf("%d %d
    ",(s+t)/2,(s-t)/2);
    	}
    	return 0;
    }
    
  • 相关阅读:
    POJ
    UPC-5843: 摘樱桃(最优状态递推)
    BZOJ-1088 [SCOI2005]扫雷Mine(递推+思维)
    HDU-3065 病毒侵袭持续中(AC自动机)
    BZOJ-4236 JOIOJI (map查找+思维)
    HDU-2896 病毒侵袭(AC自动机)
    Hrbust-2060 截取方案数(KMP)
    UVALive 4490 压缩DP
    UVALive 5881
    UVALive 4168
  • 原文地址:https://www.cnblogs.com/Sure042/p/tijie-uva10812.html
Copyright © 2011-2022 走看看