B. Arrays Sum
// Problem: B. Arrays Sum// Contest: Codeforces - Grakn Forces 2020// URL: Memory Limit: 256 MB// Time Limit: 1000 ms// 2022-02-25 14:03:18// // Powered by CP Editor (namespace std;#define rep(i,l,r) for(int i=(l);i<=(r);i++)#define per(i,l,r) for(int i=(l);i>=(r);i--)#define ll long long#define pii pair#define mset(s,t) memset(s,t,sizeof(t))#define mcpy(s,t) memcpy(s,t,sizeof(t))#define fi first#define se second#define pb push_back#define all(x) (x).begin(),(x).end()#define SZ(x) ((int)(x).size())#define mp make_pairconst ll mod = 1e9 + 7;inline ll qmi (ll a, ll b) { ll ans = 1; while (b) { if (b & 1) ans = ans * a%mod; a = a * a %mod; b >>= 1; } return ans;}inline int read () { int x = 0, f = 0; char ch = getchar(); while (!isdigit(ch)) f |= (ch=='-'),ch= getchar(); while (isdigit(ch)) x = x * 10 + ch - '0', ch = getchar(); return f?-x:x;}template void print(T x) { if (x < 0) putchar('-'), x = -x; if (x >= 10) print(x/10); putchar(x % 10 + '0');}inline ll sub (ll a, ll b) { return ((a - b ) %mod + mod) %mod;}inline ll add (ll a, ll b) { return (a + b) %mod;}inline ll inv (ll a) { return qmi(a, mod - 2);}void solve() { int n, k; cin >> n >> k; vector a(n + 1); for (int i = 1; i<= n ;i ++) { cin>> a[i]; } int cnt = 1; for (int i = 2; i <= n ;i ++) if(a[i] != a[i - 1]) cnt ++; if (k == 1) { if (cnt == 1) cout <<"1" << endl; else cout << "-1" << endl; return; } cout << max(1, ((cnt - 1 + k - 2) / (k - 1))) << endl; //上取整转换} int main () { int t; t =1; cin >> t; while (t --) solve(); return 0;}
ceil(x / c) = = (x + c - 1) / c; 这种题需要知道对于1的,才会出现无解。否则一直有解 这样想。 对于我们预处理一个数组na = {a[2] - a[1], a[3] - a[2], ....} 我们对于一个b[i] = {b[i][2] - b[i][1], ....} 至多只有k - 1个非0数,如果na有c个非0,那么我们就至少需要ceil(c / (k - 1)) 我一直想通过递推找到一个具体的解。但是陷入了循环。不够就要加不够就要加。这样就混了
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
暂时没有评论,来抢沙发吧~