PAT (Advanced Level) Practice 模擬題ios
#include<cstdio> int main() { int N; scanf("%d",&N); int currentfloor = 0; int nextfloor; int time = 5 * N; for (int i = 0; i < N; i++){ scanf("%d", &nextfloor); if (nextfloor > currentfloor) time += 6 * (nextfloor - currentfloor); if (nextfloor < currentfloor) time += 4 * (currentfloor - nextfloor); currentfloor = nextfloor; } printf("%d", time); }
#include<iostream> #include<string> using namespace std; int main() { string oldcards[54]; string newcards[54]; for (int i = 0; i < 54; i++){ if (i < 13){ oldcards[i] = "S"; oldcards[i].append(to_string(i+1)); } else if (i < 26){ oldcards[i] = "H"; oldcards[i].append(to_string(i+1-13)); } else if (i < 39){ oldcards[i] = "C"; oldcards[i].append(to_string(i+1-26)); } else if (i < 52){ oldcards[i] = "D"; oldcards[i].append(to_string(i+1-39)); } else { oldcards[i] = "J"; oldcards[i].append(to_string(i+1-52)); } } int n; cin >> n; int order[54]; for (int i = 0; i < 54; i++) cin >> order[i]; for (int k = 0; k < n; k++){ for (int i = 0; i < 54; i++) newcards[order[i]-1] = oldcards[i]; for (int i = 0; i < 54; i++) oldcards[i] = newcards[i]; } cout << oldcards[0]; for (int i = 1; i < 54; i++){ cout << " " << oldcards[i]; } }
#include<cstdio> #include<algorithm> using namespace std; int main() { int sum = 0, N, M, a, b, temp, d; scanf("%d",&N); int distance[N+1] = {0}; for (int i = 1; i <= N; i++){ scanf("%d", &temp); sum += temp; distance[i] = sum; } scanf("%d", &M); for (int i = 0; i < M; i++){ scanf("%d%d", &a, &b); if (a > b) swap(a, b); d = distance[b-1] - distance[a-1]; printf("%d\n", min(d, sum-d)); } return 0; }
#include<cstdio> #include<stack> using namespace std; int main() { int m, n, k; scanf("%d%d%d", &m, &n, &k); for (int i = 0; i < k; i++){ int seq[n+1]; stack<int> pop; for (int j = 1; j < n+1; j++) scanf("%d", seq+j); int current = 1; for (int j = 1; j < n+1; j++){ pop.push(j); if (pop.size() > m) break; while (!pop.empty() && pop.top() == seq[current]){ pop.pop(); current++; } } if (current < n+1) printf("NO\n"); else printf("YES\n"); } return 0; }
dis[i] > i + 1
的最大 i 即爲所求#include<iostream> #include<algorithm> using namespace std; int main() { int n, i; scanf("%d", &n); int dis[n]; for (i = 0; i < n; i++) scanf("%d", &dis[i]); sort(dis, dis+n, greater<int>()); for (i = 0; i < n; i++) if (dis[i] <= i + 1) break; printf("%d\n", i); return 0; }
#include<cstdio> #include<cmath> using namespace std; int main() { int K, n; scanf("%d", &K); for (int i = 0; i < K; i++){ bool issolution = true; scanf("%d", &n); int seq[n+1] = {0}; for (int j = 1; j < n+1; j++) scanf("%d", seq+j); for (int j = 1; j < n+1 && issolution; j++){ for (int k = 1; k < j; k++){ if (seq[j] == seq[k] || abs(seq[j]-seq[k]) == abs(j-k)){ issolution = false; break; } } } printf("%s", issolution ? "YES\n" : "NO\n"); } return 0; }