C
ドラえもんのバイバインを思い出した。
#include<iostream>
#include<vector>
#include<algorithm>
#include<string>
#include<map>
#include<math.h>
#include<queue>
#include<deque>
#include<stack>
#include<cstdio>
#include<utility>
#include<set>
#include<list>
#include<cmath>
using namespace std;
using ll = long long;
using pii = pair<int, int>;
const int INF = 1e9;
int main() {
string S;
ll K;
cin >> S >> K;
int x = min((ll)S.size(), K);
for (int i = 0; i < x; ++i) {
if (S[i] != '1') {
cout << S[i] << endl;
return 0;
}
}
cout << 1 << endl;
return 0;
}
これ、
#include<iostream>
#include<vector>
#include<algorithm>
#include<string>
#include<map>
#include<math.h>
#include<queue>
#include<deque>
#include<stack>
#include<cstdio>
#include<utility>
#include<set>
#include<list>
#include<cmath>
using namespace std;
using ll = long long;
using pii = pair<int, int>;
const int INF = 1e9;
int main() {
string S;
ll s = S.size();
ll K;
cin >> S >> K;
int x = min(s, K);
for (int i = 0; i < x; ++i) {
if (S[i] != '1') {
cout << S[i] << endl;
return 0;
}
}
cout << 1 << endl;
return 0;
}
だと間違いらしい。なんでダメなのか俺にはよくわからないから誰か教えてほしい
D
#include<iostream>
#include<vector>
#include<algorithm>
#include<string>
#include<map>
#include<math.h>
#include<queue>
#include<deque>
#include<stack>
#include<cstdio>
#include<utility>
#include<set>
#include<list>
#include<cmath>
#include<stdio.h>
#include<cstdio>
using namespace std;
using ll = long long;
using pii = pair<int, int>;
using piii = pair<pii, pii>;
const int INF = 1e9 + 7;
int N, M, Q, L[200009], R[200009], X[509][509] , C[509][509] ;
int main() {
cin >> N >> M >> Q;
for (int i = 1; i <= M; ++i) {
cin >> L[i] >> R[i];
X[L[i]][R[i]]++;
}
for (int i = 1; i <= N; ++i) {
for (int j = 1; j <= N; ++j) {
C[i][j] = C[i][j - 1] + X[i][j];
}
}
for (int i = 1; i <= Q; ++i) {
int p, q; cin >> p >> q;
int sum = 0;
for (int j = p; j <= q; ++j) {
sum += C[j][q] - C[j][p - 1];
}
cout << sum << endl;
}
return 0;
}
これが普通の累積和。いもす。
二次元累積和は
#include<iostream>
#include<vector>
#include<algorithm>
#include<string>
#include<map>
#include<math.h>
#include<queue>
#include<deque>
#include<stack>
#include<cstdio>
#include<utility>
#include<set>
#include<list>
#include<cmath>
#include<stdio.h>
#include<string.h>
#include<iomanip>
using namespace std;
#define FOR(i, a, b) for (ll i = (a); i <= (b); i++)
#define REP(i, n) FOR(i, 0, n - 1)
#define NREP(i, n) FOR(i, 1, n)
using ll = long long;
using pii = pair<int, int>;
using piii = pair<pii, pii>;
const int dx[4] = { 0, -1, 1, 0 };
const int dy[4] = { -1, 0, 0, 1 };
const int INF = 1e9 + 7;
int gcd(int x, int y) {
if (x < y)swap(x, y);
if (y == 0)return x;
return gcd(y, x%y);
}
template<class T1, class T2> void chmin(T1 &a, T2 b) { if (a>b)a = b; }
template<class T1, class T2> void chmax(T1 &a, T2 b) { if (a<b)a = b; }
template<class T>
void Add(T &a, const T &b, const T &mod = 1000000007) {
int val = ((a % mod) + (b % mod)) % mod;
if (val < 0) { val += mod; }
a = val;
}
////////////////////////////////////////
int main() {
int N, M, Q;
cin >> N >> M >> Q;
int l, r;
//区間[l,r]を走る列車について考える。これを二次元平面上の(y座標,x座標)=(l,r)
//の点とみなすとこの列車を完全に含むような区間はy<=lかつr<=xの範囲全てになる
int imos[550][550];//imos[y][x]でyからxまでの区間に含まれる列車の本数
for (int i = 0; i < 550; ++i) {
for (int j = 0; j < 550; ++j) {
imos[i][j] = 0;
}
}
for (int i = 0; i < M; ++i) {
cin >> l >> r;
imos[l][r]++;
}
for (int i = 510; i >0; --i) {
for (int j = 0; j <510; ++j) {
imos[i - 1][j] += imos[i][j];
}
}
for (int i = 0; i < 510; ++i) {
for (int j = 0; j < 510; ++j) {
imos[i][j + 1] += imos[i][j];
}
}
for (int i = 0; i < Q; ++i) {
cin >> l >> r;
cout << imos[l][r] << endl;
}
return 0;
}