玄关求条,有Hack数据
查看原帖
玄关求条,有Hack数据
753640
封禁用户楼主2024/5/30 20:48

通过和题解对拍得来的Hack数据:

7 11
11 THU THU
7 2 1 4 5 1 5 1 2 2 2
17 MON WED
2 6 3 5 3 2 5 3 2 2 7 7 6 7 2 6 6
15 SUN TUE
2 2 4 7 4 2 1 2 7 1 6 5 7 4 4
1 MON THU
6
3 THU THU
5 4 5
5 SUN FRI
2 2 1 3 5
1 FRI MON
4
20 SUN MON
4 6 3 7 2 5 1 2 6 2 4 7 1 2 7 7 6 3 5 5
6 WED SUN
2 2 2 4 6 1
7 THU SUN
2 1 3 3 4 3 6
1 FRI MON
3

我的输出:

5 4 8 4 6 9 3

题解的输出:

Inconsistent data.

代码:

#include<bits/stdc++.h>
#define sd std::
#define int long long
#define inf 0x3f3f3f3f
#define linf 1e18
#define il inline
#define db double
#define ldb long double
#define F(i,a,b) for(int i=(a);i<=(b);i++)
#define f(i,a,b) for(int i=(a);i>=(b);i--)
#define MIN(x,y) (x<y?x:y)
#define MAX(x,y) (x>y?x:y)
#define me(x,y) memset(x,y,sizeof x)
#define pii sd pair<int,int>
#define umap(x,y) sd unordered_map<x,y>
#define pque(x) sd priority_queue<x>
#define X first
#define Y second
#define kg putchar(' ')
#define Fr(a) for(auto it:a)
#define dbg(x) sd cout<<#x<<": "<<x<<sd endl
il int read(){int w=1,c=0;char ch=getchar();for(;ch>'9'||ch<'0';ch=getchar()) if(ch=='-') w=-1;for(;ch>='0'&&ch<='9';ch=getchar()) c=(c<<3)+(c<<1)+ch-48;return w*c;}
void printt(int x){if(x>9) printt(x/10);putchar(x%10+48);}
il void print(int x){if(x<0) putchar('-'),printt(-x);else printt(x);}
il void put(int x){print(x);putchar('\n');}
il void printk(int x){print(x);kg;}
const int N=310;
int n,m,k,x;
int a[N][N],ans[N];
umap(sd string,int) mp;
int ksm(int p,int q)
{
	if(!q) return 1;
	if(q&1) return p*ksm(p,q-1)%7;
	int tmp=ksm(p,q/2)%7;
	return tmp*tmp%7;
}
int ma;
void Guess()//高斯消元 
{
	F(i,1,n)
	{
		ma=i;
		F(j,1,m)
		{
			if(a[j][j]&&j<i) continue;
			if(abs(a[j][i])>abs(a[ma][i])) ma=j;
		} 
		F(j,1,n+1) sd swap(a[i][j],a[ma][j]);
		if(!a[i][i]) continue;
		F(j,1,m)
		{
			if(i==j) continue;
			int rate=a[j][i]*ksm(a[i][i],5)%7;
			F(k,1,n+1) (a[j][k]-=a[i][k]*rate%7-7)%=7;
		}
	}
}
int flag;
sd string calc(int i)
{
	F(j,3,9)
	{
		if((a[i][i]*j)%7==a[i][n+1])
		{
			if(ans[i])
			{
//				printf("第%lld个未知数有至少两个解,最小的两个解为%lld和%lld\n",i,ans[i],j);
				return flag=1,"Multiple solutions.";//多解 
			} 
			ans[i]=j;
		}
	}
	return ans[i]?"":(flag=1,"Inconsistent data.");//无解 
}
il void init()
{
	me(a,0);
}
sd string st,en;
il void solve()
{
	init();
	n=read(),m=read();
	if(!(n&m)) exit(0);
	F(i,1,m)
	{
		k=read();
		sd cin>>st>>en;
		F(j,1,k)
		{
			x=read();
			a[i][x]=(a[i][x]+1)%7;
		}
		a[i][n+1]=(mp[en]-(mp[st]-1)+7)%7;
	}
	Guess();
//	for(int i=1;i<=m;i++) dbg(a[i][i]),dbg(a[i][n+1]);
	F(i,1,n) if(!a[i][i]&&a[i][n+1]) return puts("Inconsistent data."),void();//无解 
	F(i,1,n) if(!a[i][i]&&!a[i][n+1]) return puts("Multiple solutions."),void();//多解 
	F(i,1,n)
	{
		sd cout<<calc(i);
		if(flag) return puts(""),void();
	}
	F(i,1,n-1) printk(ans[i]);
	put(ans[n]);
}
signed main()
{
	mp["SUN"]=7,mp["MON"]=1,mp["TUE"]=2,mp["WED"]=3,mp["THU"]=4,mp["FRI"]=5,mp["SAT"]=6;
	while(1) solve();
    return 0;
}
2024/5/30 20:48
加载中...