基准线

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基准线相关的知识,希望对你有一定的参考价值。

联想公司推出一款新型显示屏。该显示屏由 n 行 m 列的点阵组成。任选点阵中两个点可以构造出一条“基准线”,质检员通过校正每条基准线上的像素信息来确保显示屏没有一丝一毫的缺陷。

现在,质检员想知道对于一个由 n 行 m列的点阵组成的显示屏而言有多少条不同的基准线。两条基准线不同当且仅当它们不重合,即两条基准线的交点数量是有穷的。

由于显示屏的基准线的数量会很多,为了简化我们只需要计算数量对 2^30取模后的结果。

输入格式

第一行有一个正整数 T为数据组数,接下来有 T行,每行两个正整数 n,m。

对于简单版本:T≤10,2≤n,m40;

对于中等版本: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;
}

以上是关于基准线的主要内容,如果未能解决你的问题,请参考以下文章

AD模块2.5基准电压,怎样采集1~5V的电压信号?

AD转化的基准电压的作用是啥?

房产交易评估基准价格比对-Delphi外挂方式获取并修改其他程序输入框信息

5V带AD转换单片机的基准电压是不是能超过5V 也就是说5V单片机是不是能测量超过5V的电压?求赐教

如果我的单片机的基准电压为3.3V,而外部的模拟量输入为0—5V我要对这个模拟量直接用单片机的内部AD进行采

51 nod 1394 1394 差和问题(线段树)