zoukankan      html  css  js  c++  java
  • CF1015E2 Solution

    题目链接

    题解

    (n^3)暴力,就是最暴力的那种( •̀ ▽ •́ )✧,枚举中心点和星星大小。咳咳,不是数据水,原题作者卡了好久这个方法,但是没能卡掉(辛苦了)。解释原因:可以发现,临近边缘的星星大小非常小,经过计算实际枚举次数(=4sumlimits_{i=1}^{frac{n+1}{2}}(n-2i+1)),省去常数后基本为(O(n^2))

    AC 代码

    #include<bits/stdc++.h>
    using namespace std;
    const int N=1010;
    struct node {int x,y,s;} ans[N*N];
    char a[N][N];
    bool vis[N][N];
    int main()
    {
    	int n,m,cnt=0;
    	scanf("%d%d",&n,&m);
    	for(int i=1;i<=n;i++) scanf("%s",a[i]+1);
    	for(int i=2;i<n;i++)
    	{
    		for(int j=2;j<m;j++)
    		{
    			if(a[i][j]=='.') continue;
    			int t=1; 
    			while(i>=t && j>=t && a[i+t][j]=='*' && a[i-t][j]=='*' && a[i][j+t]=='*' && a[i][j-t]=='*')
    				{vis[i+t][j]=vis[i-t][j]=vis[i][j+t]=vis[i][j-t]=1; t++;}
    			if(t<=1) continue;
    			ans[++cnt].x=i; ans[cnt].y=j;
    			ans[cnt].s=--t; vis[i][j]=1;
    		}
    	}
    	for(int i=1;i<=n;i++)
    		for(int j=1;j<=m;j++) 
    			if(a[i][j]=='*' && !vis[i][j]) {printf("-1"); return 0;	}
    	printf("%d
    ",cnt);
    	for(int i=1;i<=cnt;i++) printf("%d %d %d
    ",ans[i].x,ans[i].y,ans[i].s);
    	return 0;
    }
    
    
  • 相关阅读:
    问题 A: 走出迷宫(BFS)
    问题 A: 工作团队(并查集删点操作)
    刷题-力扣-989
    刷题-力扣-12
    刷题-力扣-628
    刷题-力扣-11
    刷题-力扣-1018
    刷题-力扣-9
    刷题-力扣-7
    刷题-力扣-6
  • 原文地址:https://www.cnblogs.com/violetholmes/p/14337405.html
Copyright © 2011-2022 走看看