Educational Codeforces Round 103 (Rated for Div. 2)
A. K-divisible Sum
先保证sum大于k,ans=(sum+k-1)/k
#include <bits/stdc++.h>
#pragma GCC optimize(2)
#define int long long
using namespace std;
//const int mod = 998244353;
const int inf=1e18;
const int mod = 1e9 + 7;
const int maxn = 2e5 + 10;
void solve() {
int n,k;
cin>>n>>k;
int sum=ceil(n*1.0/k)*k;
int t=sum/n+(sum%n>0);
cout<<t<<"\n";
}
signed main() {
// ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int _ = 1;
cin >> _;
while (_--) {
solve();
}
return 0;
}
B. Inflation
全加到p[0]上。
#include <bits/stdc++.h>
#pragma GCC optimize(2)
#define int long long
using namespace std;
//const int mod = 998244353;
const int inf=1e18;
const int mod = 1e9 + 7;
const int maxn = 2e5 + 10;
int p[maxn];
void solve() {
int n,k;
int ans=0, sum=0;
cin>>n>>k;
for (int i = 1; i <=n; ++i) {
cin>>p[i];
sum+=p[i];
}
for (int i = n; i >1 ; --i) {
sum-=p[i];
int x=k*sum-100*p[i];
if (x<0){
sum+=-(x-k+1)/k;///因为这里x<0,所以向上取整就要(x-k+1)/k;
///自己挖坑自己跳
}
}
cout<<sum-p[1]<<"\n";
}
signed main() {
// ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int _ = 1;
cin >> _;
while (_--) {
solve();
}
return 0;
}
C. Longest Simple Cycle
如果不闭合增加c[i]+b[i]-a[i]+1,再把之前的加上;
遍历dp即可
#include <bits/stdc++.h>
#pragma GCC optimize(2)
#define int long long
using namespace std;
//const int mod = 998244353;
const int inf=1e18;
const int mod = 1e9 + 7;
const int maxn = 2e5 + 10;
int c[maxn],a[maxn],b[maxn];
int dp[maxn];
void solve() {
int n;
cin>>n;
for (int i = 0; i < n; ++i) cin>>c[i];
for (int i = 0; i < n; ++i) cin>>a[i];
for (int i = 0; i < n; ++i) {
cin>>b[i];
if (a[i]>b[i]) swap(a[i],b[i]);
}
a[n]=b[n]=0;
int res=0;
for (int i = n-1; i >0; --i) {
dp[i]=c[i]+b[i]-a[i]+1;
if (a[i+1]!=b[i+1])
dp[i]=max(dp[i],dp[i]+dp[i+1]-2*(b[i+1]-a[i+1]));
res=max(res,dp[i]);
}
cout<<res<<"\n";
}
signed main() {
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int _ = 1;
cin >> _;
while (_--) {
solve();
}
return 0;
}
D. Journey
设往左的边为1,右为0;要去的最远就要10交叉,否则为0;
ans=左右俩边能去的城市和
#include <bits/stdc++.h>
#pragma GCC optimize(2)
#define int long long
using namespace std;
//const int mod = 998244353;
const int inf=1e18;
const int mod = 1e9 + 7;
const int maxn = 3e5 + 10;
int l[maxn],r[maxn];
int a[maxn];
void solve() {
string s;
int n;
cin>>n>>s;
for (int i = 1; i <=n; ++i)
if (s[i-1] == 'L') a[i]=1;
else a[i]=0;
l[0]=r[n+1]=0;
for (int i = 1; i <=n; ++i)
if (a[i]!=a[i-1]) l[i]=l[i-1]+1;
else l[i]=1;
for (int i = n; i >0; --i)
if (a[i]!=a[i+1]) r[i]=r[i+1]+1;
else r[i]=1;
a[n+1]=0;
for (int i = 0; i <=n; ++i) {
cout<<1+l[i]*(a[i]==1)+r[i+1]*(a[i+1]==0)<<" ";
}
cout<<"\n";
}
signed main() {
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int _ = 1;
cin >> _;
while (_--) {
solve();
}
return 0;
}