首页 > 其他分享 >Educational Codeforces Round 118 E

Educational Codeforces Round 118 E

时间:2023-01-03 01:44:05浏览次数:67  
标签:Educational int 复杂度 Codeforces nx ny && 118

E. Crazy Robot

题链
很轻松能发现是bfs
我们肯定是从L出发 然后看他们该点可以去的地方是不是只有一条 并且旁边挨着'+'
但是打完一交发现wa3
3 2
.#
..
L.
发现我们会先扩展L上面那个点
然后之后为了保证时间复杂度就不会再扩展了
但实际上 我们当且仅当一个点变成了‘+’之后
她旁边没有扩展过的点才有可能变成‘+’ 因为我们的必要条件就是旁边必须挨着‘+’才行
这样我们每次变成+才会放进去4个 保证了时间复杂度 并且不会发现上面那种情况了

void solve(){
    int n,m;cin>>n>>m;
    char a[n+1][m+1];
    int x,y=0;
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            cin>>a[i][j];
            if(a[i][j]=='L'){
                x=i,y=j;
            }
        }
    }
    queue<pair<int,int>>q;
    int dx[4]={0,1,0,-1},dy[4]={1,0,-1,0};
    for(int i=0;i<4;i++){
        int nx=dx[i]+x,ny=dy[i]+y;
        if(nx>=1&&nx<=n&&ny>=1&&ny<=m){
            q.push({nx,ny});
        }
    }
    while(q.size()){
        auto [x,y]=q.front();
        q.pop();
        if(a[x][y]=='#'||a[x][y]=='L')continue;
        int t=0,flag=0;
        for(int i=0;i<4;i++){
            int nx=dx[i]+x,ny=dy[i]+y;
            if(nx>=1&&nx<=n&&ny>=1&&ny<=m){
                if(a[nx][ny]!='#'){
                    t++;
                }
                if(a[nx][ny]=='L'){
                    flag++;
                }
            }
        }
        if(t-flag<=1&&flag){
            a[x][y]='L';
            for(int i=0;i<4;i++){
                int nx=dx[i]+x,ny=dy[i]+y;
                if(nx>=1&&nx<=n&&ny>=1&&ny<=m){
                    q.push({nx,ny});
                }
            }
        }
    }
    for(int i=1;i<=n;i++){
        for(int j=1;j<=m;j++){
            if(i==x&&j==y)cout<<'L';
            else{
                if(a[i][j]=='L')cout<<"+";
                else cout<<a[i][j];
            }
        }
        cout<<endl;
    }
    cout<<endl;
}

标签:Educational,int,复杂度,Codeforces,nx,ny,&&,118
From: https://www.cnblogs.com/ycllz/p/17020948.html

相关文章

  • Educational Codeforces Round 114 D
    D.TheStrongestBuildtilian发现n只有10啊m也是1e5我们考虑最好的状态肯定就是大家都选最大的时候但是如果被禁用掉了的话咋办呢我们肯定贪心的去减少一个最小的地......
  • Codeforces 1373 D. Maximum Sum on Even Positions 做题记录(单调队列)
    因为只能转一个子数组,很显然转长度为奇数的子数组,对最大化答案是没有意义的(偶数位的数字之和不会变化)。因此只考虑转偶长度的子数组。转动偶数长度的子数组,相当于......
  • Educational Codeforces Round 9
    EducationalCodeforcesRound9https://codeforces.com/contest/6323/6:ABCA.GrandmaLauraandApples模拟#include<bits/stdc++.h>#defineintlonglongusi......
  • Codeforces Good Bye 2022 CF 1770 F Koxia and Sequence 题解
    题目链接注意题目要求的是所有好序列的所有元素的XOR之和的XOR之和。我一开始以为是所有XOR之和的加法和导致不知道官方题解在讲什么。假设我们枚举一个位置\(1\lei\le......
  • Codeforces Round #781 (Div. 2)C
    CodeforcesRound#781(Div.2)CC我之前没有看懂题目,我现在把我认为正确的题意描述出来有一棵树,一开始都没有病毒什么的,但是我们需要把这一棵树里的所有节点变成有病......
  • Codeforces 1389 B. Array Walk 做题记录(DP)
    (纯种的DP还是做得有点苦痛,调了好久。太菜了。)大概就是第一层枚举返回几次,第二层遍历一遍$1~n$。#include<bits/stdc++.h>usingnamespacestd;constintm......
  • Codeforces Round #812 (Div. 2)
    题目链接A核心思路:其实我们需要挖掘出一个性质,那就是任何一个答案都必然是个长方形。所以我们只需要计算长方形的一个周长就好了。为什么有这样一个性质呢,因为我们发现任......
  • 【LeeCode】118. 杨辉三角
    【题目描述】给定一个非负整数numRows,生成「杨辉三角」的前numRows行。在「杨辉三角」中,每个数是它左上方和右上方的数的和。​​https://leetcode.cn/problems/pascals-......
  • /home/software/python/Modules/_ctypes/_ctypes.c:118:17: fatal error: ffi.h: No s
     001、python3.11编译报错/home/software/python/Modules/_ctypes/_ctypes.c:118:17:fatalerror:ffi.h:Nosuchfileordirectory  002、解决方法[root@PC......
  • Codeforces Round 789 div2 A-E题解 & 处理手法思考
    A.TokitsukazeandAllZeroSequence这题给一个数列,每次操作对于两个不相同的数字可以吧大的变成min,两个相同的话一个变为0问最少操作多少次能将整个数组变为0首......