A. Arya and Bran
水题
#include <iostream> #include <cstring> #include <cstdio> #include <algorithm> #include <queue> #include <vector> #include <iomanip> #include <math.h> #include <map> using namespace std; #define FIN freopen("input.txt","r",stdin); #define FOUT freopen("output.txt","w",stdout); #define INF 0x3f3f3f3f #define INFLL 0x3f3f3f3f3f3f3f #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 typedef long long LL; typedef pair<int, int> PII; using namespace std; int n, k; int a[105]; int main() { //FIN while(~scanf("%d%d", &n, &k)) { for(int i = 1; i <= n; i++) scanf("%d", &a[i]); int cnt = 0; int i ; int flag = 0; for(i = 1; i <= n; i++) { cnt += a[i]; if(cnt >= 8) cnt -= 8, k -= 8; else k -= cnt, cnt = 0; if(k <= 0) { flag = 1; break; } } if(flag) printf("%d ", i); else puts("-1"); } return 0; }
B. Game of the Rows
要注意很多细节....WA了好多发
#include <iostream> #include <cstring> #include <cstdio> #include <algorithm> #include <queue> #include <vector> #include <iomanip> #include <math.h> #include <map> using namespace std; #define FIN freopen("input.txt","r",stdin); #define FOUT freopen("output.txt","w",stdout); #define INF 0x3f3f3f3f #define INFLL 0x3f3f3f3f3f3f3f #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 typedef long long LL; typedef pair<int, int> PII; using namespace std; int n, k; int a[105]; int b[10]; int main() { //FIN while(~scanf("%d%d", &n, &k)) { memset(b, 0, sizeof(b)); for(int i = 1; i <= k; i++) { scanf("%d", &a[i]); int tmp = a[i]; b[4] += tmp / 4; tmp %= 4; b[2] += tmp / 2; tmp %= 2; b[1] += tmp; } //4 int k = b[4]; while(k--) { n -= 1; if(b[2] >= 2) b[2] -= 2; else if(k > 0) k--; else if(b[2] == 1 && b[1] >= 1) b[2] -= 1, b[1] -= 1; else if(b[2] == 1 && b[1] == 0) b[2] -= 1; else if(b[1] >= 2) b[1] -= 2; else if(b[1] == 1) b[1] -= 1; } if(n < 0) { printf("NO "); continue; } int for1 = n; int for1n2 = n * 3; //1and2 if(b[1] > n) b[1] -= n, for1 -= n; else for1 -= b[1], b[1] = 0; b[2] -= (for1 / 2); int tmp = b[1] + b[2]; if(tmp <= for1n2) printf("YES "); else printf("NO "); } return 0; }
C. Journey
dfs途中保存路径长度
#include <iostream> #include <cstring> #include <cstdio> #include <algorithm> #include <queue> #include <vector> #include <iomanip> #include <math.h> #include <map> using namespace std; #define FIN freopen("input.txt","r",stdin); #define FOUT freopen("output.txt","w",stdout); #define INF 0x3f3f3f3f #define INFLL 0x3f3f3f3f3f3f3f #define lson l,m,rt<<1 #define rson m+1,r,rt<<1|1 typedef long long LL; typedef pair<int, int> PII; using namespace std; const int maxn = 200000 + 5; int n; vector<int> Vec[maxn]; double dfs(int st, int ed) { int flag = 0; double cnt = 0.0; double sum = 0.0; for(int i = 0; i < Vec[st].size(); i++) { if(Vec[st][i] == ed) continue; flag = 1; cnt += 1.0; sum += dfs(Vec[st][i], st); } if(flag) return 1.0 + sum / cnt; else return 0; } int main() { //FIN scanf("%d", &n); int st, ed; for(int i = 1; i < n; i++) { scanf("%d%d", &st, &ed); Vec[st].push_back(ed); Vec[ed].push_back(st); } printf("%.15lf ", dfs(1, 0)); return 0; }