Codeforces Round 889 (Div. 2)
题目链接:Codeforces Round 889 (Div. 2)
B. Longest Divisors Interval
题意:就是求最长的连续的约数 比如6约数1 2 3是连续的所以最长连续的约数个数就是3
思路:因为从1开始就是某个数约数任何数都可以由前边的进行转化出来 所以从1进行遍历 遍历到不能整除就break 记录数量(最长连续的应该从1开始判别)
#include <bits/stdc++.h> using namespace std; #define FAST ios::sync_with_stdio(false), cin.tie(0), cout.tie(0) #define int long long typedef long long LL; typedef pair<int, int> PII; const int N = 1e5 + 10; int a[N], n, m, ct, idx; bool vis[N], st[N]; void solve() { ct=0; cin>>n; for(int i=1;i<n;i++) { if(n%i==0) { ct++; } else { break; } } cout<<ct<<endl; } signed main() { FAST; int T = 1; cin>>T; while (T--) { solve(); } }
C:C1. Dual (Easy Version)
题意:就是可让ai=aj+ai; 让一个数加到另一个数的身上 让他形成单调递增的状态输出操作次数 和操作的步骤 将后变得数加到第一数身上
思路 :当全是负数的时候和全是正数的时候比较好说 邮政有负就需要一些操作 (单调的额可以进行前后相加形成单调序列)
1:当全是正数的时候可以让他前边的数不断加到后边的身上形成前缀和最后肯定是单调递增的
2:当全是负数的时候就可以让后边的后缀和 加到前边
3:当有正数和负数找到abs最大值每个数都加上这个数 都变成正数或者负数 之后在进行1或2操作
#include <bits/stdc++.h> using namespace std; #define FAST ios::sync_with_stdio(false), cin.tie(0), cout.tie(0) // #define int long long typedef long long LL; typedef pair<int, int> PII; const int N = 1e5 + 10; int a[N], n, m, ct; bool vis[N], st[N]; void solve() { int idx = 0; int maxx = -1e9; cin >> n; for (int i = 1; i <= n; i++) { cin >> a[i]; if (maxx < abs(a[i])) { maxx = abs(a[i]); idx = i; } } if (maxx == 0) { cout << "0" << endl; return; } cout << n + n - 1 << endl; // n次都加上maxx 之后n-是前后缀记进行更新次数 for (int i = 1; i <= n; i++) { cout << i << " " << idx << endl; } if (a[idx] > 0) { for (int i = 2; i <= n; i++) { cout << i << " " << i - 1 << endl; } } else { for (int i = n; i > 1; i--) { cout << i - 1 << " " << i << endl; } } } signed main() { FAST; int T = 1; cin>>T; while (T--) { solve(); } }

浙公网安备 33010602011771号