Educational Codeforces Round 112 (Rated for Div. 2) A-D
Posted 尘封陌路
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Educational Codeforces Round 112 (Rated for Div. 2) A-D相关的知识,希望对你有一定的参考价值。
A. PizzaForces
可以发现每个披萨都是2片5分钟,那么对于偶数的情况ans=n/2*5。
对于奇数的情况需要多给一片,那么让n++ 后,成为偶数再处理。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
int t;
cin>>t;
while(t--)
ll n;
cin>>n;
ll ans=0;
if(n<=6)
cout<<"15"<<endl;
continue;
if(n<=8)
cout<<"20"<<endl;
continue;
if(n<=10)
cout<<"25"<<endl;
continue;
if(n%2==0)
ans=n/2;
ans*=5;
if(n%2==1)
n++;
ans=n/2;
ans*=5;
// ans+=20;
cout<<ans<<endl;
return 0;
B - Two Tables
一开始把题意看错了,以为新桌子只能放在左下角。
可以理解为只要旧桌子挪出空间,那么新桌子就可以随意放。
那么只要画一个图,即中间有个旧桌子,然后矩形的四个顶点各放一个桌子。 就可以枚举 旧桌子 向左,向右,向上,向下移动的花费,取最小即可。
#include<bits/stdc++.h>
using namespace std;
double W,H,x1,x2,y1,y2,w,h;
void solve()
double ans=0x3f3f3f3f;
if(w+(x2-x1)<=W)
ans=min(ans,w-x1);
ans=min(ans,x2-W+w);
if(ans<0) ans=0;
if(h+(y2-y1)<=H)
ans=min(ans,h-y1);
double d=y2-H+h;
ans=min(ans,d);
if(ans<0) ans=0;
if(ans==0x3f3f3f3f) cout<<"-1"<<endl;
else printf("%.6lf\\n",ans);
int main()
int T;
cin>>T;
while(T--)
double ans=0;
cin>>W>>H;
cin>>x1>>y1;
cin>>x2>>y2;
cin>>w>>h;
solve();
return 0;
C - Coin Rows
因为只能向右或者向下,所以每个人只有一次向下的机会。
那么就枚举A每一次从哪里向下。如图 红色的就是A走的。那么剩下的只有蓝色的可以给B走,那么B肯定会取max, 然后遍历一遍在所有B的得分中取min,用两个前缀和就可以实现。
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int a[3][N];
int s1[N];
int s2[N];
int main()
int t;
cin>>t;
while(t--)
int n;
cin>>n;
for(int i=1;i<=2;i++)
for(int j=1;j<=n;j++)
cin>>a[i][j];
for(int i=1;i<=n;i++)
s1[i]=s1[i-1]+a[1][i];
s2[i]=s2[i-1]+a[2][i];
int res=0;
int maxx=-1;
int ans=0x3f3f3f3f;
int k;
for(int i=1;i<=n;i++)
if(i==1)
k=s1[n]-s1[1];
else if(i==n)
k=s2[n-1];
else
k=max(s1[n]-s1[i],s2[i-1]);
ans=min(ans,k);
// printf("maxx=%d k=%d \\n",maxx,k);
cout<<ans<<endl;
return 0;
D - Say No to Palindromes
预处理。
把abc的全排列列出来,那么有6种,把给定字符串隔3个分块。和这6个去比较。
计算当到j时,用的是i的循环所需要的花费。
然后再用前缀和 在6个当中取min
#include<bits/stdc++.h>
#define ios ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
using namespace std;
const int N=2e5+10;
typedef long long ll;
int n,m;
string a[7]="abc","acb","bac","bca","cab","cba";
string s;
ll f[7][N];
int q;
int lenth;
void init2()
for(int i=1;i<lenth;i++)
for(int j=0;j<6;j++)
f[j][i]+=f[j][i-1];
void init()
lenth=s.size();
for(int i=0;i<lenth;i++)
for(int j=0;j<6;j++)
if(s[i]!=a[j][i%3]) f[j][i]++;
init2();
void solve()
while(q--)
int l,r;
cin>>l>>r;
l--;r--;
ll ans;
if(l==0)
ans=min(f[0][r],f[1][r],f[2][r],f[3][r],f[4][r],f[5][r]);
else
ans=min(f[0][r]-f[0][l-1],f[1][r]-f[1][l-1],f[2][r]-f[2][l-1],f[3][r]-f[3][l-1],f[4][r]-f[4][l-1], f[5][r]-f[5][l-1]);
cout<<ans<<"\\n";
int main()
IOS
cin>>n>>q;
cin>>s;
init();
solve();
E待补
以上是关于Educational Codeforces Round 112 (Rated for Div. 2) A-D的主要内容,如果未能解决你的问题,请参考以下文章
Educational Codeforces Round 7 A
Educational Codeforces Round 7
Educational Codeforces Round 90
Educational Codeforces Round 33