社区讨论
NOIP题目52分求助
学术版参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @lo33ecxw
- 此快照首次捕获于
- 2023/10/24 00:08 2 年前
- 此快照最后确认于
- 2023/10/24 00:08 2 年前
CPP
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int r(){
int f=1,x=0;
char c=getchar();
while(c<'0'||c>'9'){
if(c=='-')f=-1;
c=getchar();
}
while(c>='0'&&c<='9'){
x=x*10+c-'0';
c=getchar();
}
return f*x;
}
long long modd=998244353;
//priority_queue<int,vector<int>,greater<int>>
char ma[2001][2001],T,id,n,m,c,f;
int main(){
T=r(),id=r();
for(int qwq=1;qwq<=T;qwq++){
n=r(),m=r(),c=r(),f=r();
if(c==0&&f==0){
cout <<0<<" "<<0<<endl;
continue;
}
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++){
cin >>ma[i][j];
}
}
if(n==3&&m==2){
if(ma[1][1]!='1'&&ma[1][2]!='1'&&ma[2][1]!='1'&&ma[3][1]!='1'&&ma[3][2]!='1'){
printf("%lld %lld\n",1,0);
}else{
printf("%lld %lld\n",0,0);
}
continue;
}
if(n==4&&m==2){
int ff=0,cc=0;
if(ma[1][1]!='1'&&ma[1][2]!='1'&&ma[2][1]!='1'&&ma[3][1]!='1'&&ma[3][2]!='1'){
cc++;
}
if(ma[1][1]!='1'&&ma[1][2]!='1'&&ma[2][1]!='1'&&ma[3][1]!='1'&&ma[4][1]!='1'&&ma[4][2]!='1'){
cc++;
}
if(ma[1][1]!='1'&&ma[1][2]!='1'&&ma[2][1]!='1'&&ma[3][1]!='1'&&ma[3][2]!='1'&&ma[4][1]!='1'){
ff++;
}
printf("%lld %lld\n",cc*c%modd,ff*f%modd);
continue;
}
if(f==0){
long long cc=0,ff=0;
for(int i=1;i<=n;i++){//c
for(int j=1;j<=m;j++){
int h=0,s=0;
if(ma[i][j]=='0'&&ma[i+1][j]=='0'&&ma[i][j+1]=='0'&&i+1<=n&&j+1<=m){
for(int q=1;q+j<=m;q++){
if(ma[i][j+q]=='1')break;
else h++;
}
// cout <<h<<endl;
for(int k=2;k+i<=n;k++){
for(int q=1;q+j<=m;q++){
if(ma[i+k][j+q]=='1')break;
else s++;
}
cc+=s*h;
s=0;
}
}
}
}
printf("%lld %lld\n",cc*c%modd,ff*f%modd);
continue;
}else{
long long cc=0,ff=0;
for(int i=1;i<=n;i++){//c
for(int j=1;j<=m;j++){
int h=0,s=0;
if(ma[i][j]=='0'&&ma[i+1][j]=='0'&&ma[i+2][j]=='0'&&ma[i][j+1]=='0'&&i+2<=n&&j+1<=m){
for(int q=1;q+j<=m;q++){
if(ma[i][j+q]=='1')break;
else h++;
}
// cout <<h<<endl;
for(int k=2;k+i<=n;k++){
if(ma[i+k][j]=='1')break;
for(int q=1;q+j<=m;q++){
if(ma[i+k][j+q]=='1')break;
else s++;
}
cc+=s*h;
s=0;
}
}
}
}
for(int i=1;i<=n;i++){//f
for(int j=1;j<=m;j++){
int h=0,s=0,x=0;
if(ma[i][j]=='0'&&ma[i+1][j]=='0'&&ma[i+2][j]=='0'&&ma[i][j+1]=='0'&&i+2<=n&&j+1<=m){
for(int q=1;q+j<=m;q++){
if(ma[i][j+q]=='1')break;
else h++;
}
for(int k=2;k+i<=n;k++){
if(ma[i+k][j]=='1')break;
for(int q=1;q+j<=m;q++){
if(ma[i+k][j+q]=='1')break;
else s++;
}
if(s){
for(int p=k+1;ma[i+p-2][j]=='0'&&p+i<=n;p++){
if(ma[i+p][j]=='1')break;
else x++;
}
}
ff+=s*h*x;
s=0;
x=0;
}
}
}
}
printf("%lld %lld\n",cc*c%modd,ff*f%modd);
continue;
}
}
return 0;
}
/*
1 0
4 3 1 1
001
000
000
000
1 0
4 2 1 1
00
00
01
00
1 0
16 12 1 1
000000000001
011111111111
000000000011
011111111111
010011111111
010111100011
010011101111
011111100011
111111111111
000011111111
011111111111
000000111111
011111000111
011111011111
011111000111
011111011111
*/
回复
共 0 条回复,欢迎继续交流。
正在加载回复...