175 条题解
-
0GolfGTI LV 4 @ 2006-08-19 08:55:58
题主整人啊,4重for就AC了
强烈BS这种行为 -
02006-08-18 09:13:21@
数据格式BT BT `
\
`\
``
有的行尾有空格
有的没有
#\(%@#&^%\)^@# -
02006-08-18 08:50:31@
练练dp用,就是数据忒弱了
-
02006-08-17 23:21:06@
原来如此!!
简单的搜索题... -
02006-08-17 22:36:28@
别看题目里说的数据范围!!!
其实m,n都没有超过10!!
大家随便做吧,硬搜都不要时间……比如说我这个吧,4重for循环的硬搜算法,居然0ms过了
编译通过...
├ 测试数据 01:答案正确... 0ms
├ 测试数据 02:答案正确... 0ms
├ 测试数据 03:答案正确... 0ms
├ 测试数据 04:答案正确... 0ms
├ 测试数据 05:答案正确... 0ms
---|---|---|---|---|---|---|---|-
Accepted 有效得分:100 有效耗时:0ms -
-12017-11-03 10:46:28@
只需要找到#再搜索就行
#include<cmath>
#include<cstring>
#include<cstdio>
#include<cstdlib>
#include<iostream>
using namespace std;
int n,m,maxn,ans;
char s[10008][10008];
void dfs(int x,int y)
{
maxn=0;
for(int i=x;i<x+m;i++)
for(int j=y;j<y+m;j++)
if(s[i][j]=='#')
maxn++;
ans=max(ans,maxn);
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
cin>>s[i][j];
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
if(s[i][j]=='#')
dfs(i,j);
}
cout<<ans;
return 0;
} -
-12017-09-17 20:40:27@
非常简单!!!!
#include<iostream>
using namespace std;
char a[10000][10000];
int bc,gc,sum=0;
int main()
{
cin>>bc>>gc;
for(int i=1;i<=bc;++i)
for(int x=1;x<=bc;++x)
cin>>a[i][x];
for(int i=1;i<=bc;++i)
for(int x=1;x<=bc;++x)
{
int tot=0;
for(int q=i;q<=i+gc-1;++q)
for(int p=x;p<=x+gc-1;++p)
if(a[q][p]=='#')
tot++;
sum=max(sum,tot);
}
cout<<sum;
return 0;
} -
-12017-09-17 19:44:45@
#include<iostream> #include<cstdio> #include<cstdlib> #include<algorithm> #include<cmath> #define maxn 10000+5 using namespace std; int m,n,an=0,ans=0,max1=0,co; char ma[maxn][maxn]; int find(int x,int y,int s){ ans=0; for(int i=x;i<=x+s-1;i++) for(int j=y;j<=y+s-1;j++){ if(ma[i][j]=='#'){ ans++; } } return ans; } int main(){ cin>>m;cin>>n; for(int i=1;i<=m;i++) for(int j=1;j<=m;j++){ cin>>ma[i][j]; } for(int i=1;i<=m-n+1;i++) for(int j=1;j<=m-n+1;j++){ find(i,j,n); if(max1<ans) max1=ans; // cout<<" "<<i<<" "<<j<<" "<<ans<<endl; } cout<<max1<<endl; return 0; }
-
-12017-09-17 19:44:10@
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<cmath>
#define maxn 10000+5using namespace std;
int m,n,an=0,ans=0,max1=0,co;
char ma[maxn][maxn];int find(int x,int y,int s){
ans=0;
for(int i=x;i<=x+s-1;i++)
for(int j=y;j<=y+s-1;j++){
if(ma[i][j]=='#'){
ans++;
}
}
return ans;
}int main(){
cin>>m;cin>>n;
for(int i=1;i<=m;i++)
for(int j=1;j<=m;j++){
cin>>ma[i][j];
}
for(int i=1;i<=m-n+1;i++)
for(int j=1;j<=m-n+1;j++){
find(i,j,n);
if(max1<ans) max1=ans;
// cout<<" "<<i<<" "<<j<<" "<<ans<<endl;
}
cout<<max1<<endl;
return 0;
} -
-12017-09-17 19:36:35@
#include<iostream>
#include<cstdio>
#include<cstring>using namespace std;
int main()
{
int m,n,i,max=0,o,p,i1,o1;
cin>>m>>n;
char jd[m+1][m+1];
int s[m-n+2][m-n+2];
memset(s,0,sizeof(s));
for(i=1;i<=m;i++)
for(o=1;o<=m;o++)
cin>>jd[i][o];
for(i=1;i<=m-n+1;i++)
for(o=1;o<=m-n+1;o++)
{i1=i;o1=o;
while(i1<=i+n-1)
{if(jd[i1][o1]=='#')s[i][o]+=1;
o1+=1;
if(o1==n+o){i1++;o1=o;}
}
if(s[i][o]>max){
max=s[i][o];}}
cout<<max;}
-
-12017-05-08 12:42:03@
这不是随便乱写的题目吗。。
枚举无需搜索剪枝#include <iostream> #include <cstdio> #include <algorithm> #include <cstring> #include <iomanip> #include <cstdlib> using namespace std; char a[10005][10005]; int n,m; int main() { int ans=0; cin>>n>>m; for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) cin>>a[i][j]; } for(int i=1;i<=n-m+1;i++) for(int j=1;j<=n-m+1;j++) { int tot=0; for(int q=i;q<=i+m-1;q++) for(int p=j;p<=j+m-1;p++) if(a[q][p]=='#') tot++; ans=max(ans,tot); } cout<<ans<<endl; return 0; }
-
-12017-04-04 18:39:36@
#include <iostream>
#include <cstring>
#define inf 10000
using namespace std;
int a[inf][inf];
string s[inf];
int tot =0;
int main()
{
int m,n;
cin>>m>>n;
int i,j,p,q;
for(i=0;i<m;++i)
cin>>s[i];
for(i=0;i<m;++i)
for(j=0;j<m;++j)
if(s[i][j]=='#')
a[i][j] = 1;
int sum = 0;
for(i=0;i+n<=m;++i)
for(j=0;j+n<=m;++j)
{
sum = 0;
for(p=i;p<i+n;++p)
for(q=j;q<j+n;++q)
if(a[p][q])
sum++;
if(sum>tot)
tot = sum;
}
cout<<tot<<endl;
} -
-12017-02-07 08:37:00@
#include<iostream> #include<cstdio> #include<cstdlib> #include<cmath> #include<cstring> #include<algorithm> using namespace std; char c; int m,n,ans,k; int a[11][11]; inline int sss(int i,int j) { int b=a[i][j]; if(i>=n)b-=a[i-n][j]; if(j>=n)b-=a[i][j-n]; if(j>=n&&i>=n)b+=a[i-n][j-n]; return b; } int main() { scanf("%d%d",&m,&n); for(int i=1;i<=m;i++) for(int j=1;j<=m;j++) { a[i][j]+=(a[i-1][j]+a[i][j-1]-a[i-1][j-1]); cin>>c; if(c=='#')a[i][j]++; } if(n>=m) { printf("%d",a[m][m]); return 0; } for(int i=n;i<=m;i++) for(int j=n;j<=m;j++) { ans=max(ans,sss(i,j)); if(ans==n*n)break; } printf("%d",ans); return 0; }
-
-12016-11-03 15:39:31@
数据范围不是10000,而是8,即m,n<=8
-
-12016-10-30 22:53:33@
#include<iostream>
#include<cstdio>
#include<cstring>
#define N 10001
using namespace std;
char a[N][N];
int tot,n,m,maxn;int search(int i,int j)
{
tot = 0;
for(int ai=0;ai<n;ai++)
for(int aj=0;aj<n;aj++)
{
if(a[i+ai][j+aj]=='#')
tot++;
maxn=maxn>tot?maxn:tot;}
if(i==j==m)
{
return maxn;
}
if(j+1<=m&&i<=m)
search(i,j+1);
if(i+1<=m&&j<=m)
search(i+1,j);
}
int main()
{
cin>>m>>n;
memset(a,'.',sizeof(a));
for(int i=1;i<=m;i++)
for(int j=1;j<=m;j++)
{
cin>>a[i][j];
}
maxn = 0;for(int i=1;i<=m;i++)
for(int j=1;j<=m;j++)
{search(1,1);
}printf("%d\n",maxn);
return 0;
}