基准线
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基准线相关的知识,希望对你有一定的参考价值。
联想公司推出一款新型显示屏。该显示屏由 n 行 m 列的点阵组成。任选点阵中两个点可以构造出一条“基准线”,质检员通过校正每条基准线上的像素信息来确保显示屏没有一丝一毫的缺陷。
现在,质检员想知道对于一个由 n 行 m列的点阵组成的显示屏而言有多少条不同的基准线。两条基准线不同当且仅当它们不重合,即两条基准线的交点数量是有穷的。
由于显示屏的基准线的数量会很多,为了简化我们只需要计算数量对 2^30取模后的结果。
输入格式
第一行有一个正整数 T为数据组数,接下来有 T行,每行两个正整数 n,m。
对于简单版本:T≤10,2≤n,m≤40;
对于中等版本:T≤10,000,2≤n,m≤4,000;
对于困难版本:T≤10,000,2≤n,m≤400,000。
输出格式
输出一共有 T行 ,每行一个整数,为该组数据的基准线数量。
样例输入
4 2 2 7 10 23 34 100 100
样例输出
6 1111 139395 22791174
O(n?4??) 枚举两个点,得到这两个点构成的直线方程,然后去重即可。
#include<bits/stdc++.h>
using namespace std;
const int q=pow(2,30);
inline int gcd(int x,int y)
{
return y==0?x:gcd(y,x%y);
}
int solve(int n,int m)
{
long long cnt=0;
for(int i=1;i<n;i++)
for(int j=1;j<m;j++)
{
if(gcd(i,j)==1)
{
cnt+=((n-i)*(m-j)-max(n-2*i,0)*max(m-2*j,0))%q;
cnt%=q;
}
}
return cnt;
}
int main()
{
int t;
cin>>t;
while(t--)
{
int n,m;
cin>>n>>m;
cout<<solve(n,m)*2+n+m<<endl;
}
return 0;
}
以上是关于基准线的主要内容,如果未能解决你的问题,请参考以下文章
房产交易评估基准价格比对-Delphi外挂方式获取并修改其他程序输入框信息
5V带AD转换单片机的基准电压是不是能超过5V 也就是说5V单片机是不是能测量超过5V的电压?求赐教