1 条题解

  • 0
    @ 2025-4-12 19:06:23

    血与泪的教训

    分三种情况,按列开始枚举,如果遇到格点就-1
    一定要想好边界再开始写,只要可能枚举到只有一个点的列千万别取!!!
    千万别取!!!
    千万别取!!!(因为这时要-2,为了公式简便直接舍弃就行了)
    再者,尽量别先算好斜率及截距再代入,精度可能出问题
    我是数学不好只会模拟的蒟蒻吖~ 以下本蒟蒻枚举代码

    #include <bits/stdc++.h>
    using namespace std;
    int m,n,p;
    long ans=0;
    int main()
    {
    	cin>>n>>m>>p;
    	if (n<p){
    		for (int x=1;x<=n;x++){
    			ans+=int(double(m)*double(x)/double(n));
    			if ((m*x)%n==0){
    				ans--;
    			}
    		}
    		for (int x=n+1;x<p;x++){
    			ans+=int(((double(p)-double(x))*double(m))/(double(p)-double(n)));
    			if (((p-x)*m)%(p-n)==0){
    				ans--;
    			}
    		}
    	}
    	else if (n==p){
    		for (int x=1;x<n;x++){
    			ans+=int(double(m)*double(x)/double(n));
    			if ((m*x)%n==0){
    				ans--;
    			}
    		}
    	}
    	else {
    		for (int x=1;x<n;x++){
    			ans+=int(double(m)*double(x)/double(n));
    			if ((m*x)%n==0){
    				ans--;
    			}
    		}
    		for (int x=p;x<n;x++){
    			ans-=int(((double(p)-double(x))*double(m))/(double(p)-double(n)));
    		}
    	}
    	cout<<ans;
    }
    
    • 1

    信息

    ID
    62
    时间
    1000ms
    内存
    256MiB
    难度
    9
    标签
    递交数
    99
    已通过
    6
    上传者