A——A+B Problem
#include <algorithm>
#include <climits>
#include <cstring>
#include <iostream>
using namespace std;
const int N = 1e5 + 10;
int a[N];
int b[N];
int n;
int main() {
scanf("%d", &n);
for (int i = 0; i < n; i++) {
scanf("%d", &a[i]);
b[i] = a[i];
}
sort(a, a + n);
for (int i = 0; i < n; i++) {
if (b[i] == a[n - 1])
cout << b[i] + a[n - 2] << ' ';
else
cout << b[i] + a[n - 1] << ' ';
}
return 0;
}
B——Komorebi的数学课
快速幂背公式,改为 LL 就过了。
#include <algorithm>
#include <cmath>
#include <cstring>
#include <iostream>
using namespace std;
long long n;
typedef long long LL;
LL qmi(LL m, LL k, LL p)
{
LL res = 1 % p, t = m;
while (k)
{
if (k&1) res = res * t % p;
t = t * t % p;
k >>= 1;
}
return res;
}
int main() {
cin >> n;
cout << qmi(n,n,n+2) << endl;
return 0;
}
C——次佛锅
#include <algorithm>
#include <climits>
#include <cstring>
#include <iostream>
#include <map>
using namespace std;
const int N = 1e5;
map<string, int> m;
int main() {
string ch;
while (cin >> ch) {
if (ch[0] >= '0' && ch[0] <= '9') break;
int v;
cin >> v;
m[ch] += v;
}
int n = stoi(ch);
while (n--) {
string ans;
cin >> ans;
cout << m[ans] << endl;
}
return 0;
}
F——黄金律法
一开始只能得 10 分,改成 LL 就全过了,一整个大无语!!!
#include <algorithm>
#include <climits>
#include <cstring>
#include <iostream>
using namespace std;
const int N = 1e5 + 10;
long long w[N], m[N];
long long T;
bool cmp(long long a, long long b) { return a > b; }
int main() {
scanf("%d", &T);
long long n;
while (T--) {
scanf("%lld", &n);
memset(w, 0, sizeof w);
memset(m, 0, sizeof m);
for (long long i = 0; i < n; i++) scanf("%lld", &w[i]);
for (long long i = 0; i < n; i++) scanf("%lld", &m[i]);
sort(w, w + n);
sort(m, m + n, cmp);
long long res = 0;
for (long long i = 0; i < n; i++) res += (long long)w[i] * m[i];
printf("%lld\n", res);
}
return 0;
}
G——天气预报
暴力+前缀和优化,还是只能得26.66分,只能说我尽力了!
#include <algorithm>
#include <cstring>
#include <iostream>
using namespace std;
const int N = 1e6 + 10;
long long res;
int an[N],bn[N];
int main()
{
// 天数 至少要出去玩的天数 至少要休息的天数。
int n, a, b;
cin >> n >> a >> b;
string s;
getline(cin, s);
getline(cin, s);
s = ' ' + s;
for(int i = 1;i <= n;i++)
{
an[i] = an[i - 1];
bn[i] = bn[i - 1];
if(s[i] == '0') an[i]++;
if(s[i] == '1') bn[i]++;
}
for(int i = 1;i <= n;i++)
for(int j = i + 1;j <= n;j++)
{
int ca = an[j] - an[i - 1];
int cb = bn[j] - bn[i - 1];
if(ca >= a && cb >= b) res++;
}
cout << res << endl;
return 0;
}
K——取模
一开始暴力得了30分,优化了一下还是30分!???气死了
#include <algorithm>
#include <climits>
#include <cstring>
#include <iostream>
using namespace std;
typedef long long LL;
LL n;
LL res;
int main()
{
cin >> n;
for(LL i = 1;i <= n;i++)
res += (n % i) % 998244353;
cout << res % 998244353 << endl;
return 0;
}