入门赛F题求助
  • 板块题目总版
  • 楼主jiangyunuo
  • 当前回复0
  • 已保存回复0
  • 发布时间2025/7/18 21:02
  • 上次更新2025/7/19 11:49:57
查看原帖
入门赛F题求助
1061050
jiangyunuo楼主2025/7/18 21:02
#include<bits/stdc++.h>
using namespace std;
const int N = 1000000007;
int main(){
    long long n,q,k;
    cin>>n>>q;
    long long a[n+1][n+1],b[n+1][n+1],c[n+1][n+1];
    for(int i=1;i<=n;i++){
    	for(int j=1;j<=n;j++){
    		cin>>a[i][j];
		}
	}
	long long row[n+1],col[n+1],x,y,bb,cc,bbb,ccc,ans;
	bool z[n+1],zz[n+1];
	for(int i=1;i<=q;i++){
		cin>>k;
		memset(row,0,sizeof(row));
		memset(col,0,sizeof(col));
		memset(z,0,sizeof(z));
		memset(zz,0,sizeof(zz));
		for(int j=1;j<=k;j++){
			cin>>row[j];
			z[row[j]]=1;
		}
		for(int j=1;j<=k;j++){
			cin>>col[j];
			zz[col[j]]=1;
		}
		sort(row+1,row+k+1);
		sort(col+1,col+k+1);
		x=0;
		for(int j=1;j<=n;j++){
			if(!z[j])x++;
			y=0;
			for(int l=1;l<=n;l++){
				if(!z[j]&&!zz[l]){
					y++;
					b[x][y]=a[j][l];
				}
			}
		}
		for(int j=1;j<=k;j++){
			for(int l=1;l<=k;l++){
				c[j][l]=a[row[j]][col[l]];
			}
		}
		bb=cc=1;
		for(int j=1;j<=x;j++)bb*=b[j][j];
		for(int j=1;j<=k;j++)cc*=c[j][j];
		bbb=bb;
		ccc=cc;
		bb=cc=1;
		for(int j=1;j<=x;j++)bb*=b[j][x-j+1];
		for(int j=1;j<=k;j++)cc*=c[j][k-j+1];
		bbb-=bb;
		ccc-=cc;
		bbb = ((bbb % N) + N) % N;
		ccc = ((ccc % N) + N) % N;
		ans=bbb*ccc;
		ans = ((ans % N) + N) % N;
		cout<<ans<<endl;
	}
	return 0;
}

样例过了,其他全错

2025/7/18 21:02
加载中...