#include<bits/stdc++.h>
using namespace std;
const int N = 1e3 + 10;
int a[N];
void slove()
{
int n, m;
cin >> n >> m;
int res = 0;
int sum = 0;
for (int i = 1; i <= n; i++)
{
cin >> a[i];
if (sum + a[i] > m)
{
sum = a[i];
res++;
}
else sum += a[i];
}
cout << res << endl;
}
int main()
{
int t = 1;
while (t--)
{
slove();
}
return 0;
}
#include<bits/stdc++.h>
using namespace std;
const int N = 1e3 + 10;
int p[N];
void slove()
{
int n, m;
cin >> n >> m;
for (int i = 1; i <= n; i++)
{
int t;
cin >> t;
if (t == -1)t = 0;
p[i] = t;
}
int last[N];
memset(last, -0x3f, sizeof last);
while (m--)
{
int t, k;
cin >> t >> k;
while (k--)
{
int x;
cin >> x;
if (last[x] + p[x] > t)
{
printf("Don't take %d at %d!\n", x, t);
}
else
{
last[x] = t;
}
}
}
}
int main()
{
int t = 1;
while (t--)
{
slove();
}
return 0;
}
#include <bits/stdc++.h>
using namespace std;
map<int, int> num;
int Max, Min;
void Solution(string str)
{
int r = str.length() - 1, l = 0, sign = 1;
while (l <= r)
{
int x = 0, y = 0;
while (l <= r && str[l] != 'd' && str[l] != '+' && str[l] != '-')
x = x * 10 + str[l++] - '0';
if (str[l] == 'd')
{
if (x == 0) x = 1;
l++;
while (l <= r && str[l] != '+' && str[l] != '-')
y = y * 10 + str[l++] - '0';
num[y] += x;
if (sign == 1)
{
Max += y * x;
Min += x;
}
else
{
Max -= x;
Min -= y * x;
}
}
else
{
Max += sign * x;
Min += sign * x;
}
if (l <= r)
sign = str[l++] == '+' ? 1 : -1;
}
}
int main() {
string str;
cin >> str;
Solution(str);
for (auto i : num)
{
cout << i.first << " " << i.second << endl;
}
cout << Min << " " << Max << endl;
return 0;
}
#include <bits/stdc++.h>
using namespace std;
const int N = 7;
int num[N];
bool A[N], B[N], C[N];
int totalA;
vector<int> ans1, ans2;
bool R0, R1, R2;
vector<int> tmp1, tmp2;
void judge()
{
if (tmp1.empty() || tmp2.empty()) return;
bool r0, r1, r2, t1, t2;
t1 = t2 = false;
for (int i : tmp1)
if (A[i]) {
t1 = true;
break;
}
for (int i : tmp2)
if (A[i]) {
t2 = true;
break;
}
r0 = t1 && t2;
if (!r0) return;
t1 = t2 = false;
for (int i : tmp1)
if (C[i]) {
t1 = true;
break;
}
for (int i : tmp2)
if (C[i]) {
t2 = true;
break;
}
r2 = t1 && t2;
t1 = t2 = false;
for (int i : tmp1)
if (B[i]) {
t1 = true;
break;
}
for (int i : tmp2)
if (B[i]) {
t2 = true;
break;
}
r1 = r2 && t1 && t2;
if (!R0)
{
ans1 = tmp1, ans2 = tmp2;
R0 = r0, R1 = r1, R2 = r2;
return;
}
if (r1 && !R1)
{
ans1 = tmp1, ans2 = tmp2;
R0 = r0, R1 = r1, R2 = r2;
return;
}
if (!R1 && !r1)
{
if (r2 && !R2)
{
ans1 = tmp1, ans2 = tmp2;
R0 = r0, R1 = r1, R2 = r2;
return;
}
}
int an1 = 0, an2 = 0, tn1 = 0, tn2 = 0;
for (int i : ans1) an1 += num[i];
for (int i : ans2) an2 += num[i];
for (int i : tmp1) tn1 += num[i];
for (int i : tmp2) tn2 += num[i];
int d1 = abs(an1 - an2), d2 = abs(tn1 - tn2);
if (d1 < d2) return;
if (d1 > d2)
{
ans1 = tmp1, ans2 = tmp2;
R0 = r0, R1 = r1, R2 = r2;
return;
}
t1 = (an1 > an2), t2 = (tn1 > tn2);
if (t2 && !t1)
{
ans1 = tmp1, ans2 = tmp2;
R0 = r0, R1 = r1, R2 = r2;
return;
}
for (int k = 0; k < ans1.size() && k < tmp1.size(); k++)
{
if (ans1[k] < tmp1[k]) return;
else if (ans1[k] > tmp1[k])
{
ans1 = tmp1, ans2 = tmp2;
R0 = r0, R1 = r1, R2 = r2;
return;
}
}
}
void dfs(int i)
{
if (i > 6)
{
judge();
return;
}
if (num[i] == 0)
{
dfs(i + 1);
return;
}
tmp1.push_back(i);
dfs(i + 1);
tmp1.pop_back();
tmp2.push_back(i);
dfs(i + 1);
tmp2.pop_back();
}
int main()
{
for (int i = 1; i <= 6; i++)
cin >> num[i];
string ABC;
for (int i = 1; i <= 6; i++)
{
cin >> ABC;
if (ABC[0] == '1') A[i] = true, totalA++;
if (ABC[1] == '1') B[i] = true;
if (ABC[2] == '1') C[i] = true;
}
if (totalA < 2)
{
cout << "GG";
return 0;
}
else
{
dfs(1);
for (int i = 0; i < ans1.size(); i++)
{
if (i != 0) cout << " ";
cout << ans1[i];
}
cout << endl;
for (int i = 0; i < ans2.size(); i++)
{
if (i != 0) cout << " ";
cout << ans2[i];
}
}
return 0;
}
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 2e6 + 10, M = 2 * N;
int h[N], e[M], ne[M], idx;
int color[N];
ll n, m;
void add(int a, int b)
{
e[idx] = b, ne[idx] = h[a], h[a] = idx++;
}
bool dfs(int u, int c)
{
color[u] = c;
if (c == 1)m++;
for (int i = h[u]; i != -1; i = ne[i])
{
int j = e[i];
if (color[j])
{
if (color[j] == c)return false;
}
else if (!dfs(j, 3 - c))return false;
}
return true;
}
void slove()
{
memset(h, -1, sizeof h);
cin >> n;
for (int i = 1; i < n; i++)
{
int a, b;
cin >> a >> b;
add(a, b), add(b, a);
}
dfs(1, 1);
cout << m * (n - m) - (n - 1) << endl;
}
int main()
{
int t = 1;
while (t--)
{
slove();
}
return 0;
}