2017北京网络赛 Bounce GCD加找规律

题目链接:http://hihocoder.com/problemset/problem/1584

题意:就是求一个小球从矩阵的左上角,跑到矩形的右下角不能重复经过的格子,小球碰到墙壁就反射。

解法:规律题。先算出来小球一共会经过多少网格(包括重复的在内),再算出来有多少个网格过不止一次,两者相减就可以了。对于n*m的矩形,经过观察可以得到,小球弹跳中经过的网格总数是(n-1)*(m-1)/gcd(n-1,m-1)+1,对于9*15的矩形来说就是57。然后来考虑答案39和57的差值,18。对于18有3*6的组合方式,那么对于3可以(9-1)/gcd(9-1,16-1)-1,对于6可以(15-1)/gcd(9-1,15-1)-1.难道是这样凑出来的???套上去发现恰好可以过样例。。然后就没有然后了。

#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
int main(){
    LL n,m;
    while(~scanf("%lld%lld",&n,&m)){
        LL ans = (n-1)/__gcd(n-1,m-1)*(m-1)-((n-1)/__gcd(n-1,m-1)-1)*((m-1)/__gcd(n-1,m-1)-1)+1;
        printf("%lld\n", ans);
    }
    return 0;
}

对于(n?1)×(m?1)gcd((n?1),(m?1))+1

时间: 2024-10-06 17:43:07

2017北京网络赛 Bounce GCD加找规律的相关文章

2017年icpc西安网络赛 Maximum Flow (找规律+数位dp)

题目 https://nanti.jisuanke.com/t/17118 题意 有n个点0,1,2...n-1,对于一个点对(i,j)满足i<j,那么连一条边,边权为i xor j,求0到n-1的最大流,结果取模,n<=1e18 分析 可以写个最大流对数据找规律,但没找出来…… 然后只能取分析了,首先最大流等价于最小割 明确一定,0->n-1这个要先割掉 然后我们贪心,希望有一些点割掉与0相连的边,一些点割掉与n-1相连的边 我们去观察每个点与0相连和与n-1相连的两条边权值,容易发现

hihocode 1584 : Bounce (找规律)(2017 北京网络赛G)

题目链接 比赛时随便找了个规律,然后队友过了.不过那个规律具体细节还挺烦的.刚刚偶然看到Q巨在群里提到的他的一个思路,妙啊,很好理解,而且公式写起来也容易.OrzQ巨 #include<bits/stdc++.h> using namespace std; typedef long long LL; LL n,m; int main() { while(~scanf("%lld%lld",&n,&m)) { n--,m--; LL g=__gcd(n,m);

hihocoder 1582 : Territorial Dispute (计算几何)(2017 北京网络赛E)

题目链接 题意:给出n个点.用两种颜色来给每个点染色.问能否存在一种染色方式,使不同颜色的点不能被划分到一条直线的两侧. 题解:求个凸包(其实只考虑四个点就行.但因为有板子,所以感觉这样写更休闲一些.).如果不是所有点都在凸包上,那么把凸包上的点染成颜色1,内部的点染成颜色2:如果是所有点都在凸包上,且点数>3,那么将第一个和第三个点染成颜色1,其余点染成颜色2:否则,不存在满足要求的染色方式. 虽然很弱但是拿到一个一血还是非常开心的~ #include<bits/stdc++.h> u

2015北京网络赛A题The Cats&#39; Feeding Spots

题意:给你一百个点,找个以这些点为中心的最小的圆,使得这个圆恰好包含了n个点,而且这个圆的边界上并没有点 解题思路:暴力枚举每个点,求出每个点到其他点的距离,取第n大的点,判断一下. 1 #include<cstdio> 2 #include<cmath> 3 #include<algorithm> 4 #include<iostream> 5 #include<memory.h> 6 using namespace std; 7 const i

2015北京网络赛 Couple Trees 倍增算法

2015北京网络赛 Couple Trees 题意:两棵树,求不同树上两个节点的最近公共祖先 思路:比赛时看过的队伍不是很多,没有仔细想.今天补题才发现有个 倍增算法,自己竟然不知道.  解法来自 qscqesze ,这个其实之前如果了解过倍增的话还是不是很难,不过这题的数据也不是很给力,极限数据理论上是过不了的.  其他解法有树链剖分?并不是很清楚.就这样水过了吧... 1 #include <iostream> 2 #include <cstdio> 3 #include &l

hihocoder1236(北京网络赛J):scores 分块+bitset

北京网络赛的题- -.当时没思路,听大神们说是分块+bitset,想了一下发现确实可做,就试了一下,T了好多次终于过了 题意: 初始有n个人,每个人有五种能力值,现在有q个查询,每次查询给五个数代表查询的五种能力值,输出有多少个人每种能力值都比查询的小 n和q都是50000,每种能力值最大也为50000 思路: 对于某一个大小的能力值,有哪些人的此项能力值比他小可以用一个50000的bitset表示.这样我们在查询的时候就可以拿到5个对应的bitset,对其进行and就可以得出最终的人数 这样每

2015北京网络赛 D-The Celebration of Rabbits 动归+FWT

2015北京网络赛 D-The Celebration of Rabbits 题意: 给定四个正整数n, m, L, R (1≤n,m,L,R≤1000). 设a为一个长度为2n+1的序列. 设f(x)为满足x≤ai≤m+x且ai的异或和为0 的序列a的个数. 求 ∑Rx=Lf(x)mod1000000007 思路:因为对于每一个第一次分配后的a序列对应唯一的x,所以我们就枚举x然后在求序列的个数.

HDU-4041-Eliminate Witches! (11年北京网络赛!!)

Eliminate Witches! Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 1124    Accepted Submission(s): 426 Problem Description Kaname Madoka is a Magical Girl(Mahou Shoujo/Puella Magi). The duty of

hdu 6152 : Friend-Graph (2017 CCPC网络赛 1003)

题目链接 裸的结论题.百度 Ramsey定理.刚学过之后以为在哪也不会用到23333333333,没想到今天网络赛居然出了.顺利在题面更改前A掉~~~(我觉得要不是我开机慢+编译慢+中间暂时死机,我还能再早几分钟过掉它 #include<bits/stdc++.h> using namespace std; int g[8][8]; int n; void solve() { for(int i=1; i<=n; i++) for(int j=i+1; j<=n; j++) for