第 66 场双周赛


5922. 统计出现过一次的公共字符串

哈希

 unordered_mapm1,m2;
    int countWords(vector& words1, vector& words2) {
        for(int i=0;i

5923. 从房屋收集雨水需要的最少水桶数

先放两边有屋子的,再放只有一边有屋子的,判断还有没有无法接到雨水的房子。

int minimumBuckets(string s) {
        int n=s.size();
        int res=0;
        for(int i=1;i=0&&s[i-1]=='.')
                {
                     res++;
                    s[i]=s[i-1]='X';
                }               
            }
        }
        for(int i=0;i

网格图中机器人回家的最小代价

从起点到终点的代价按哈密顿距离走是固定的

 int minCost(vector& startPos, vector& homePos, vector& rowCosts, vector& colCosts) {
     
        int res=0;
        if(startPos[0]homePos[0])
        {
            for(int i=startPos[0]-1;i>=homePos[0];i--)res+=rowCosts[i];
        }
        if(startPos[1]homePos[1]) for(int i=startPos[1]-1;i>=homePos[1];i--)res+=colCosts[i];
        
        return res;
    }

5925. 统计农场中肥沃金字塔的数目

前缀和

int work(int x,int y,vector>& c)
    {
         int n=c.size()-1,m=c[0].size()-1;
        int sum=0,d=1;
        for(int i=x;im)break;
            if(c[i][y+d]-c[i][y-d-1]==2*d+1)
            {
                sum++;
                d++;
            }
            else break;
        }
        return sum;
    }
    int countPyramids(vector>& g) {
        int n=g.size(),m=g[0].size();
        vectorw(m+1,0);
        vector>s(n+1,w);
         vector>G(n,w);
        for(int i=0;i=0;i--)
        {
            for(int j=m-1;j>=0;j--)
            {
               G[x][y++]=g[i][j];
               if(y==m)
               {
                   x++,y=0;
               }
            }
           
        }
       
         for(int i=0;i