华南理工大学“三七互娱杯”程序设计竞赛(重现赛)C题

#include<cstdio>          //将stdio.h的内容用C++的头文件形式表现出来。
#include<algorithm>
using namespace std;
#define N 100100
int gcd(int a, int b){
    return !b ? a : gcd(b, a % b);
}
int main(){
	int t;
	scanf("%d", &t);
	while(t--){
		static int arr[N],arr1[N*10], n,m;
		scanf("%d%d",&n,&m);
		fill(arr1, arr1+N*10, 0);
		for(int i=1;i<=m;i++)
			scanf("%d", &arr[i]);
			sort(arr+1,arr+1+m);    //一定要排序
		for(int i=2;i<=m;i++)
			arr1[arr[i]-arr[i-1]]++;           
		arr1[n-arr[m]+arr[1]]++;           //第一个和最后一个单独算
		for(int i = n; i >=1; i--)
            arr1[i]+=arr1[i+1];            //小的间隔是大的间隔的子集  所以加上
		for(int i=1;i<=n;i++)
		{
			if(!arr1[i])
                printf("0\n");
            else{
                int cas = gcd(arr1[i], n);
                printf("%d/%d\n", arr1[i]/cas, n/cas);
            }
		}
	}
	return 0;
}

最大公约数算法:
int gcd(int a, int b){
return !b ? a : gcd(b, a % b); //辗转相除法
}

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值