提交时间:2024-12-11 14:46:11
运行 ID: 35420
#include<bits/stdc++.h> #define bigi __int128_t using namespace std; int n,q; bigi a[10],b[10];int p[10],ac[10]; bigi pa[10000]; int cnt[3000]; int x[3000]; int gcd(int a,int b){ if(min(a,b)==0) return max(a,b); return gcd(min(a,b),max(a,b)%min(a,b)); } void slv1(){ bigi tot=1;for(int i=1;i<=q;i++) tot<<=1; int tp=0; for(int i=0;i<tot;i++){ memset(ac,0,sizeof(ac)); for(int j=0;j<q;j++){ for(int k=1;k<=n;k++) ac[k]+=(((i>>j)&1)==((a[k]>>j)&1)); }bool fl=1; for(int k=1;k<=n;k++) if(p[k]!=ac[k]) fl=0; if(fl) pa[++tp]=i; } int v=0;bigi id=0; for(int i=0;i<tot;i++){ int cnt=0; for(int j=1;j<=tp;j++){ for(int k=0;k<q;k++){ cnt+=(((i>>k)&1)==((pa[j]>>k)&1)); } } //cout<<i<<' '<<cnt<<endl; if(cnt>v) v=cnt,id=i; //cout<<i<<' '<<cnt<<endl; } int g=gcd(tp,v); string an=""; for(int i=q-1;i>=0;i--) an+=((id>>i)&1)?'T':'F'; cout<<an<<' '; cout<<v/g<<'/'<<tp/g<<endl; //for(int i=1;i<=tp;i++) cout<<(int)(pa[i])<<endl;cout<<endl; }void slv2(){ int mxp=-1; bigi ans=0; for(int i=1;i<=n;i++){ if(p[i]>mxp) ans=a[i],mxp=p[i]; if(q-p[i]>mxp) ans=b[i],mxp=q-p[i]; }string an=""; for(int i=q-1;i>=0;i--) an+=((ans>>i)&1)?'T':'F'; cout<<an<<' '; cout<<mxp<<'/'<<1<<endl; }void slv3(){ int c1=0,c2=0; bigi ans=0; for(int i=0;i<q;i++) if(((a[1]>>i)&1)!=((a[2]>>i)&1)) c1++; int dif=abs(p[1]-p[2]); int mxo=(c1-dif)/2+dif; //cout<<mxo<<endl; int mxp=max(p[1],p[2])-mxo; bool fl=0;if(mxp<q-c1-mxp) fl=1; mxp=max(mxp,q-c1-mxp);mxp+=mxo; string an=""; if(p[1]<p[2]) swap(p[1],p[2]),swap(a[1],a[2]); for(int i=0;i<q;i++){ int t1=(a[1]>>i)&1,t2=(a[2]>>i)&1; //cout<<t1<<' '<<t2<<' '<<fl<<endl; ans<<=1; if(t1!=t2) ans+=t1; else ans+=t1^fl; } for(int i=0;i<=q-1;i++) an+=((ans>>i)&1)?'T':'F'; cout<<an<<' '; cout<<mxp<<'/'<<1<<endl; } void slv(){ cin>>n>>q; for(int i=1;i<=n;i++){ string s;cin>>s; a[i]=0,b[i]=0; for(int j=0;j<q;j++) a[i]<<=1,a[i]+=(s[j]=='T'); for(int j=0;j<q;j++) b[i]<<=1,b[i]+=(s[j]=='F'); cin>>p[i]; }/*if(q<=10) slv1(); else*/ if(n==1) slv2(); else slv3(); //if(n==2) slv3(); } int main(){ int t;cin>>t;while(t--) slv(); return 0; }