int n, money[6] = {1, 5, 10, 20, 50, 100}, a[6]; longlong ans;
intmain(){ for (int i = 0; i < 6; ++i) cin >> a[i]; cin >> n; for (int i = 5; n > 0 && i >= 0; --i) { if (n >= a[i]) ans += a[i] * money[i]; else ans += n * money[i]; n -= a[i]; } cout << ans << endl;
intgcd(int a, int b){ return b == 0 ? a : gcd(b, a % b); }
intmain(){ int n, m; cin >> n >> m; if (n > 0) ans ++; if (m > 0) ans ++; for (int i = 1; i <= n; ++i) for (int j = 1; j <= m; ++j) { int d = gcd(i, j); if (!st.count({i/d, j/d})) ans ++; st.insert({i/d, j/d}); } cout << ans << endl;
int n, m, sx, sy; char g[N][N]; bool st[N][N]; longlong ans = -1; int d[4][2] = {{0, 1}, {0, -1}, {1, 0}, {-1, 0}};
boolcheck(int x, int y){ // 越界 if (x < 0 || x >= n || y < 0 || y >= m) returnfalse; if (g[x][y] == '#' || st[x][y]) returnfalse; returntrue; }
voiddfs(int x, int y, int len){ bool flag = false; for (int i = 0; i < 4; ++i) { int nx = x + d[i][0], ny = y + d[i][1]; if (check(nx, ny)) { flag = true; st[nx][ny] = true; dfs(nx, ny, len+1); st[nx][ny] = false; } } if (!flag && len > ans) ans = len; }
intmain(){ cin >> n >> m; for (int i = 0; i < n; ++i) for (int j = 0; j < m ; ++j) { cin >> g[i][j]; if (g[i][j] == 'S') sx = i, sy = j; } st[sx][sy] = true; dfs(sx, sy, 1); cout << ans << endl;
int n, m, ans; // n为树的节点个数,m为样例数量,ans判断有无结果 string pre, in, post, res; // 前序遍历字符串,中序遍历字符串,后序遍历字符串 map<char, pair<char, char> > g; // 存重构后的二叉树,第一个char为当前节点值 //pair<char, char>为其{left, right}
voidinit(){ g.clear(); // 把重构二叉树置为空 res = ""; // 重构二叉树的后序遍历结果置为空 }
// 重构二叉树 charfind_root(int pr, int il, int ir){ if (il > ir) return'0'; // 避免评判数据中根本不可能构成树的情况 char root = pre[pr]; // 当前子树的根 if (il == ir) { // 刚好一个节点,为叶子节点,其左右节点均为空 g[root] = {'0', '0'}; return root; } int pos = in.find(root); if (pos < il) return'0'; // 避免评判中根本不可能构成树的情况 char left = find_root(pr+1, il, pos-1); // 继续遍历左子树 char right = find_root(pr+pos-il+1, pos+1, ir); // 继续遍历右子树 g[root] = {left, right}; return root; }
// 后序遍历二叉树 voiddfs(char u){ // 当前节点 if (u == '0') return; // 为空不遍历 if (g[u].first != '0') // 左节点不为空,则遍历左节点 dfs(g[u].first); // 左节点 if (g[u].second != '0') // 右节点不为空,则遍历右节点 dfs(g[u].second); // 右节点 res = res + u; }
intmain(){ cin >> pre >> in; n = pre.size(); char root = find_root(0, 0, n-1); // 重构二叉树 dfs(root); // 后序遍历二叉树 cout << res << endl;
intmain(){ cin >> n >> b; for (int i = 0; i < n; ++i) { cin >> a; if (a / b >= 3) ans += a - 3*b; elseif (a/b == 2) ans += a - 2*b; elseif (a/b == 1) ans += a - b; else ans += a; }
intmain(){ cin >> n; n /= 100; int k = 0, a; int nn = n; while (nn) { if (nn != 0) a = nn; nn /= 10; k++; } k--; longlong ans = (k*10 - k + a) * 100; cout << ans << endl;