A. Wrong Subtraction
输入两个数,n和k,n是初始的数,k为操作数,如果个位为就除以10,不为0则减1,求k次操作后的数
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
#include<cstdio> using namespace std; int main() { int n, k; scanf("%d%d", &n, &k); while (k--) { if (n % 10 == 0) n /= 10; else n--; } printf("%d\n", n); return 0; }
B. Two-gram
输入一个数n,再输入一个长度为n的字符串
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
#include<cstdio> using namespace std; char s[150]; int a[150]; int main() { int n; scanf("%d", &n); scanf("%s", s); for (int i = 0; i < n; i++) { for (int j = 0; j < n; j++) if (s[i] == s[j] && s[i + 1] == s[j + 1]) a[i]++; } int Max = -1; int m = 0; for (int i = 0; i < n; i++) if (a[i] > Max) Max = a[i] , m = i; printf("%c%c\n", s[m], s[m + 1]); return 0; }
C. Less or Equal
输入n和k,n个数,求x,使x为n个数中小于等于x的数的个数为k
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
#include<cstdio> #include<algorithm> using namespace std; int a[200050]; int main() { int n, k; scanf("%d%d", &n, &k); for (int i = 0; i < n; i++) scanf("%d", &a[i]); sort(a, a + n); if (k == 0) { if (a[0] == 1) printf("-1\n"); else { printf("1\n"); return 0; } } else { if (a[k] == a[k - 1]) printf("-1\n"); else { printf("%d\n", a[k - 1]); } } return 0; }
D. Divide by three, multiply by two
输出一组数进行排序,排序方法为前面的数为后面的数的3倍或一半(DFS)
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
#include <iostream> using namespace std; int n; long long ans[110], a[110]; bool flag, vis[110]; void print() { for (int i = 0; i < n; i++) cout << ans[i] << " "; cout << endl; } void dfs(int step) { if (step >= n) { print(); flag = true; return; } if (!flag) for (int i = 0; i < n; i++) { if (!vis[i] && (step == 0 || (ans[step - 1] * 2 == a[i] || (ans[step - 1] % 3 == 0 && ans[step - 1] / 3 == a[i])))) { vis[i] = true; ans[step] = a[i]; dfs(step + 1); vis[i] = false; } } } int main() { cin >> n; for (int i = 0; i < n; i++) cin >> a[i]; dfs(0); return 0; }
E. Cyclic Components
求有几个简单环(一个点两条边)(DFS)
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
#include <iostream> #include <cstdio> #include <vector> using namespace std; const int maxn = 2e5 + 10; bool vis[maxn]; vector<int>v[maxn]; int ans = 0; int temp; void DFS(int s){ vis[s] = true; if(v[s].size() != 2) temp = 0; for(int i : v[s]){ if(!vis[i]) DFS(i); } } int main() { std::ios::sync_with_stdio(false); std::cin.tie(0); int n, m; cin >> n >> m; for(int i = 0; i < m; i++){ int x, y; cin >> x >> y; v[x].push_back(y); v[y].push_back(x); } for(int i = 1; i < n; i++){ if(!vis[i]){ temp = 1; DFS(i); ans += temp; } } cout << ans << endl; return 0; }
F. Consecutive Subsequence
给一组数字,求前后差值为1的最长序列长度与元素
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
#include <cstdio> #include <iostream> #include <map> using namespace std; const int maxn = 2e5 + 10; int a[maxn]; map <int, int>mp; int main(){ int n; int len = -1; int ans; cin >> n; for(int i = 1; i <= n; i++){ int x; cin >> x; a[i] = x; mp[x] = mp[x - 1] + 1; if(len < mp[x]){ len = mp[x]; ans = x; } } cout << len << endl; int startNum = ans - len + 1; for(int i = 1; i <= n; i++){ if(startNum == a[i]){ cout << i << " "; startNum++; } } cout << endl; return 0; }