LoginSignup
0
0

AtCoderで入茶を目指して勉強しています。
勉強を継続するために投稿を始めました。
もともとアカウントを作成していましたが、今年の4月から本格的に勉強を始めました。
私のアカウント
解いた問題

本日解いた問題

B - Counting Arrays

B - Counting Arrays
解答

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using vec = vector<ll>;
#define rep(i, n) for (int i = 0; i < (int)(n); i++)

int main() {
  ll n,l;
  cin >> n;
  set<vector<ll>> a; 
  rep(i,n){
    cin >> l;
    vector<ll> tmp(l);
    rep(j,l){
      cin >> tmp[j];
    }
    a.insert(tmp);
  }
  cout << a.size() << endl;
}

解法

要素が追加されるたびにすべての要素と比較をすると計算量がオーバーしてしまうためsetを用いて解く。

B - KEYENCE building

B - KEYENCE building
解答

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using vec = vector<ll>;
#define rep(i, n) for (int i = 0; i < (int)(n); i++)

int main() {
  ll n;
  cin >> n;
  vec s(n);
  rep(i,n) cin >> s[i];
  ll res = 0;
  rep(i,n) {
    bool jud = false;
    for(int j=1;j<150;j++) {
      for(int k=1;k<150;k++){
        if(s[i] == 4*j*k + 3*j + 3*k) jud = true;
      }
    }
    if(!jud) res++;
  }
  cout << res << endl;
}

解法

S=4ab+3a+3bとなるaとbを全探索し、それをn回行う。

B - Takahashi's Secret

B - Takahashi's Secret
解答

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using vec = vector<ll>;
#define rep(i, n) for (int i = 0; i < (int)(n); i++)

int main() {
  ll n, x;
  cin >> n >> x;
  vec a(n);
  for(int i=1;i<n+1;i++) cin >> a[i];
  set<ll> res;
  for(int i=1;i<n+1;i++){
    res.insert(x);
    x = a[x];
  }
  cout << res.size() << endl;
}

解法

setを用い、秘密を知っている人間を重複しないように数える。
公式の解法を見たところ重複したタイミングで終了していたがこちらでもACできた。

C - Long Sequence

C - Long Sequence

#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using vec = vector<ll>;
#define rep(i, n) for (int i = 0; i < (int)(n); i++)

int main() {
  ll n, x;
  cin >> n;
  vec a(n);
  ll sum = 0;
  rep(i,n) {
    cin >> a[i];
    sum += a[i];
  }
  cin >> x;
  ll k = x / sum;
  sum *= k;
  k *= n;
  for(int i=0;i<n;i++){
    sum += a[i];
    k++;
    if(sum > x) break;
  }
  cout << k << endl;
}

解法

まず、Aの総和sumを求めて、xをsumで割る。割ったものにnを乗算して、そこまでの項を求める。その後Aを1つずつ加算してxより大きくなったタイミングで終了する。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0