ABC F 求条
  • 板块灌水区
  • 楼主1234567890sjx
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/6/15 23:14
  • 上次更新2024/6/16 10:55:57
查看原帖
ABC F 求条
1013955
1234567890sjx楼主2024/6/15 23:14
#pragma GCC optimize(3)
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=1000100,mod=998244353;
char mp[5010][5010];
//设f[i][j][k]表示现在是第i个操作, 当前位于(j,k)
signed main(){
    int n,m,k;
    cin>>n>>m>>k;
    int duan=n,chang=n*m;
    if(duan<=k&&k<=chang&&k%2==chang%2){
        for(int i=1;i<=2*n+1;i++)
        for(int j=1;j<=2*m+1;j++){
            if(i==1||j==1||i==2*n+1||j==2*m+1)mp[i][j]='+';
            else if(i%2==0&&j%2==0)mp[i][j]='o';
            else if(i%2&&j%2==0)mp[i][j]='-';else if(j%2&&i%2==0)mp[i][j]='|';
            else mp[i][j]='+';
        }
        vector<pair<int,int>>link;
        int x=1,y=1,now=1;
        k--;
        while(true){
            int sheng=n-x+1;
            link.emplace_back(x*2,y*2);
            if(sheng==k+1){
                x++;
                while(x<=n){
                    link.emplace_back(x*2,y*2);
                    x++;
                }
                break;
            }
            y+=now;
            if(now==1&&y>m)now=-1,y=m,x++;
            else if(now==-1&&y<=0)now=-1,y=1,x++;
            k--;
            if(k<-1)throw;
        }
        assert(link.size());
        auto[q1,q2]=link.front();
        auto[p1,p2]=link.back();
        q1--,p1++;mp[q1][q2]='S',mp[p1][p2]='G';
        for(int i=1;i<link.size();i++){
            auto[f1,f2]=link[i-1];
            auto[n1,n2]=link[i];
            if(f2==n2+2)mp[f1][n2+1]='.';
            else if(f2==n2-2)mp[f1][n2-1]='.';
            else if(f1==n1+2)mp[f1-1][n2]='.';
            else mp[f1+1][n2]='.';
        }
        cout<<"Yes\n";
        for(int i=1;i<=2*n+1;i++,cout<<'\n')
        for(int j=1;j<=2*m+1;j++)cout<<mp[i][2*m-j+2];
    }else cout<<"No\n";
}
2024/6/15 23:14
加载中...