【math】【codeforces】451A Predict Outcome of the Game

http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=52099

有三只球队,一共有n场比赛,然后现在进行了k场,不知道输赢,只知道第一和第二的分数差是d1,第二和第三的分数差是d2,

问这样比赛是不是可能出现平局,注意每一场比赛没有平局。

如果n%3 != 0,肯定不会使得三个队伍平手,输出“no”。

设三个队在前K场比赛中分别赢了x1,x2,x3场,有|x1 - x2| = d1, | x2 - x3| = d2。

由于d1,d2分别有正负,共分为四种情况:

{x1 - x2 = d1, x2 - x3 = d2},{x1 - x2 = d1, x3 - x2 = d2},{x2 - x1 = d1, x2 - x3 = d2},{x2 - x1 = d1,x3 - x2 = d2}

只要有一种情况有可行解即可。

 1 #include <bits/stdc++.h>
 2 using namespace std;
 3 typedef long long ll;
 4 int main(){
 5     int T;
 6     ll n,m,d1,d2;
 7     scanf("%d",&T);
 8     while (T--){
 9         scanf("%I64d%I64d%I64d%I64d",&n,&m,&d1,&d2);
10         ll s,d,s1,s2,s3,D1,D2,d3,k=n-m;
11         d=m-(d1+2*d2);
12         s=k-(2*d1+d2);
13         D1=m-(d1+d2);
14         s1=k-(max(d1,d2)+abs(d1-d2));
15         D2=m-(max(d1,d2)+abs(d1-d2));
16         s2=k-(d1+d2);
17         d3=m-(2*d1+d2);
18         s3=k-(d2*2+d1);
19         if ((s % 3==0 && s>=0) && (d>=0 && d % 3==0)) puts("yes");
20         else if ((s1 % 3==0 && s1>=0) && (D1>=0 && D1 % 3==0)) puts("yes");
21         else if ((s2 % 3==0 && s2>=0) && (D2>=0 && D2 % 3==0)) puts("yes");
22         else if ((s3 % 3==0 && s3>=0) && (d3>=0 && d3 % 3==0)) puts("yes");
23         else puts("no");
24     }
25     return 0;
26 }
时间: 2024-11-11 02:43:12

【math】【codeforces】451A Predict Outcome of the Game的相关文章

【搜索】【并查集】Codeforces 691D Swaps in Permutation

题目链接: http://codeforces.com/problemset/problem/691/D 题目大意: 给一个1到N的排列,M个操作(1<=N,M<=106),每个操作可以交换X Y位置上的数字,求可以得到的最大字典序的数列. 题目思路: [搜索][并查集] 这题可以用搜索或者并查集写,都能过. 把位置分成若干块,每一块里面的位置都是可以被这一块里另一个位置经过若干次调换的(类似强连通,位置可达). 然后把每一块位置里的 位置按从小到大排序,位置上的值按从大到小排序,依次填入位置

【并查集】【模拟】Codeforces 699D Fix a Tree

题目链接: http://codeforces.com/problemset/problem/699/D 题目大意: 通过给定当前节点的父亲给你一棵有错的树,可能有多个根和环,输出改成正确的一棵树至少要修改几个节点的父亲和修改后所有点的父亲值 题目思路: [并查集][模拟] 用并查集把成环的归在一起(类似强连通分量),然后统计分量数并修改. 第一个出现的当作根,其余的每一块连通分量都去掉一条边改为连接到根上. 1 // 2 //by coolxxx 3 ////<bits/stdc++.h>

Codeforces Round #254 (Div. 2) DZY Loves Chemistry【并查集基础】

一开始不知道题意是啥意思,迟放进去反应和后放进去反应有什么区别 对于第三组数据不是很懂,为啥312,132的组合是不行的 后来发现这是一道考察并查集的题目 QAQ 怒贴代码: 1 #include <stdio.h> 2 #include <string.h> 3 #include <stdlib.h> 4 #include <math.h> 5 #include <iostream> 6 #include <algorithm> 7

【链表】【模拟】Codeforces 706E Working routine

题目链接: http://codeforces.com/problemset/problem/706/E 题目大意: 给一个N*M的矩阵,Q个操作,每次把两个同样大小的子矩阵交换,子矩阵左上角坐标分别为(a,b)和(c,d),高度h,宽度w. (2 ≤ n, m ≤ 1000, 1 ≤ q ≤ 10 000) 题目思路: [链表][模拟] 这一看如果直接模拟的话时间复杂度是N*M*Q,肯定T了. 把矩阵看成链表,链表的方向有上下左右四种,其实每次交换两个子矩阵只改变的外围一圈的链表值,而内部的链

【深搜】【数】Codeforces 707D Persistent Bookcase

题目链接: http://codeforces.com/problemset/problem/707/D 题目大意: 一个N*M的书架,支持4种操作 1.把(x,y)变为有书. 2.把(x,y)变为没书. 3.把x行上的所有书状态改变,有变没,没变有. 4.回到第K个操作时的状态. 求每一次操作后书架上总共多少书. 题目思路: [深搜][树] 现场有一点思路不过没敢写哈.还是太弱了. 总共只用保存一张图,把操作看成一棵树,一开始I操作连接在I-1操作后,如果遇到操作4的话,把I操作与I-1操作的

【数论】【扩展欧几里得】Codeforces 710D Two Arithmetic Progressions

题目链接: http://codeforces.com/problemset/problem/710/D 题目大意: 两个等差数列a1x+b1和a2x+b2,求L到R区间内重叠的点有几个. 0 < a1, a2 ≤ 2·109,  - 2·109 ≤ b1, b2, L, R ≤ 2·109, L ≤ R). 题目思路: [数论][扩展欧几里得] 据题意可得同余方程组 x=b1(mod a1) 即 x=k1*a1+b1 x=b2(mod a2) x=k2*a2+b2 化简,k1*a1=k2*a2

[CodeForces - 1225D]Power Products 【数论】 【分解质因数】

[CodeForces - 1225D]Power Products [数论] [分解质因数] 题目描述 Time limit 2000 ms Memory limit 524288 kB Source Technocup 2020 - Elimination Round 2 Tags hashing math number theory *1900 Site https://codeforces.com/problemset/problem/1225/D 题面 Example Input 6

[CodeForces - 1225C]p-binary 【数论】【二进制】

[CodeForces - 1225C]p-binary [数论][二进制] 题目描述 Time limit 2000 ms Memory limit 524288 kB Source Technocup 2020 - Elimination Round 2 Tags bitmasks brute force math *1600 Site https://codeforces.com/problemset/problem/1225/c 题面 Example Input1 24 0 Output

【Math】GCD XOR 证明

题目:Given an integer N, and how many pairs (A;B) are there such that: gcd(A;B) = A xor B where 1<=B<=A<=N. 首先先爆一发,妥妥超时.其实真相是我想打表找规律.结果没什么规律可循. 后来分析:要想让GCD(A,B)==(A^B),A和B一定是同样的位数(二进制).因此打表方法可变为:(亦超时) void init() { int K=0; int last=0; for(int i=1;