题目链接:http://codeforces.com/problemset/problem/451/C

题目意思:有3支球队(假设编号为1、2、3),总共要打 n 场比赛,已知已经错过这n场比赛中的 k 场,但从 k 场比赛中可以获取一些信息:设w1表示 k 场比赛中编号为1的球队赢了w1场比赛(w2、w3 类似),绝对值 |w1-w2| = d1,  |w2-w3| = d2,问能否通过设置n-k 的 赛果来使得n场比赛都打完后,编号为1的球队的胜利次数 == 编号为2的球队的胜利次数  == 编号为3的球队的胜利次数。注意:每场比赛的赛果只有胜和输之分,没有平局。

初时看到这道题目,完全没有思路,当看了Tutorial 之后(不过没仔细看他的solution),就大概知道怎么做了,贡献了两个wa......

首先对于n,如果不能被 3 整除,那就肯定怎么分配剩下的 n-k 场赛果都于事无补的了,因为最终 编号为1的球队的胜利次数 == 编号为2的球队的胜利次数  == 编号为3的球队的胜利次数 == n / 3 嘛

  其次,要得出一条隐含的方程(关键所在): w1 + w2 + w3 = k!  (1)

然后结合 |w1-w2| = d1 (2),  |w2-w3| = d2 (3) 来得出w1、 w2、 w3的值。(绝对值可以通过w1,w2,w3的大小关系来去掉,有四种情况)

(1)w1 >= w2,w2 >= w3                                      (2)w1 >= w2,w2 < w3

——>  w1 = (2d1 + d2 + k)  / 3              ——>  w1 = (2d1 - d2 + k)  / 3

w2 = (-d1 + d2 + k)  / 3                  w2  = (-d1 - d2 + k)  / 3

w3 = (-d1 - 2d2 + k) / 3                  w3  = (-d1 + 2d2 + k)  / 3

(3)w1 < w2,w2 >= w3                                          (4)w1 < w2,w2 < w3

——>  w1 = (-2d1 + d2 + k)  / 3                ——>  w1 = (-2d1 - d2 + k)  / 3

    w2 = ( d1   + d2 + k )  / 3                  w2 = ( d1   - d2 + k )  / 3

    w3 = ( d1   - 2d2 + k)  / 3                  w3 = ( d1  + 2d2 + k)  / 3

可以知道,x1与x2的大小关系只会影响 d1 的符号,x2与x3的大小关系只会影响 d2 的符号。

那么可以枚举d1与d2的符号(当然不可能是0啦),算出相应的x1, x2, x3 的大小,看看每个xi (1 <= i <= 3 ) 是否满足 0 <= xi <= n/3 (前提是n%3 == 0!下界0一定要加上,因为算出来有可能是负数啊),还有一点就是,由于涉及除法,4 / 3 == 1 这些情况要考虑到,一个可以避免的方法是,计算的时候,分子要判断是否能被3整除,不能就continue 咯。

总的来说,这题是纯数学题!

 #include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
using namespace std; __int64 n, k, d1, d2; int main()
{
int t;
while (scanf("%d", &t) != EOF)
{
while (t--)
{
scanf("%I64d%I64d%I64d%I64d", &n, &k, &d1, &d2);
if (n % )
printf("no\n");
else
{
int flag = ;
for (int s1 = -; s1 <= && !flag; s1++) // 控制d1的正负号
{
for (int s2 = -; s2 <= && !flag; s2++) // 控制d2的正负号
{
if (s1 == || s2 == )
continue;
__int64 w1, w2, w3;
__int64 f1, f2, f3; // w1, w2, w3的分子
f1 = (*(s1)*d1 + (s2)*d2 + k);
if (f1 % )
continue;
w1 = f1 / ;
f2 = ((-)*(s1)*d1 + (s2)*d2 + k);
if (f2 % )
continue;
w2 = f2 / ;
f3 = ((-)*(s1)*d1 + *(-)*(s2)*d2 + k);
if (f3 % )
continue;
w3 = f3 / ; if (w1 + w2 + w3 == k && w1 >= && w1 <= n/ && w2 >= && w2 <= n/ && w3 >= && w3 <= n/)
{
flag = ;
break;
}
}
}
printf("%s\n", flag ? "yes" : "no");
}
}
}
return ;
}

codeforces 451C. Predict Outcome of the Game 解题报告的更多相关文章

  1. CodeForces 451C Predict Outcome of the Game

    Predict Outcome of the Game Time Limit:2000MS     Memory Limit:262144KB     64bit IO Format:%I64d &a ...

  2. codeforces 258div2C Predict Outcome of the Game

    题目链接:http://codeforces.com/contest/451/problem/C 解题报告:三个球队之间一共有n场比赛,现在已经进行了k场,不知道每个球队的胜场是多少,如三个球队的胜场 ...

  3. codeforces 814B.An express train to reveries 解题报告

    题目链接:http://codeforces.com/problemset/problem/814/B 题目意思:分别给定一个长度为 n 的不相同序列 a 和 b.这两个序列至少有 i 个位置(1 ≤ ...

  4. codeforces 558B. Amr and The Large Array 解题报告

    题目链接:http://codeforces.com/problemset/problem/558/B 题目意思:给出一个序列,然后找出出现次数最多,但区间占用长度最短的区间左右值. 由于是边读入边比 ...

  5. codeforces 515B. Drazil and His Happy Friends 解题报告

    题目链接:http://codeforces.com/problemset/problem/515/B 题目意思:有 n 个 boy 和 m 个 girl,有 b 个 boy 和 g 个 girl ( ...

  6. codeforces 514B. Han Solo and Lazer Gun 解题报告

    题目链接:http://codeforces.com/problemset/problem/514/B 题目意思:给出双头枪的位置(x0, y0),以及 n 个突击队成员的坐标.双头枪射击一次,可以把 ...

  7. codeforces 471C.MUH and House of Cards 解题报告

    题目链接:http://codeforces.com/problemset/problem/471/C 题目意思:有 n 张卡,问能做成多少种不同楼层(floor)的 house,注意这 n 张卡都要 ...

  8. codeforces C. Vasily the Bear and Sequence 解题报告

    题目链接:http://codeforces.com/problemset/problem/336/C 题目意思:给出一个递增的正整数序列 a1, a2, ..., an,要求从中选出一堆数b1, b ...

  9. codeforces A. Vasily the Bear and Triangle 解题报告

    题目链接:http://codeforces.com/problemset/problem/336/A 好简单的一条数学题,是8月9日的.比赛中没有做出来,今天看,从pupil变成Newbie了,那个 ...

随机推荐

  1. *AtCoder Regular Contest 096F - Sweet Alchemy

    $n \leq 50$的树,每个点有权值,现要选点(可多次选一个点)使点数尽量多,如下限制:选的总权值不超过$C \leq 1e9$:$c_i$表示$i$选的次数,$p_i$表示$i$的父亲,那么$c ...

  2. MySQL实现了四种通信协议

    原文链接:http://blog.csdn.net/yangling132/article/details/50932705[侵删] TCP/IP协议,通常我们通过来连接MySQL,各种主要编程语言都 ...

  3. 如何选择 IT 技术书籍

    ★第1招:看网上评论 首先,上一些权威的图书网站,看看大伙儿的评价如何(要相信群众的眼睛是雪亮的).对于英文书籍,我一般上亚马逊网站去看看:中文书籍则上豆瓣网.这两个网站都提供星级评分,一般 > ...

  4. 某考试 T1 sigfib

    设 g(x) = f(x) * x ,多项式 A = Σ g(i) * x^i , 多项式  B = Σ f(i) * x^i. 首先,g(x) = g(x-1) + g(x-2) + f(x-1) ...

  5. android 获得屏幕状态

    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools= ...

  6. weblogic内存调整说明

    一:WebLogic配置问题:  由于WebLogic的配置问题,我们的测试出现了失败情况.原因是为WebLogic分配的内存太少了.通过修改commom\bin\commEnv.cmd文件来增加内存 ...

  7. delphi中Record 和Packed Record的区别

    Record 和Packed Record 第一种不带packed关键字的结构体表明编译器编译时要求进行字对齐,而第二种带packed关键字的结构体表明编译器编译该结构体时不需要进行字对齐,这种方式对 ...

  8. $.ajax里一个中文全角逗号引发的惨案

    昨天,在制作一个页面时,突然发生一件不可思议的事情--JS失效了! 确实让人匪夷所思,我记得饭前还是正常运作的. 于是慢慢的缩小范围,把下午刚加的语句删掉,删完了页面就正常了. 于是被删除的这部分代码 ...

  9. vmware下安装mac os虚拟机问题,最后还是最终攻克了被一个小失误给陷害了

    今天决定来体验一下苹果系统.虚拟机文件大概用了一天半时间才下载完毕,解压后是39G大小,赶紧安装VMWARE.然后载入虚拟机文件体验.開始当我苹果标志出来的时候,我以为成功了.但是那个小齿轮一直在转, ...

  10. mac系统下为emacs设置中文字体,解决乱码问题

    近期换了个系统,如今用mac系统. 当打开emacs后,中文支持的不是非常好.有的地方能显示.在.el文件的凝视里显示为口口口口口口口口这种框.例如以下图所看到的 找了半天.是由于中文字体的问题.仅仅 ...