abc 084　エラトステネスの篩　素数判定

B
Atcoder国では、郵便番号は A+B+1 文字からなり、A+1 文字目はハイフン -、それ以外の全ての文字は 0 以上 9 以下の数字です。
文字列 S が与えられるので、Atcoder国の郵便番号の形式を満たすかどうか判定してください。
制約
1≦A,B≦5
|S|=A+B+1
S は 0 以上 9 以下の数字、およびハイフン - からなる

```
#include<iostream>
#include<string>
using namespace std;
int main() {
	int A, B;
	string S;
	cin >> A >> B;
	cin >> S;
	for (int i = 0; i < A; ++i) {
		if (!('0' <= S[i] && S[i] <= '9')) {
			cout << "No";
			return 0;
		}
	}
	if (S[A] != '-') {
		cout << "No";
		return 0;
	}
	for (int i = A + 1; i < A + B + 1; ++i) {
		if (!('0' <= S[i] && S[i] <= '9')) {
			cout << "No";
			return 0;
		}
	}
	cout << "Yes";
	return 0;
}
```
C
Atcoder国に、 1 本の東西方向に走る鉄道が完成しました。
この鉄道には N 個の駅があり、西から順に 1,2,…,N の番号がついています。
明日、鉄道の開通式が開かれます。
この鉄道では、1≦i≦N−1 を満たす全ての整数 i に対して、駅 i から駅 i+1 に、Ci 秒で向かう列車が運行されます。ただし、これら以外の列車は運行されません。
駅 i から駅 i+1 に移動する列車のうち最初の列車は、開通式開始 Si 秒後に駅 i を発車し、その後は Fi 秒おきに駅 i を発車する列車があります。
また、Si は Fi で割り切れることが保証されます。
つまり、A％B で A を B で割った余りを表すとき、Si≦t,t％Fi=0 を満たす全ての t に対してのみ、開通式開始 t 秒後に駅 i を出発し、開通式開始 t+Ci 秒後に駅 i+1 に到着する列車があります。
列車の乗り降りにかかる時間を考えないとき、全ての駅 i に対して、開通式開始時に駅 i にいる場合、駅 N に到着できるのは最も早くて開通式開始何秒後か、答えてください。
制約
1≦N≦500
1≦Ci≦100
1≦Si≦105
1≦Fi≦100
Si％Fi=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() {
	int N;
	int C[510], S[510], F[510];
	cin >> N;
	for (int i = 0; i < N-1; ++i) {
		cin >> C[i] >> S[i] >> F[i];
	}
	for (int i = 0; i < N; ++i) {
		int t = 0;
		for (int j = i; j < N - 1; ++j) {
			if (t < S[j]) {
				t = S[j];
			}
			else if ((t-S[j])%F[j]==0);
			else {
				t = t + F[j] - (t-S[j])% F[j];
			}
			t += C[j];
		}
		cout << t << 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<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 ll dx[4] = { 0, -1, 1, 0 };
const ll 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);
}
////////////////////////////////////////
int Q;
int l[100100], r[100100];
int arr[100100];
void eratosthenes() {
	arr[0] = 0;
	arr[1] = 0;
	for (int i = 2; i <= 100010; ++i) {
		arr[i] = 1;
	}
	for (int i = 2; i <= sqrt(100100); ++i) {
		if (arr[i]) {
			for (int j = 0; i *(j+2) <= 100010; ++j) {
				arr[i*(j+2)] = 0;
			}
		}
	}
}
int main() {
	cin >> Q;
	int count[100100];
	count[0] = 0;
	count[1] = 0;
	eratosthenes();
	for (int i = 1; i < 100100; i++) {
		if (arr[i]==1 && arr[(i + 1) / 2]==1) {
			count[i] = count[i - 1] + 1;
		}
		else {
			count[i] = count[i - 1];
		}
	}
	int ans[100100];
	for (int i = 0; i < Q;++i) {
		int l, r;
		cin >> l >> r;
		ans[i] = count[r] - count[l - 1];
	}
	for (int i = 0; i < Q; ++i) {
		cout << ans[i] << endl;
	}
	return 0;
}
```