首页 > 其他分享 >csp:202104-2:邻域均值

csp:202104-2:邻域均值

时间:2023-03-19 23:56:56浏览次数:51  
标签:605 int 复杂度 邻域 这道题 202104 csp

这道题可以用最简单的方式:四层遍历暴力求解,不过稍微计算一下时间复杂度就会发现这绝对超时。

实际上,这道题略微有一点滑动窗口的思想,通过不断更新窗口来求解,可以将算法的时间复杂度降低到题目要求。

100分代码:

#include<iostream>

using namespace std;

int n,L,r,t;
int A[605][605];

int main(){
  ios::sync_with_stdio(0);
  cin.tie(0);
  cin>>n>>L>>r>>t;
  for(int i=0;i<n;i++){
    for(int j=0;j<n;j++){
      cin>>A[i][j];
    }
  }
  int res=0;
  for(int i=0;i<n;i++){
    int neighbor=-1;
    int min_x,min_y,max_x,max_y;
//    int pre_min_x,pre_min_y,pre_max_x,pre_max_y;
    for(int j=0;j<n;j++){
//      pre_min_x=min_x;
//      pre_min_y=min_y;
//      pre_max_x=max_x;
//      pre_max_y=max_y;
      
      min_y=max(0,i-r);
      max_y=min(n-1,i+r);
      min_x=max(0,j-r);
      max_x=min(n-1,j+r);
      
      if(neighbor>=0){
        if(j+r<=n-1){// 看是否新引入一列A 
          for(int y=min_y;y<=max_y;y++){
            neighbor+=A[y][max_x];
          } 
        } 
        if(min_x>0){// 看是否需要删掉旧的一列A
          for(int y=min_y;y<=max_y;y++){
            neighbor-=A[y][min_x-1];
          } 
        }
        
      }else{ // 重新计算neighbor 
        neighbor=0;
        for(int a1=min_y;a1<=max_y;a1++){
          for(int a2=min_x;a2<=max_x;a2++){
            neighbor+=A[a1][a2];
          }
        } 
      }
      if(neighbor<=t*(max_x-min_x+1)*(max_y-min_y+1)){
        res++;
      }
//      cout<<neighbor<<' ';
    } 
//    cout<<endl;
  }
  cout<<res;
}

标签:605,int,复杂度,邻域,这道题,202104,csp
From: https://www.cnblogs.com/dykkk/p/17234890.html

相关文章

  • csp:202109-2:非零段划分
    这道题乍看之下感觉很简单,但是想到的确实O(n^2)的算法,直接超时。只要在暴力算法的基础上考虑到每趟遍历的共性,改进一下,就能通过了!下面是我的100分答案:#include<iostream......
  • csp:202206-3:角色授权
    这一题我认为,难就难在处理输入和定义数据结构。只要数据结构定义对了,那么后面的操作就很简单了。附上正确代码:#include<iostream>#include<string>#include<unordered_s......
  • csp202209-2
    题目:计算机软件能力认证考试系统01背包问题#include<bits/stdc++.h>usingnamespacestd;inta[35];intdp[300005];intmain(){intn,x;cin>>n>>x;......
  • csp201612-4
    题目:计算机软件能力认证考试系统区间DP为了使霍夫曼编码变成字典序,只需要将挑选顺序改为每次都选择相邻的即可每次合并都是累加合并字母频数*1,等同于霍夫曼编码的一单......
  • csp201612-2
    题目:计算机软件能力认证考试系统#include<bits/stdc++.h>usingnamespacestd;doubleT[10]={0,45,345,1245,7745,13745,22495};doubler[10]={3500,5000,8000,12500,......
  • CSP-J/S2022游记(寄)
    Day-29国庆假期开始了,跟clq大佬一起准备29号的复赛Day-23这个国庆每天早上89点去机房下午56点回家,前面五天做了不少题后面两天就开始摆烂了(写作业去了)也重新把自己......
  • csp201703-2
    这道题暴力能过,最离谱的是,我提交了,通过了100分,返回来看一眼代码发现我的数组只开了a[10].....这数据给的太随意了吧#include<bits/stdc++.h>usingnamespacestd;inta......
  • 在C#的csproj项目中添加平台检测
      其实需求也很简单,现在.NET项目也能跨平台了,我的项目需要使用python执行一个post_build.py,所以需要在项目中添加PostBuild。所以最初,我添加了这样一个PostBuild:<Tar......
  • 山东csp-j2022 试题答案及视频讲解
    山东csp-j2022试题答案及视频讲解T319771植树节(planting)山东CSP-J2022入门组1题目链接:https://www.luogu.com.cn/problem/T319771题目讲解:#include<iostream>#inc......
  • csp201709-2
    题目:计算机软件能力认证考试系统直接对时间进行枚举,本以为会超时,没想到过了,过了就过了、、 #include<bits/stdc++.h>usingnamespacestd;set<int>keep[10105];se......