1 条题解

  • 0
    @ 2025-4-14 18:43:49

    C :

    #include<stdio.h>
    #include<math.h>
    int n,m;
    double f(double x)
    {
    	if(x==0)return 0;
    	return (n-1)*(x-0.5)/(m-1)+0.5;
    }
    int equal(double a,double b)
    {
    	return (a<b+0.000000001)&&(a>b-0.000000001);
    }
    int main()
    {
    	int t,ans;
    	int i;
    	scanf("%d",&t);
    	while(t--)
    	{
    		scanf("%d%d",&n,&m);
    		if(m==1){printf("%d\n",n);continue;}
    		ans=0;
    		for(i=1;i<m;i++)
    		{
    			if(equal(f(i),(int)f(i)))ans+=(int)f(i)-(int)f(i-1);
    			else ans+=(int)f(i)-(int)f(i-1)+1;
    		}
    		ans+=(int)f(m-0.5)-(int)f(m-1)+1;
    		printf("%d\n",ans);
    	}
    	return 0;
    }
    

    C++ :

    #include <stdio.h>
    
    int gcd(int x,int y)
    {
        return y==0?x:gcd(y,x%y);
    }
    
    int main()
    {
        //freopen("b.in","r",stdin);
        //freopen("b.out","w",stdout);
        int i,j,n,m,g,T;
        scanf("%d",&T);
        while(T--)
        {
            scanf("%d%d",&n,&m);
            n--;m--;g=gcd(n,m);
            printf("%d\n",n+m-(n/g%2==m/g%2?g:0)+1);
        }
        return 0;
    }
    
    
    • 1

    信息

    ID
    3363
    时间
    1000ms
    内存
    128MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者