根据省一等奖分数线 是否大于等于全国基准线 。来确定是否有三等奖。
如果有三等奖,那么就输出 ,否则输出 即可。
#include <bits/stdc++.h>
using namespace std;
int a, b, c, x;
int main()
{
cin >> a >> b >> c >> x;
if (x >= a)
cout << x << " " << b << " " << c << "\n";
else
cout << x << " " << c << " " << -1 << "\n";
return 0;
}
数据范围非常小,直接按照题意模拟即可。当然也可以在求每个等差数列的和的时候用等差数列求和公式。
有兴趣的同学可以想想,假设 ,有没有更快的做法。以及 的时候有没有更快的做法。
#include <bits/stdc++.h>
using namespace std;
int n, m, a, d, dd;
int main()
{
cin >> n >> m >> a >> d >> dd;
int ans = 0;
for (int i = 1; i <= n; i++)
{
int nowA = a + (i - 1) * d;
int nowD = d + (i - 1) * dd;
for (int j = 1; j <= m; j++)
{
int now = nowA + (j - 1) * nowD;
ans += now;
//cout << now << " ";
}
//cout << "\n";
}
cout << ans;
return 0;
}
显然按顺序贪心即可,从前往后,发现了一个 33
,就用着一个,就不会重叠了。
#include <bits/stdc++.h>
using namespace std;
int n;
string s;
int main()
{
cin >> n;
cin >> s;
int ans = 0;
for (int i = 1; i <= n - 1; i++)
if (s[i] == '3' && s[i - 1] == '3')
{
ans++;
s[i] = s[i - 1] = '0';
}
cout << ans;
return 0;
}
题目本身确实非常简单,就是排个序然后按照题意模拟即可。
这题主要卡了一个没学好 sort
的同学,大家一定要注意 sort
的比较函数是用来代替小于号 <
的,必须是严格的偏序关系,否则 sort
判断相等和不等关系的时候会判断错,这在极端情况下会出现错误。最常见的极端情况就是有大量相等数据的时候。
所以所有比较函数写 >=
的都被卡成了 分。
#include <bits/stdc++.h>
using namespace std;
int seed, P; // 通过输入得到
int f(int id)
{
return 1LL * id * id % P * seed % P;
}
int n;
int a[5123456];
int cmp(int a, int b)
{
return a > b;
}
int main()
{
cin >> n >> seed >> P;
for (int i = 1; i <= n; i++)
a[i] = f(i);
sort(a + 1, a + n + 1, cmp);
int ans = 0;
for (int i = 1; i <= n; i++)
ans = ans ^ (a[i] + i);
cout << ans;
return 0;
}