只过样例求助
查看原帖
只过样例求助
1052511
XinFengIneverleft楼主2023/10/9 10:39

写了两种,样例都过了,但提交全WA

//暴力
#include <bits/stdc++.h>
#define int long long
using namespace std;

int px[10000005];
bool col[10000005];

int read(){
    int x = 0;
    char ch = getchar();
    while(ch>='0' && ch<='9')
	{
        x = x * 10 + (ch - '0');
        ch = getchar();
    }
    return x;
}

void write(int x)
{
	if (x>9)
		write(x/10);
	putchar(x%10+48);
	return;
}

signed main()
{
	int n,m,p,q;
	n=read(),m=read(),p=read(),q=read();
	for (int i=m;i>=1;i--)
	{
		int l=(i*p+q)%n+1,r=(i*q+p)%n+1;
		if (l>r)
			swap(l,r);
		for (int j=l;j<=r;j++)
			if (!col[j])
				px[j]=i,col[j]=true;
	}
	for (int i=1;i<=n;i++)
	{
		write(px[i]),puts("");
	}
	return 0;
}

//并查集
#include <bits/stdc++.h>
#define int long long
using namespace std;

int px[10000005];
bool col[10000005];

int read(){
    int x = 0;
    char ch = getchar();
    while(ch>='0' && ch<='9')
	{
        x = x * 10 + (ch - '0');
        ch = getchar();
    }
    return x;
}

void write(int x)
{
	if (x>9)
		write(x/10);
	putchar(x%10+48);
	return;
}

int find(int x)
{
	if (px[x]!=x)
		px[x]=find(px[x]);
	return px[x];
}

signed main()
{
	int n,m,p,q;
	n=read(),m=read(),p=read(),q=read();
	
	for (int i=0;i<=n;i++)
		px[i]=i;
	
	for (int i=m;i>=1;i--)
	{
		int l=(i*p+q)%n+1,r=(i*q+p)%n+1;
		if (l>r)
			swap(l,r);
		for (int j=l;j<=r;j++)
			if (!col[j])
				px[find(j)]=find(i),col[j]=true;
	}
	for (int i=1;i<=n;i++)
	{
		if (!col[i])
			write(0),puts("");
		else
			write(px[i]),puts("");
	}
	return 0;
}
2023/10/9 10:39
加载中...