AtCoder Beginner Contest 357
AtCoder Beginner Contest 357
A:模拟即可:
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<ll, ll> PII;
const int N = 1e5 + 10;
const int mod = 1e7 + 9;
#define rep(i,a,b) for(int i=a;i<b;i++)
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
ll n,sum;
cin>>n>>sum;
vector<ll>a(n+1);
ll ans;
for(int i=1;i<=n;i++)
{
cin>>a[i];
if(sum-a[i]<0)
{
ans=i-1;
break;
}
sum-=a[i];
ans=i;
}
cout<<ans;
return 0;
}
B:分别统计大小写字符个数(tolower函数转为小写,totoupper转为大写)
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<ll, ll> PII;
const int N = 1e5 + 10;
const int mod = 1e7 + 9;
#define rep(i,a,b) for(int i=a;i<b;i++)
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
string s;
cin>>s;
ll n=s.size();
ll x=0,y=0;
rep(i,0,n){
if(s[i]>='a'&&s[i]<='z')
{
x++;
}
else{
y++;
}
}
if (x > y) {
for (char& c : s) {
c = tolower(c);
}
} else {
for (char& c : s) {
c = toupper(c);
}
}
cout<<s;
return 0;
}
C:模拟题
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<ll, ll> PII;
const int N = 1e5 + 10;
const int mod = 1e7 + 9;
#define rep(i, a, b) for (int i = a; i < b; i++)
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
int n, l = 1;
char a[729][730];
for (int i = 0; i < 729; i++)
for (int j = 0; j < 730; j++)
a[i][j] = 0;
cin >> n;
a[0][0] = '#';
for (int k = 0; k < n; k++)
{
for (int x = 0; x < 3; x++)
{
for (int y = 0; y < 3; y++)
{
if ((x == 0) && (y == 0))
continue;
if ((x == 1) && (y == 1))
{
for (int i = 0; i < l; i++)
for (int j = 0; j < l; j++)
a[x * l + i][y * l + j] = '.';
}
else
{
for (int i = 0; i < l; i++)
{
for (int j = 0; j < l; j++)
{
a[x * l + i][y * l + j] = a[i][j];
}
}
}
}
}
l *= 3;
}
for (int i = 0; i < l; i++)
cout << a[i] << endl;
return 0;
return 0;
}
D:我们通过题目可以发现将数字n重复连接n次就是相当于一个等比数列求和,如n=5即5+50+500+5000+50000=55555;
等比数列求和公式
\[S_n = a_1\cdot \frac{1 - q^n}{1 - q} \quad (q \neq 1)
\]
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll MOD = 998244353;
ll p(ll x, ll k) {//快速幂
ll r = 1;
while (k) {
if (k & 1) r = r * x % MOD;
x = x * x % MOD;
k >>= 1;
}
return r;
}
signed main() {
ll n;
cin >> n;
ll l = to_string(n).length(); //数字的长度,
ll pl = p(10, l);//公比
ll pln = p(pl, n);//q^n
ll u = (pln - 1 + MOD) % MOD;
ll d = (pl - 1 + MOD) % MOD;
ll invd = p(d, MOD - 2);//分母的逆元
cout << n % MOD * u % MOD * invd % MOD << endl;
return 0;
}
E:图论,不熟
F:使用线段树模板即可:
#include<bits/stdc++.h>
typedef long long LL;
using namespace std;
const int N = 2e5 + 10;
const int MOD = 998244353;
class segment {
#define lson (root << 1)
#define rson (root << 1 | 1)
public:
LL sab[N << 2];
LL sum[N << 2][2];
LL lazy[N << 2][2];
void pushup(int root) {
sab[root] = (sab[lson] + sab[rson]) % MOD;
sum[root][0] = (sum[lson][0] + sum[rson][0]) % MOD;
sum[root][1] = (sum[lson][1] + sum[rson][1]) % MOD;
}
void build(int root, int l, int r, vector<int> &a, vector<int> &b) {
if (l == r) {
sab[root] = 1ll * a[l - 1] * b[l - 1] % MOD;
sum[root][0] = a[l - 1];
sum[root][1] = b[l - 1];
return;
}
int mid = (l + r) >> 1;
build(lson, l, mid, a, b);
build(rson, mid + 1, r, a, b);
pushup(root);
}
void pushdown(int root, int l, int mid, int r) {
if (lazy[root][0] || lazy[root][1]) {
sab[lson] = (sab[lson] + lazy[root][0] * sum[lson][1] % MOD + lazy[root][1] * sum[lson][0] % MOD +
lazy[root][0] * lazy[root][1] % MOD * (mid - l + 1) % MOD) % MOD;
sum[lson][0] = (sum[lson][0] + lazy[root][0] * (mid - l + 1) % MOD) % MOD;
sum[lson][1] = (sum[lson][1] + lazy[root][1] * (mid - l + 1) % MOD) % MOD;
sab[rson] = (sab[rson] + lazy[root][0] * sum[rson][1] % MOD + lazy[root][1] * sum[rson][0] % MOD +
lazy[root][0] * lazy[root][1] % MOD * (r - mid) % MOD) % MOD;
sum[rson][0] = (sum[rson][0] + lazy[root][0] * (r - mid) % MOD) % MOD;
sum[rson][1] = (sum[rson][1] + lazy[root][1] * (r - mid) % MOD) % MOD;
lazy[lson][0] = (lazy[lson][0] + lazy[root][0]) % MOD;
lazy[lson][1] = (lazy[lson][1] + lazy[root][1]) % MOD;
lazy[rson][0] = (lazy[rson][0] + lazy[root][0]) % MOD;
lazy[rson][1] = (lazy[rson][1] + lazy[root][1]) % MOD;
lazy[root][0] = lazy[root][1] = 0;
}
}
void update(int root, int l, int r, int L, int R, LL val, int op) {
if (L <= l && r <= R) {
sab[root] = (sab[root] + val * sum[root][op ^ 1] % MOD) % MOD;
sum[root][op] = (sum[root][op] + val * (r - l + 1) % MOD) % MOD;
lazy[root][op] = (lazy[root][op] + val) % MOD;
return;
}
int mid = (l + r) >> 1;
pushdown(root, l, mid, r);
if (L <= mid)
update(lson, l, mid, L, R, val, op);
if (R > mid)
update(rson, mid + 1, r, L, R, val, op);
pushup(root);
}
LL query(int root, int l, int r, int L, int R) {
if (L <= l && r <= R) {
return sab[root];
}
int mid = (l + r) >> 1;
pushdown(root, l, mid, r);
LL ans = 0;
if (L <= mid)
ans += query(lson, l, mid, L, R);
if (R > mid)
ans += query(rson, mid + 1, r, L, R);
ans %= MOD;
return ans;
}
} sg;
int main() {
int n, q;
cin >> n >> q;
vector<int> a(n), b(n);
for (auto &i: a)
cin >> i;
for (auto &i: b)
cin >> i;
sg.build(1, 1, n, a, b);
while (q--) {
int op;
cin >> op;
if (op == 3) {
int l, r;
cin >> l >> r;
int ans = sg.query(1, 1, n, l, r);
cout << ans << endl;
} else {
int l, r, x;
cin >> l >> r >> x;
sg.update(1, 1, n, l, r, x, op - 1);
}
}
return 0;
}

浙公网安备 33010602011771号