A. Decision Making
A题就是一句话的题目,比较str[len/2]和str[len/2-1]即可,不同NOT,反之DO
代码:
#include <iostream> #include <cstdio> #include <string> #include <string.h> #include <map> #include <vector> #include <cstdlib> #include <algorithm> #include <cmath> #include <queue> #include <set> #include <stack> #include <functional> #include <fstream> #include <sstream> #include <iomanip> #include <numeric> #include <cassert> #include <bitset> #include <stack> #include <ctime> #include <list> #define INF 0x7fffffff #define max3(a,b,c) (max(a,b)>c?max(a,b):c) #define min3(a,b,c) (min(a,b)<c?min(a,b):c) #define mem(a,b) memset(a,b,sizeof(a)) using namespace std; int QuickMod(int a,int b,int n) { int r = 1; while(b) { if(b&1) r = (r*a)%n; a = (a*a)%n; b >>= 1; } return r; } int main() { string str; int n; scanf("%d", &n); while(n--) { cin >> str; int len = str.length(); if(str[len/2] != str[len/2 - 1]) printf("Do-it-Not\n"); else printf("Do-it\n"); } return 0; }
B. Log Books
这道题目我们做了好久,谔谔,题意出了问题。刚刚我又重新敲了一遍。就是给你白天和晚上飞行的时间。问你是否符合要求即可。就是判断区间的相交情况。按照night > sun的变换,统计飞行时间即可。
代码:
#include <iostream> #include <cstdio> #include <string> #include <string.h> #include <map> #include <vector> #include <cstdlib> #include <algorithm> #include <cmath> #include <queue> #include <set> #include <stack> #include <functional> #include <fstream> #include <sstream> #include <iomanip> #include <numeric> #include <cassert> #include <bitset> #include <stack> #include <ctime> #include <list> #define INF 0x7fffffff #define max3(a,b,c) (max(a,b)>c?max(a,b):c) #define min3(a,b,c) (min(a,b)<c?min(a,b):c) #define mem(a,b) memset(a,b,sizeof(a)) using namespace std; int QuickMod(int a,int b,int n) { int r = 1; while(b) { if(b&1) r = (r*a)%n; a = (a*a)%n; b >>= 1; } return r; } struct node { int h; int m; }; int cal(int x, int y) { return x*60 + y; } int limit1 = 3000; int limit2 = 600; int main() { int n; while(scanf("%d", &n) && n) { node sunup, sundown, flys, flye; int flag = 0; int SUMS = 0; for(int i = 0; i < n; ++i) { scanf("%d:%d%d:%d%d:%d%d:%d", &sunup.h, &sunup.m, &sundown.h, &sundown.m, &flys.h, &flys.m, &flye.h, &flye.m); int sun = 0, night = 0; int tmp1 = cal(sunup.h, sunup.m); int tmp2 = cal(sundown.h, sundown.m); int tp1 = cal(flys.h, flys.m); int tp2 = cal(flye.h, flye.m); int time = tp2 - tp1; if(time > 120) flag = 1; if(tp2 < tmp1) night += (tp2 - tp2); else if(tp2 > tmp1 && tp2 <= tmp2 && tp1 <= tmp1) { sun += (tp2 - tmp1); night += (tmp1 - tp1); } else if(tp1 >= tmp1 && tp2 <= tmp2) sun += (tp2 - tp1); else if(tp1 <= tmp2 && tp1 >= tmp1 && tp2 >= tmp2) { sun += (tmp2 - tp1); night += (tp2 - tmp2); } else if(tp1 >= tmp2) sun += (tp2 - tp1); if(sun <= night) { night = tp2 - tp1; sun = 0; } SUMS += sun; SUMS += night; } if(flag == 1) printf("NON\n"); else if(SUMS >= limit1)printf("PASS\n"); else printf("NON\n"); } return 0; }
I. Class Packing
I题就是贪心,因为当两个年纪的人数不相同的时候,限制要求是为人数少的为限制人数。所以我们就先满足低年级
人数的班数,如果不够就从上一年级借。这样一直借下去。对于六年级的就不用借了直接算就可以了。今天写晕了,
最后重写才过的:
代码:
#include <iostream> #include <cstdio> #include <string> #include <string.h> #include <map> #include <vector> #include <cstdlib> #include <algorithm> #include <cmath> #include <queue> #include <set> #include <stack> #include <functional> #include <fstream> #include <sstream> #include <iomanip> #include <numeric> #include <cassert> #include <bitset> #include <stack> #include <ctime> #include <list> #define INF 0x7fffffff #define max3(a,b,c) (max(a,b)>c?max(a,b):c) #define min3(a,b,c) (min(a,b)<c?min(a,b):c) #define mem(a,b) memset(a,b,sizeof(a)) using namespace std; int QuickMod(int a,int b,int n) { int r = 1; while(b) { if(b&1) r = (r*a)%n; a = (a*a)%n; b >>= 1; } return r; } struct node { int con; int fp; } num[7]; int main() { while(scanf("%d%d%d%d%d%d%d", &num[0].con, &num[1].con, &num[2].con, &num[3].con, &num[4].con, &num[5].con, &num[6].con)) { if(!num[0].con && !num[1].con && !num[2].con && !num[3].con && !num[4].con && !num[5].con && !num[6].con)break; num[0].fp = 20, num[1].fp = 20, num[2].fp = 20; num[3].fp = 25, num[4].fp = 25; num[5].fp = 30, num[6].fp = 30; int ans = 0; for(int i = 0; i < 7; ++i) { int tp1 = num[i].con, tp2 = num[i].fp; if(i < 6) { ans += (tp1 / tp2); if(tp1 % tp2) { ans++; int tp = tp1 % tp2; num[i+1].con -= (tp2 - tp); if(num[i+1].con < 0) num[i+1].con = 0; } } else { ans += (tp1 / tp2); if(tp1 % tp2) ans++; } } printf("%d\n", ans); } return 0; }
J. Esspe-Peasee
扩展欧几里德,求解A*x+B*y == C,给出A,B,C求出X+Y的最小值。谔谔以为贪心,欧几里德,还有那个格式需要注
意,1的时候是不需要加s的。这里估计会卡卡.
学习一个代码:
#include <iostream> #include <cstdio> #include <string> #include <string.h> #include <map> #include <vector> #include <cstdlib> #include <algorithm> #include <cmath> #include <queue> #include <set> #include <stack> #include <functional> #include <fstream> #include <sstream> #include <iomanip> #include <numeric> #include <cassert> #include <bitset> #include <stack> #include <ctime> #include <list> #define INF 0x7fffffff #define max3(a,b,c) (max(a,b)>c?max(a,b):c) #define min3(a,b,c) (min(a,b)<c?min(a,b):c) #define mem(a,b) memset(a,b,sizeof(a)) #define LL long long using namespace std; LL gcd(LL a, LL b) { return b == 0 ? a : gcd(b, a % b); } void kuozhan(LL a, LL b, LL &d, LL& x, LL& y) { if(!b) { d = a; x = 1, y = 0; } else { kuozhan(b, a % b, d, y, x); y -= x*(a / b); } } int main() { LL x, y, a, b, c, d, t; while(scanf("%lld%lld%lld", &a, &b, &c)) { if(!a && !b && !c) break; LL g = gcd(a, b); if(c % g) cout << "Unquibable!" << endl; else { a /= g, b /= g, c /= g; kuozhan(a, b, d, x, y); t = c % b; x %= b, x = (x * t) % b, x = (x + b) % b, y = (c - (x * a)) / b; if(y < 0) { printf("Unquibable!\n"); continue; } if(x == 1) { if(y == 1)printf("1 foom and 1 foob"); else printf("1 foom and %lld foobs",y); } else { if(y == 1)printf("%lld fooms and 1 foob",x); else printf("%lld fooms and ",x), printf("%lld foobs",y); } printf(" for a twob!\n"); } } return 0; }