QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#662091#4434. LemursQingTianTL 29ms19836kbC++143.2kb2024-10-20 20:46:002024-10-20 20:46:02

Judging History

你现在查看的是最新测评结果

  • [2024-10-20 20:46:02]
  • 评测
  • 测评结果:TL
  • 用时:29ms
  • 内存:19836kb
  • [2024-10-20 20:46:00]
  • 提交

answer

//F9 编译并运行
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N = 1010;
int n,m,k;
string mp[N];
int sum[N][N];

int a[N][N];
int sum2[N][N];
int clip(int x,int low,int hig){
    if(x<low) return low;
    if(x>hig) return hig;
    return x;
}
bool getSquare(int x0,int y0,int x1,int y1){

    x0=clip(x0,1,n);
    x1=clip(x1,1,n);
    y0=clip(y0,1,m);
    y1=clip(y1,1,m);
    if(x0>x1) swap(x0,x1);
    if(y0>y1) swap(y0,y1);
    
    int res=(sum[x1][y1]-sum[x0-1][y1]-sum[x1][y0-1]+sum[x0-1][y0-1]);
    //cerr<<x0<<' '<<y0<<' '<<x1<<' '<<y1<<' '<<res<<"\n";
    return res==(x1-x0+1)*(y1-y0+1);
}

bool getTri(int x,int y,int dx,int dy,int len){
	//cerr<<"TRI: "<<x<<' '<<y<<' '<<dx<<' '<<dy<<' '<<len<<'\n';
    if(x<1||x>n||y<1||y>m||len<0) return 1;
    if(len==0) return 1;
    int slen=(len+1)/2-1;
    int rlen=slen+1;
    // cerr<<slen<<' '<<rlen<<'\n';
    return getSquare(x,y,x+dx*slen,y+dy*slen)
    &&getTri(x+dx*rlen,y,dx,dy,len-rlen)
    &&getTri(x,y+dy*rlen,dx,dy,len-rlen);
}

bool get(int x,int y,int k){
    int dx[]={1,1,-1,-1};
    int dy[]={1,-1,1,-1};

    for(int i=0;i<4;i++){
    	
    	bool res=getTri(x,y,dx[i],dy[i],k+1);
    	//cerr<<"GET: "<<x<<' '<<y<< ' '<<res<<'\n';
		if(!res) return 0;
    }
    return 1;
}


int getSquare1(int x0,int y0,int x1,int y1){
	//cerr<<x0<<' '<<y0<<' '<<x1<<' '<<y1<<"\n";
    x0=clip(x0,1,n);
    x1=clip(x1,1,n);
    y0=clip(y0,1,m);
    y1=clip(y1,1,m);
    if(x0>x1) swap(x0,x1);
    if(y0>y1) swap(y0,y1);
    return (sum2[x1][y1]-sum2[x0-1][y1]-sum2[x1][y0-1]+sum2[x0-1][y0-1]);
}

int getTri1(int x,int y,int dx,int dy,int len){
	//cerr<<"TRI: "<<x<<' '<<y<<' '<<dx<<' '<<dy<<' '<<len<<'\n';
    if(x<1||x>n||y<1||y>m||len<0) return 0;
    if(len==0) return 0;
    int slen=(len+1)/2-1;
    int rlen=slen+1;
    return getSquare1(x,y,x+dx*slen,y+dy*slen)
            +getTri1(x+dx*rlen,y,dx,dy,len-rlen)
            +getTri1(x,y+dy*rlen,dx,dy,len-rlen);
}

bool get1(int x,int y,int k){
    int dx[]={1,1,-1,-1};
    int dy[]={1,-1,1,-1};
    for(int i=0;i<4;i++){
    	int res=getTri1(x,y,dx[i],dy[i],k+1);
       	if(res) return 1;
    }
    return 0;
}


void solve(){
    cin>>n>>m>>k;
    for(int i=1;i<=n;i++){
        cin>>mp[i],mp[i]=" "+mp[i];
    }
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            sum[i][j]=sum[i-1][j]+sum[i][j-1]-sum[i-1][j-1]+(mp[i][j]=='x');
        }
    }
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            a[i][j]=get(i,j,k);
        }
    }

    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            sum2[i][j]=sum2[i-1][j]+sum2[i][j-1]-sum2[i-1][j-1]+a[i][j];
        }
    }
    int res=1;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            if(mp[i][j]=='x'){
                if(get1(i,j,k)==0){
                    res=0;
                }
            }
        }
    }
    
    // cout<<getTri(sum,2,2,1,1,1)<<'\n';
    // db(sum);
    // db(a);
    // db(sum2);

    
    if(res) cout<<"TAK\n";
    else cout<<"NIE\n";

}
signed main(){
    ios::sync_with_stdio(false);
    cin.tie(0);
    int _=1;cin>>_;
    while(_--) solve();
    return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 29ms
memory: 19836kb

input:

4000
1 1 1
.
1 1 1
x
1 1 1000
.
1 1 1000
x
1 1000 4
..........................................xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx....xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx...

output:

TAK
TAK
TAK
TAK
TAK
NIE
NIE
TAK
NIE
TAK
NIE
NIE
TAK
TAK
NIE
TAK
TAK
NIE
NIE
NIE
NIE
NIE
NIE
NIE
NIE
NIE
TAK
NIE
NIE
TAK
TAK
TAK
NIE
NIE
NIE
TAK
TAK
NIE
NIE
TAK
NIE
NIE
NIE
TAK
NIE
NIE
NIE
TAK
NIE
NIE
NIE
NIE
TAK
NIE
NIE
NIE
NIE
NIE
NIE
NIE
NIE
NIE
NIE
NIE
NIE
NIE
NIE
NIE
NIE
TAK
NIE
NIE
NIE
TAK
TAK
...

result:

ok 4000 lines

Test #2:

score: -100
Time Limit Exceeded

input:

36
1000 1000 2
....xxxx..............xxxxxx..........xx..xxxx......xxxxxxxxxxx.........xxxxxxxxxx...xxxxxx....xxxxxx.......xxxxxx....xxxxxx......................................xx.............xxxxxxxxx......xxxxxxx................xxxxxx..xxxxxx....xxxxxx..............xxxxxxxxxxxxxxxxxxxxxxxxxxxx...x...

output:


result: