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