Codeforces Round #256 (Div. 2),

來源:互聯網
上載者:User

Codeforces Round #256 (Div. 2),
Codeforces Round #256 (Div. 2)

題目連結

A題:沒什麼好說的水題,判斷一下兩種各需要多少個,加起來看會不會超過即可
B題:首先計數字母,看b串有沒有多餘字元,判斷掉need tree的情況,然後判斷b是否能和a匹配,如果可以且長度不同,就是auto,如果不行且長度相同,就是array,否則就是both
C題:貪心,每次選擇最低的去橫向刷,刷完會多出幾個子狀態出來,利用遞推去求解即可
D題:二分推理,二分答案,那麼對於這個答案,後面n行中,對應第2行有m/2個,第3行有m/3...依次類推,就能求出該答案符不符合第k個,利用二分不斷趨近答案求解
E題:暴力簡直不敢信,把x因子處理出來dfs暴力遞迴輸出答案,大力出奇蹟啊

代碼:

A:

#include <stdio.h>#include <string.h>int a[3], b[3], n;int main() {int i;for (i = 0; i < 3; i++)scanf("%d", &a[i]);for (i = 0; i < 3; i++)scanf("%d", &b[i]);scanf("%d", &n);int aa = a[0] + a[1] + a[2];int bb = b[0] + b[1] + b[2];if (n >= (aa / 5 + (aa % 5 != 0) + bb / 10 + (bb % 10 != 0)))printf("YES\n");else printf("NO\n");return 0;}

B:

#include <stdio.h>#include <string.h>char a[105], b[105];int vis[30];void solve(char *str, int val) {for (int i = 0; i < strlen(str); i++)vis[str[i] - 'a'] += val;}bool jud(char *a, char *b) {int i = 0, j = 0;while (i < strlen(a) && j < strlen(b)) {if (b[j] == a[i]) {i++; j++;}else i++;}if (j == strlen(b)) return true;return false;}void gao() {int i;for (i = 0; i < 26; i++) {if (vis[i] > 0) {printf("need tree\n");return;}}if (jud(a, b)) {printf("automaton\n");}else {if (strlen(a) == strlen(b)) printf("array\n");else printf("both\n");}}int main() {scanf("%s%s", a, b);solve(b, 1);solve(a, -1);gao();return 0;}

C:

#include <stdio.h>#include <string.h>#define min(a,b) ((a)<(b)?(a):(b))#define INF 0x3f3f3f3fint n, a[5005];int dfs(int l, int r, int now) {    if (l == r) return 0;    int i, Min = INF;    for (i = l; i < r; i++)        Min = min(Min, a[i]);    int ans = Min - now, L = l;    for (i = l; i < r; i++) {        if (a[i] == Min) {            ans += dfs(L, i, Min);            L = i + 1;        }    }    ans += dfs(L, r, Min);    return min(r - l, ans);}int main() {    scanf("%d", &n);    for (int i = 0; i < n; i++)        scanf("%d", &a[i]);    printf("%d\n", dfs(0, n, 0));    return 0;}

D:

#include <stdio.h>#include <string.h>#define min(a,b) ((a)<(b)?(a):(b))__int64 n, m, k;bool judge(__int64 mid) {__int64 sum = 0;for (__int64 i = 1; i <= n; i++) {sum += min(m, (mid / i));}return sum >= k;}__int64 solve() {__int64 l = 1, r = n * m;while (l < r) {__int64 mid = (l + r) / 2;if (judge(mid)) r = mid;else l = mid + 1;}return l;}int main() {scanf("%I64d%I64d%I64d", &n, &m, &k);if (n > m) {__int64 t = n;n = m;m = t;}printf("%I64d\n", solve());return 0;}

E:

#include <stdio.h>#include <string.h>#include <math.h>#include <algorithm>using namespace std;typedef __int64 ll;const int N = 100005;ll x, k, frac[N], fn = 0;void tra(ll x) {    ll m = (ll)sqrt(x);    for (ll i = 1; i <= m; i++) {        if (x % i) continue;        frac[fn++] = i;        if (x / i != i) frac[fn++] = x / i;    }    sort(frac, frac + fn);}ll s = 0;void dfs(ll x, ll k) {    if (s >= 100000) return;    if (k == 0 || x == 1) {        printf("%I64d ", x);        s++;        return;    }    for (ll i = 0; i < fn && frac[i] <= x; i++) {        if (x % frac[i]) continue;        dfs(frac[i], k - 1);        if (s >= 100000) return;    }}int main() {    scanf("%I64d%I64d", &x, &k);    tra(x);    dfs(x, k);    return 0;}





聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.