codeforces 451C. Predict Outcome of the Game 解题报告
题目链接: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 咯。
总的来说,这题是纯数学题!
1 #include <iostream> 2 #include <cstdio> 3 #include <cstdlib> 4 #include <cstring> 5 using namespace std; 6 7 __int64 n, k, d1, d2; 8 9 int main() 10 { 11 int t; 12 while (scanf("%d", &t) != EOF) 13 { 14 while (t--) 15 { 16 scanf("%I64d%I64d%I64d%I64d", &n, &k, &d1, &d2); 17 if (n % 3) 18 printf("no\n"); 19 else 20 { 21 int flag = 0; 22 for (int s1 = -1; s1 <= 1 && !flag; s1++) // 控制d1的正负号 23 { 24 for (int s2 = -1; s2 <= 1 && !flag; s2++) // 控制d2的正负号 25 { 26 if (s1 == 0 || s2 == 0) 27 continue; 28 __int64 w1, w2, w3; 29 __int64 f1, f2, f3; // w1, w2, w3的分子 30 f1 = (2*(s1)*d1 + (s2)*d2 + k); 31 if (f1 % 3) 32 continue; 33 w1 = f1 / 3; 34 f2 = ((-1)*(s1)*d1 + (s2)*d2 + k); 35 if (f2 % 3) 36 continue; 37 w2 = f2 / 3; 38 f3 = ((-1)*(s1)*d1 + 2*(-1)*(s2)*d2 + k); 39 if (f3 % 3) 40 continue; 41 w3 = f3 / 3; 42 43 if (w1 + w2 + w3 == k && w1 >= 0 && w1 <= n/3 && w2 >= 0 && w2 <= n/3 && w3 >= 0 && w3 <= n/3) 44 { 45 flag = 1; 46 break; 47 } 48 } 49 } 50 printf("%s\n", flag ? "yes" : "no"); 51 } 52 } 53 } 54 return 0; 55 }
转载于:https://www.cnblogs.com/windysai/p/3870749.html
codeforces 451C. Predict Outcome of the Game 解题报告相关推荐
- Codeforces Round #700 (Div. 2)A~D2解题报告
Codeforces Round #700 (Div. 2)A~D2解题报告 A Yet Another String Game 原题链接 http://codeforces.com/contest/ ...
- Codeforces Round #693 (Div. 3)A~G解题报告
Codeforces Round #693 (Div. 3)A~G解题报告 A Cards for Friends 原题信息 http://codeforces.com/contest/1472/pr ...
- Codeforces Round #697 (Div. 3)A~G解题报告
Codeforces Round #697 (Div. 3)A~G解题报告 题 A Odd Divisor 题目介绍 解题思路 乍一想本题,感觉有点迷迷糊糊,但是证难则反,直接考虑没有奇数因子的情况, ...
- Codeforces Round #827 (Div. 4) G. Orray 解题报告
原题链接: Problem - G - Codeforces 题目描述: You are given an array aa consisting of nn nonnegative integers ...
- codeforces 814B.An express train to reveries 解题报告
题目链接:http://codeforces.com/problemset/problem/814/B 题目意思:分别给定一个长度为 n 的不相同序列 a 和 b.这两个序列至少有 i 个位置(1 ≤ ...
- Codeforces Round #830 (Div. 2) B. Ugu 解题报告
原题链接: Problem - B - Codeforces 题目描述: A binary string is a string consisting only of the characters 0 ...
- Codeforces Round #626(Div.2) 解题报告
Codeforces Round #626 (Div. 2, based on Moscow Open Olympiad in Informatics) [前言] 最近沉迷只狼,好久没有打CF了,水平 ...
- codeforces C. Inna and Huge Candy Matrix 解题报告
题目链接:http://codeforces.com/problemset/problem/400/C 题目意思:给出一个n行m列的矩阵,问经过 x 次clockwise,y 次 horizontal ...
- Codeforces Beta Round #95 (Div. 2) 部分解题报告 (dp,组合数,)
做这样的比赛既考快速编码的能力,还有快速思维的能力.本人很弱,跌了rating..加油!!!.. 第一题上来就把题意理解错了..粗心啊..直接模拟着做就行:1:如果字符串全是大写字母就进行大小写转换: ...
最新文章
- java 枚举 循环_java – 在枚举中实现内部接口时的循环继承
- 带有128KB缓存的AD7606模拟采集板
- ARC中block块作为属性的使用笔记
- Redis张工的set存储结构(实现)原理
- 局域网聊天9月局域网聊天
- 2018安卓应用安全白皮书:超98%安卓应用存有安全风险
- python自学入门-初学 Python 者自学 Anaconda 的正确姿势是什么?
- 快!100小时免费GPU跑起来!低价又好用的深度学习宝藏平台!
- Java:单例模式的七种写法 (转)
- 修改redis配置文件,并以指定配置文件的方式启动
- 基于vue的个人博客
- Factory method 'dataSource' threw exception; nested exception is java.lang.NullPointerException
- java redis 通知_Jboot实现Redis操作事件通知
- 2018计算机通信网络,2018年1-12月我国计算机、通信和其他电子设备制造业企业数量共计16656个...
- python算法1加1_【Python爬虫作业】- 第一周01 笨方法0-10加分题
- 学习Hadoop的前提条件
- 读书笔记—别让情绪毁了你(插图精读本)
- anaconda 创建虚拟环境(自己版本)
- 电脑重启后IDEA导包报错
- 保护眼睛,开启浏览器的夜间模式 顺便学下!important的作用
热门文章
- internal java compiler error_java字节码注入AOP作业心得
- 计算机模拟与生态工程,2018年环境生态工程专业分析及就业前景
- IIS安装2个SSL_SSL的申请与https使用
- pmos管的应用_串联稳压电路3:NMOS型、PMOS型
- 燃气管理 php,智能燃气管理信息系统设计
- 全国二级c语言考试题型,2016年电大 -全国计算机二级c语言考试题型及考试重点.doc...
- pythonpandas设置索引_pandas DataFrame的修改方法(值、列、索引)
- c#特性 java注解,Java注解全面了解
- c语言求最后一个单词的长度,试题2:计算字符串最后一个单词的长度
- java select 不是date,iPhonedateselect器,而不是键盘?