結果

問題 No.3703 回転 (Rotation)
コンテスト
ユーザー tomorunn
提出日時 2026-09-07 21:18:29
言語 C++23(gcc16)
(gcc 16.1.0 + boost 1.92.0 + ACL)
コンパイル:
g++-16 -O2 -lm -std=c++23 -Wuninitialized -DONLINE_JUDGE -o a.out _filename_
実行:
./a.out
結果
AC  
実行時間 16 ms / 2,000 ms
+ 944µs
コード長 5,695 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 4,900 ms
コンパイル使用メモリ 394,728 KB
実行使用メモリ 6,528 KB
最終ジャッジ日時 2026-09-10 15:34:25
合計ジャッジ時間 7,163 ms
ジャッジサーバーID
(参考情報)
judge1_0 / judge2_0
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other AC * 20
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

#ifndef ONLINE_JUDGE
#define _GLIBCXX_DEBUG
#endif
#include <bits/stdc++.h>
#include <atcoder/all>
using namespace std;
using namespace atcoder;
using ll = long long;
using ld = long double;
using ull = unsigned long long;
using vi =vector<int>;
using vd =vector<double>;
using vld = vector<ld>;
using vs =vector<string>;
using vb =vector<bool>;
using vl =vector<ll>;
using vc =vector<char>;
using vtl = vector<tuple<ll,ll,ll>>;
using vvi =vector<vector<int>>;
using vvs =vector<vector<string>>;
using vvc =vector<vector<char>>;
using vvb =vector<vector<bool>>;
using vvl =vector<vector<ll>>;
using vvtl = vector<vtl>;
using vvvl=vector<vector<vector<ll>>>;
using sl =stack<ll>;
using pl=pair<ll,ll>;
using vpl=vector<pl>;
using tl = tuple<ll, ll, ll>;
#define rep(i,l,r)for(ll i=(l);i<(r);i++)
#define YES cout<<"Yes"<<endl
#define NO cout<<"No"<<endl
#define YN {cout<<"Yes"<<endl;}else{cout<<"No"<<endl;}// if(a==b)YN;
#define dame cout<<-1<<endl

template<class... T>void IN(T&...a){(cin>>...>>a);}
template<class... T>void OUT(const T&... b){string c="";(cout<<...<<(cout<<exchange(c,' '),b));cout<<'\n';}
#define LL(...) ll __VA_ARGS__;IN(__VA_ARGS__)
#define ST(...) string __VA_ARGS__;IN(__VA_ARGS__)

double pi = 3.141592653589793238;

const ll MAX = 3000000;
const ll MOD = 998244353;

long long fac[MAX], finv[MAX], inv[MAX];

// テーブルを作る前処理
void COMinit() {
    fac[0] = fac[1] = 1;
    finv[0] = finv[1] = 1;
    inv[1] = 1;
    for (int i = 2; i < MAX; i++){
        fac[i] = fac[i - 1] * i % MOD;
        inv[i] = MOD - inv[MOD%i] * (MOD / i) % MOD;
        finv[i] = finv[i - 1] * inv[i] % MOD;
    }
}

// 二項係数計算
long long COM(int n, int k){
    if (n < k) return 0;
    if (n < 0 || k < 0) return 0;
    return fac[n] * (finv[k] * finv[n - k] % MOD) % MOD;
}

//2進数
vl Binary(int x) {
    vl bit(10);
    for (int i = 0; i < 10; i++) {
        int Div = (1 << i);
        bit[i] = (x / Div) % 2;
    }
    return bit;
}

//DP
template<class T> inline bool chmin(T& a, T b) {
    if (a > b) {
        a = b;
        return true;
    }
    return false;
}
template<class T> inline bool chmax(T& a, T b) {
    if (a < b) {
        a = b;
        return true;
    }
    return false;
}


ll input(){
    ll x;
    cin>>x;
    return x;    
}

ll ketasuu(ll n){
    if(n==0) return 1;
    return floor(log10(abs(n)))+1;
}

ll gcd(ll a,ll b){
    if(a==0) return b;
    return gcd(b%a,a);
}

ll lcm(ll a,ll b){
    return a/gcd(a,b)*b;
}


ll nsqrt(ll n) {
    ll ok=0, ng=40000000001LL;
    while(ng-ok>1){
        ll mid=(ok+ng)/2;
        if(mid<=n/mid) ok=mid;
        else ng=mid;
    }
    return ok;
}


ll vp(ll N,ll p){
    ll ans=0;
    while(N%p==0){
        ans++;
        N/=p;
    }
    return ans;
}

ll d(ll N){
    ll M=nsqrt(N);
    ll ans=1,cnt=0;
    rep(i,2,M+1){
        if(N%i==0){
            N/=i;
            i--;
            cnt++;
        }
        else{
            ans*=(cnt+1);
            cnt=0;
        }
    }
    if(N>M) ans*=2;
    return ans;
}

//N以下の素数の個数
ll pcnt(ll N){
    if(N==1) return 0;
    else{
        vl p;
        ll cnt=1;
        p.push_back(2);
        rep(i,3,N+1){
            bool ok=true;
            rep(j,0,p.size()){
                if(i%p[j]==0) {ok=false;break;}
            }
            if(ok==true) {p.push_back(i);cnt++;}
        }
        return cnt;    
    }
}

//素因数分解
map<ll, ll> prime_fact(ll N){
    ll M = nsqrt(N);
    ll cnt = 0;
    map<ll, ll> mp;
    rep(i,2,M+1){
        if(N % i == 0){
            cnt++;
            N /= i;
            i--;
        }
        else if(cnt != 0){
            mp[i] = cnt;
            cnt = 0;
        }
    }
    if(N != 1) mp[N] = 1;

    return mp;
}

ll modpow(ll a,ll b,ll m){//a^b%m
    if(b==0) return 1;
    if(b%2==0){
        ll x=modpow(a,b/2,m);
        return x*x%m;
    }
    ll y=modpow(a,b-1,m);
    return (y*(a%m))%m;
}

//エラトステネスの篩
vector < bool > isprime;
//返り値は素数のリスト。
vector < ll > Era(int n) {
 isprime.resize(n, true);
 vector < ll > res;
 isprime[0] = false;
 isprime[1] = false;
 for(ll i = 2; i < n; ++i) isprime[i] = true;
 for(ll i = 2; i < n; ++i) {
  if(isprime[i]) {
   res.push_back(i);
   for(ll j = i * 2; j < n; j += i) isprime[j] = false;
  }
 }
 return res;
}

//等比級数
ll tk(ll A,ll X,ll M){//1+a+...+a^{X-1}%M
    if(X==1) return 1%M;
    if(A==1) return X%M;
    else{
        if(X%2==0){
            return (tk(A,X/2,M)*(1+modpow(A,(X/2),M)))%M;
        }
        else{
            return (tk(A,X-1,M)+modpow(A,X-1,M))%M;
        }
    }
}

void gcin(vvl &G, ll M){
    rep(i,0,M){
        ll u, v; cin >> u >> v;
        u--; v--;
        G[u].emplace_back(v);
        G[v].emplace_back(u);
    }
}

void vcin(vl &A, ll N){
    rep(i,0,N)
    cin >> A[i];
}

bool within(ll H, ll W, ll nx, ll ny){
    return (0 <= nx && nx < H && 0 <= ny && ny < W);
    
}

using mint=modint998244353;
using vm=vector<mint>;
using vvm=vector<vm>;
using vvvm=vector<vvm>;
ll INF = 1e18;

ll dx[8]={1,1,0,-1,-1,-1,0,1};
ll dy[8]={0,1,1,1,0,-1,-1,-1};

ll sdx[6]={-1,-1,0,0,1,1};
ll sdy[6]={-1,0,-1,1,0,1};

//cinを忘れない
//変数名の重複に注意
//modは取りましたか?
//変数の宣言場所
//0-indexedか1-indexedか
//境界の等号
//配列の宣言(push_back前提じゃないか)
//無向か有向か
//型を間違えない
//グリッドで縦と横を逆にしない
//__int128_tのキャスト
int main(void) {
    LL(H, W);
    vs S(H);
    rep(i,0,H) cin >> S[i];
    rep(j,0,W){
        for(ll i = H - 1; i >= 0; i--){
            cout << S[i][j];
        }
        cout << endl;
    }

    return 0;
}
0