寝癖頭の解法

小学生の目線から、勉強中の覚え書きを投稿、更新していきます。

アルゴ式(beta版): C++による「さまざまなデータ構造 (#毎日アルゴ式)」二次元配列など

アルゴ式(beta版)の「さまざまなデータ構造 (#毎日アルゴ式)」二次元配列など からの出典です。
algo-method.com
アルゴ式とは...
>・プログラミングや情報科学をコツコツ学べる「教科書」
>・学んだ内容をゲーム感覚で大量に実践できる「練習問題」
>の2つで構成される、Web上で完結した学習コンテンツです。

C++による「さまざまなデータ構造 (#毎日アルゴ式)」二次元配列など

僕が作成、提出したコードは、以下のとおりです。

Q1. 間違い探し

algo-method.com

/*
C++による「さまざまなデータ構造 (#毎日アルゴ式)」二次元配列など
Q1. 間違い探し
https://algo-method.com/tasks/934
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
using ll=long long;
int main(void){
    ll cnt=0;
    ll h,w;
    cin>>h>>w;
    vector<string> s(h),t(h);
    for(ll i=0;i<h;i++){
        cin>>s[i];
    }
    for(ll i=0;i<h;i++){
        cin>>t[i];
    }
    for(ll i=0;i<h;i++){
        for(ll j=0;j<w;j++){
            if(s[i][j]!=t[i][j]){
                cnt++;
            }
        }
    }
    cout<<cnt<<endl;
    return 0;
}
Q5. 配列の配列

algo-method.com

/*
C++による「さまざまなデータ構造 (#毎日アルゴ式)」二次元配列など
Q5. 配列の配列
https://algo-method.com/tasks/837
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
using ll=long long;
int main(void){
    ll n,cnt=0; string t;
    cin>>n>>t;
    for(ll i=0;i<n;i++){
        ll m;
        cin>>m;
        for(ll j=0;j<m;j++){
            string s;
            cin>>s;
            if(s==t){
                cnt++;
            }
        }
    }
    cout<<cnt<<endl;
    return 0;
}
Q6. SNS クエリ

algo-method.com

/*
C++による「さまざまなデータ構造 (#毎日アルゴ式)」二次元配列など
Q6. SNS クエリ
https://algo-method.com/tasks/838
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
using ll=long long;
int main(void){
    ll n,q;
    cin>>n>>q;
    vector<vector<ll>> tf(n,vector<ll>(n,0));
    for(ll i=0;i<q;i++){
        ll num;
        cin>>num;
        if(num==0){
            ll x,y;
            cin>>x>>y;
            tf[x][y]=1;
        }else if(num==1){
            ll z;
            cin>>z;
            vector<ll> v;
            for(ll j=0;j<n;j++){
                if(tf[j][z]){
                    v.push_back(j);
                }
            }
            if(v.size()==0){
                cout<<"No"<<endl;
            }else{
                for(ll j=0;j<v.size();j++){
                    cout<<v[j]<<(j==v.size()-1 ? "\n" : " ");
                }
            }
        }
    }
}
Q2. 二次元地図

algo-method.com

/*
C++による「さまざまなデータ構造 (#毎日アルゴ式)」二次元配列など
Q2. 二次元地図
https://algo-method.com/tasks/840
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
using ll=long long;
int main(void){
    ll h,w;
    cin>>h>>w;
    vector<vector<ll>> vv(h,vector<ll>(w,0));
    for(ll i=0;i<h;i++){
        string s;
        cin>>s;
        for(ll j=0;j<w;j++){
            if(s[j]=='#'){
                vv[i][j]=1;
            }else{
                vv[i][j]=0;
            }
        }
    }
    ll p,q;
    cin>>p>>q;
    ll ans=0;
    for(ll i=0;i<h;i++){
        ans+=vv[i][q];
    }
    for(ll i=0;i<w;i++){
        ans+=vv[p][i];
    }
    ans-=vv[p][q];
    cout<<ans<<endl;
    return 0;
}
Q7. 二次元地図クエリ

algo-method.com

/*
C++による「さまざまなデータ構造 (#毎日アルゴ式)」二次元配列など
Q7. 二次元地図クエリ
https://algo-method.com/tasks/842
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
using ll=long long;
int main(void){
    ll h,w;
    cin>>h>>w;
    vector<vector<ll>> vv(h,vector<ll>(w,0));
    for(ll i=0;i<h;i++){
        string s;
        cin>>s;
        for(ll j=0;j<w;j++){
            if(s[j]=='#'){
                vv[i][j]=1;
            }
        }
    }
    vector<ll> v1(h,0),v2(w,0);
    for(ll i=0;i<h;i++){
        for(ll j=0;j<w;j++){
            v1[i]+=vv[i][j];
        }
    }
    for(ll j=0;j<w;j++){
        for(ll i=0;i<h;i++){
            v2[j]+=vv[i][j];
        }
    }
    ll Q;
    cin>>Q;
    for(ll i=0;i<Q;i++){
        ll p,q;
        cin>>p>>q;
        ll out=v1[p]+v2[q]-vv[p][q];
        cout<<out<<endl;
    }
    return 0;
}
Q4. ライツアウト (1)

algo-method.com

/*
C++による「さまざまなデータ構造 (#毎日アルゴ式)」二次元配列など
Q4. ライツアウト (1)
https://algo-method.com/tasks/841
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
using ll=long long;
ll dx[5]={0,1,0,-1,0};
ll dy[5]={0,0,1,0,-1};
int main(void){
    ll h,w;
    cin>>h>>w;
    vector<vector<ll>> vv(h,vector<ll>(w,0));
    for(ll i=0;i<h;i++){
        string s;
        cin>>s;
        for(ll j=0;j<w;j++){
            if(s[j]=='#'){
                vv[i][j]=1;
            }
        }
    }
    ll Q;
    cin>>Q;
    for(ll i=0;i<Q;i++){
        ll num,p,q;
        cin>>num>>p>>q;
        if(num==0){
            for(ll j=0;j<5;j++){
                ll x=p+dx[j],y=q+dy[j];
                if((0<=x && x<h) && (0<=y && y<w)){
                    vv[x][y]=1-vv[x][y];
                }
            }
        }else{
            ll ans=0;
            for(ll j=0;j<5;j++){
                ll x=p+dx[j],y=q+dy[j];
                if((0<=x && x<h) && (0<=y && y<w)){
                    ans+=vv[x][y];
                }
            }
            cout<<ans<<endl;
        }
    }
    return 0;
}
Q8. ライツアウト (2)

algo-method.com

/*
C++による「さまざまなデータ構造 (#毎日アルゴ式)」二次元配列など
Q8. ライツアウト (2)
https://algo-method.com/tasks/843
提出コードの解答例
https://neguse-atama.hatenablog.com
*/
#include<bits/stdc++.h>
using namespace std;
using ll=long long;
ll dx[5]={0,1,0,-1,0};
ll dy[5]={0,0,1,0,-1};
int main(void){
    ll h,w;
    cin>>h>>w;
    vector<vector<ll>> vv(h,vector<ll>(w,0));
    ll sb=0;
    for(ll i=0;i<h;i++){
        string s;
        cin>>s;
        for(ll j=0;j<w;j++){
            if(s[j]=='#'){
                vv[i][j]=1;
                sb++;
            }
        }
    }
    ll Q;
    cin>>Q;
    for(ll i=0;i<Q;i++){
        ll num;
        cin>>num;
        if(num==0){
            ll p,q;
            cin>>p>>q;
            for(ll i=0;i<5;i++){
                ll x=p+dx[i],y=q+dy[i];
                if((0<=x  && x<h) && (0<=y && y<w)){
                    sb-=vv[x][y];
                    vv[x][y]=1-vv[x][y];
                    sb+=vv[x][y];
                }
            }
        }else{
            cout<<sb<<endl;
        }
    }
    return 0;
}

設問の出典は、情報科学をコツコツ積み立てて学習できるサービス「アルゴ式(beta版)」です。
algo-method.com