AtCoder Beginner Contest 189
A - Slot
#include <bits/stdc++.h>
//#pragma GCC optimize(2)
#define int long long
using namespace std;
//const int mod = 998244353;
const int mod = 1e9 + 7;
const int maxn = 1e3 + 10;
int a[maxn];
void solve() {
/*int n;
cin>>n;*/
string a;
cin>>a;
if (a[0]==a[1]&&a[0]==a[2]) cout<<"Won";
else cout<<"Lost";
}
signed main() {
// ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int _ = 1;
// cin >> _;
while (_--) {
solve();
}
return 0;
}
B - Alcoholic
注意精度问题
#include <bits/stdc++.h>
//#pragma GCC optimize(2)
#define int long long
using namespace std;
//const int mod = 998244353;
const int mod = 1e9 + 7;
const int maxn = 1e3 + 10;
int v[maxn];
int p[maxn];
void solve() {
int n;
int x;
cin>>n>>x;
x*=100;
for (int i = 0; i < n; ++i) {
cin>>v[i]>>p[i];
}
for (int i = 0; i < n; ++i) {
x-=v[i]*p[i];
if (x<0) {
cout<<i+1;
return;
}
}
cout<<-1;
}
signed main() {
// ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int _ = 1;
// cin >> _;
while (_--) {
solve();
}
return 0;
}
C - Mandarin Orange
令X=a[i],往俩边找不满足条件的,计算长度,答案ans=x*l。
遍历一遍,记录最大值即可。
#include <bits/stdc++.h>
//#pragma GCC optimize(2)
#define int long long
using namespace std;
//const int mod = 998244353;
const int mod = 1e9 + 7;
const int maxn = 1e4 + 10;
int a[maxn];
void solve() {
int n;
cin>>n;
for (int i = 0; i < n; ++i) {
cin>>a[i];
}
int max_=0;
for (int j = 0; j < n; ++j) {
int x=a[j];
int l=0;
for (int i = j; i < n; ++i) {
if (a[i]<x) break;
l++;
}
for (int k = j-1; k>=0; --k) {
if (a[k]<x) break;
l++;
}
max_=max(max_,l*x);
}
cout<<max_;
}
signed main() {
// ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int _ = 1;
// cin >> _;
while (_--) {
solve();
}
return 0;
}
D - Logical Expression
线性dp
dp[i][0/1]=>第i个位置为0/1的种数
#include <bits/stdc++.h>
//#pragma GCC optimize(2)
#define int long long
using namespace std;
//const int mod = 998244353;
const int mod = 1e9 + 7;
const int maxn = 1e6 + 10;
int dp[100][2];
string s[100];
void solve() {
int n;
cin>>n;
for (int i = 1; i <=n; ++i) {
cin>>s[i];
}
dp[0][0]=dp[0][1]=1;
for (int i = 1; i <=n; ++i) {
if(s[i][0]=='A'){
dp[i][1]=dp[i-1][1];
dp[i][0]=dp[i-1][0]*2+dp[i-1][1];
} else{
dp[i][0]=dp[i-1][0];
dp[i][1]=dp[i-1][1]*2+dp[i-1][0];
}
}
cout<<dp[n][1];
}
signed main() {
// ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int _ = 1;
// cin >> _;
while (_--) {
solve();
}
return 0;
}
E - Rotate and Flip
硬模拟操作,变成一个公式,后面查询代入点计算即可
#include <bits/stdc++.h>
using namespace std;
long long a[200001],b[200001],s1[200001],s2[200001];
bool sw[200001];
pair<int,int> pts[200001];
int main(){
int n;
scanf("%d",&n);
for (int i=0;i<n;++i){
int x,y;
scanf("%d%d",&x,&y);
pts[i]={
x,y};
}
int m;
scanf("%d",&m);
s1[0]=s2[0]=1;
for (int i=1;i<=m;++i){
int op;
scanf("%d",&op);
if (op==1){
a[i]=b[i-1];
b[i]=-a[i-1];
s1[i]=s2[i-1];
s2[i]=-s1[i-1];
sw[i]=!sw[i-1];
} else if (op==2) {
a[i]=-b[i-1];
b[i]=a[i-1];
s1[i]=-s2[i-1];
s2[i]=s1[i-1];
sw[i]=!sw[i-1];
} else if (op==3){
int p;
scanf("%d",&p);
a[i]=2*p-a[i-1];
s1[i]=-s1[i-1];
b[i]=b[i-1];
s2[i]=s2[i-1];
sw[i]=sw[i-1];
} else {
int p;
scanf("%d",&p);
a[i]=a[i-1];
s1[i]=s1[i-1];
b[i]=2*p-b[i-1];
s2[i]=-s2[i-1];
sw[i]=sw[i-1];
}
}
int q;
scanf("%d",&q);
while (q--){
int x,y,i,j;
scanf("%d%d",&i,&j);
--j;
x=pts[j].first;
y=pts[j].second;
if (sw[i]) swap(x,y);
printf("%lld %lld\n",a[i]+s1[i]*x,b[i]+s2[i]*y);
}
}
F - Sugoroku2
期望dp,dp[i][1]表示i到n的期望步数,dp[i][0]=1表示i点会回到0的可能,就是方程中的a。
dp[i][1]=(dp[i+1][1]+dp[i+2][1]…dp[i+m][1])/m+1/m*m
最后解个方程x=a∗x+b,x=dp[0][1]
#include <bits/stdc++.h>
//#pragma GCC optimize(2)
#define int long long
using namespace std;
//const int mod = 998244353;
const int mod = 1e9 + 7;
const int maxn = 2e5 + 10;
int vis[maxn];
double dp[maxn][2];
void solve() {
int n, m, k,a;
cin >> n >> m >> k;
for (int i = 0; i < k; ++i)
cin >> a,vis[a] = 1;
double sum = 0, res = 0;
for (int i = n - 1; i >= 0; --i) {
if (vis[i]) dp[i][0] = 1.0;
else {
dp[i][1] = sum / m + 1;
dp[i][0] = res / m;
}
sum += dp[i][1] - dp[i + m][1];
res += dp[i][0] - dp[i + m][0];
}
if (abs(dp[0][0] - 1.0) < 1e-8) cout << -1;
else printf("%.4lf\n", dp[0][1] / (1 - dp[0][0]));
}
signed main() {
// ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int _ = 1;
// cin >> _;
while (_--) {
solve();
}
return 0;
}