题目链接:
A:
水。
1 /* basic header */ 2 #include3 /* define */ 4 #define ll long long 5 #define dou double 6 #define pb emplace_back 7 #define mp make_pair 8 #define sot(a,b) sort(a+1,a+1+b) 9 #define rep1(i,a,b) for(int i=a;i<=b;++i)10 #define rep0(i,a,b) for(int i=a;i >1)17 /* namespace */18 using namespace std;19 /* header end */20 21 int a[4], d;22 23 int main() {24 cin >> a[1] >> a[2] >> a[3] >> d;25 sot(a, 3);26 cout << (d - (a[2] - a[1]) >= 0 ? d - (a[2] - a[1]) : 0) + (d - (a[3] - a[2]) >= 0 ? d - (a[3] - a[2]) : 0) << endl;27 return 0;28 }
B:
扫一遍完事。
1 /* basic header */ 2 #include3 /* define */ 4 #define ll long long 5 #define dou double 6 #define pb emplace_back 7 #define mp make_pair 8 #define sot(a,b) sort(a+1,a+1+b) 9 #define rep1(i,a,b) for(int i=a;i<=b;++i)10 #define rep0(i,a,b) for(int i=a;i >1)17 /* namespace */18 using namespace std;19 /* header end */20 21 int n;22 23 int main() {24 cin >> n;25 while (n--) {26 string a, b; cin >> a >> b;27 int i = 0, j = 0, aLen = a.size(), bLen = b.size();28 while (i < aLen || j < bLen) {29 if (a[i] == b[j]) i++, j++;30 else if (j && b[j] == b[j - 1]) j++;31 else break;32 }33 if (i == aLen && j == bLen) puts("YES");34 else puts("NO");35 }36 return 0;37 }
C1:
贪心。每读一个就sort一次,然后扫一遍维护ans[i]和sum。
1 /* basic header */ 2 #include3 /* define */ 4 #define ll long long 5 #define dou double 6 #define pb emplace_back 7 #define mp make_pair 8 #define sot(a,b) sort(a+1,a+1+b) 9 #define rep1(i,a,b) for(int i=a;i<=b;++i)10 #define rep0(i,a,b) for(int i=a;i >1)17 /* namespace */18 using namespace std;19 /* header end */20 21 const int maxn = 2e5 + 10;22 int n, m, a[maxn] = { 0}, b[maxn] = { 0};23 24 int main() {25 scanf("%d%d", &n, &m);26 rep0(i, 0, n) {27 cin >> a[i];28 sort(a, a + i);29 ll sum = 0;30 rep1(j, 0, i)31 if (sum + a[i] + a[j] > m) {32 b[i] = i - j;33 break;34 } else sum += a[j];35 }36 rep0(i, 0, n) printf("%d ", b[i]);37 puts("");38 return 0;39 }
C2:
贪心+枚举时间戳。
1 /* basic header */ 2 #include3 /* define */ 4 #define ll long long 5 #define dou double 6 #define pb emplace_back 7 #define mp make_pair 8 #define sot(a,b) sort(a+1,a+1+b) 9 #define rep1(i,a,b) for(int i=a;i<=b;++i)10 #define rep0(i,a,b) for(int i=a;i >1)17 /* namespace */18 using namespace std;19 /* header end */20 21 const int maxn = 2e5 + 10;22 int n, m, a[maxn], b[maxn], time[110];23 24 int main() {25 scanf("%d%d", &n, &m);26 rep0(i, 0, n) scanf("%d", &a[i]);27 rep0(i, 0, 110) time[i] = 0;28 int s = 0, sum = 0, ss = 0, delta1 = 0, delta2 = 0;29 rep0(i, 0, n) {30 s += a[i];31 if (s > m) {32 delta1 = s - m;33 ss = 0;34 for (int j = 100; j >= 1; j--) // enum each time slot35 if (time[j]) {36 sum += j * time[j];37 ss += time[j];38 if (sum > delta1) {39 delta2 = sum - delta1;40 ss -= delta2 / j;41 break;42 }43 }44 b[i] = ss;45 sum = 0;46 } else b[i] = 0;47 time[a[i]]++;48 }49 rep0(i, 0, n) printf("%d ", b[i]);50 puts("");51 return 0;52 }
D:
暴力。n==2时必定成立。sort一遍,枚举三种状态即可:删了最小的、删了最大的、删了中间某个。然后分别检查是否成立即可。
1 /* basic header */ 2 #include3 /* define */ 4 #define ll long long 5 #define dou double 6 #define pb emplace_back 7 #define mp make_pair 8 #define sot(a,b) sort(a+1,a+1+b) 9 #define rep1(i,a,b) for(int i=a;i<=b;++i)10 #define rep0(i,a,b) for(int i=a;i >1)17 /* namespace */18 using namespace std;19 /* header end */20 21 const int maxn = 2e5 + 10;22 struct Node {23 Node() {}24 int val, posi;25 bool operator<(const Node &rhs)const {26 return val < rhs.val;27 }28 } a[maxn];29 int n;30 vector b;31 32 int main() {33 scanf("%d", &n);34 rep1(i, 1, n) {35 scanf("%d", &a[i].val);36 a[i].posi = i;37 }38 if (n == 2) return puts("1"), 0;39 sot(a, n);40 int s = a[n].val - a[1].val, pos = 1, d = s / (n - 2), cnt = 0;41 rep1(i, 1, n)42 if (a[i].val != a[1].val + d * (i - cnt - 1)) {43 pos = a[i].posi;44 cnt++;45 }46 if (cnt == 1) return printf("%d\n", pos), 0;47 s = a[n - 1].val - a[1].val; d = s / (n - 2);48 int flag = 0;49 rep1(i, 1, n - 1)50 if (a[i].val != a[1].val + d * (i - 1))51 flag = 1;52 if (!flag) return printf("%d\n", a[n].posi), 0;53 flag = 0; s = a[n].val - a[2].val; d = s / (n - 2);54 rep1(i, 2, n)55 if (a[i].val != a[2].val + d * (i - 2))56 flag = 1;57 if (!flag) return printf("%d\n", a[1].posi), 0;58 puts("-1");59 return 0;60 }
E:
大模拟,不是很好写,我实在是写不动这种东西……
F:
位运算暴力题。
G1 && G2:
这个就真的不会了.