A题 Suits
思路:贪心就好了,谁大就用谁
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mx=1e5+10;
const double PI=cos(-1.0);
int main()
{
int a,b,c,d,e,f,ans=0,x;
cin>>a>>b>>c>>d>>e>>f;
if(e>=f)
{
x=min(a,d);
a-=x;
d-=x;
ans+=x*e;
ans+=min(b,min(c,d))*f;
}
else
{
x=min(b,min(c,d));
b-=x;
c-=x;
d-=x;
ans=x*f;
ans+=min(a,d)*e;
}
cout<<ans<<endl;
return 0;
}
B题 Blocks
思路:也是贪心,看能不能全部变成白色或者黑色(如果是全变成白色,那么遇见黑色就变白色,相当于把黑色一直移到后面去,看最后一个是不是白色既可。全变成黑色同理),否则为-1.
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mx=1e5+10;
const double PI=cos(-1.0);
map<char,char> vs;
int a[mx];
int main()
{
int n,m=0,len,t;
string s,s1;
cin>>n>>s;
vs['B']='W';
vs['W']='B';
s1=s;
t=0;
for(int i=0;i<n-1;i++)
{
if(s[i]=='B')
{
a[m++]=i+1;
s[i]=vs[s[i]];
s[i+1]=vs[s[i+1]];
}
}
if(s[n-1]=='W')
{
cout<<m<<endl;
for(int i=0;i<m;i++)
cout<<a[i]<<" ";
cout<<endl;
return 0;
}
t=m=0;
for(int i=0;i<n-1;i++)
{
if(s1[i]=='W')
{
a[m++]=i+1;
s1[i]=vs[s1[i]];
s1[i+1]=vs[s1[i+1]];
}
}
if(s1[n-1]=='B')
{
cout<<m<<endl;
for(int i=0;i<m;i++)
cout<<a[i]<<" ";
cout<<endl;
return 0;
}
cout<<-1<<endl;
return 0;
}
C题 Shawarma Tent
思路:最后到这个点,无非就是它的上,下,左,右,四个点,那我们只要,判断在上,下,左,右的对应有几个同学选择最大的人数,既可。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mx=2e5+10;
map<int,int>vs;
int main()
{
int n,x,y,l,r,ans,sum;
cin>>n>>x>>y;
for(int i=1;i<=n;i++)
{
scanf("%d%d",&l,&r);
if(x+1<=l) vs[1]++;//右
if(x-1>=l) vs[2]++;//左
if(y+1<=r) vs[3]++;//上
if(y-1>=r) vs[4]++;//下
}
ans=0,sum=0;
for(int i=1;i<=4;i++)
{
if(ans<vs[i])
{
ans=vs[i];
sum=i;
}
}
cout<<ans<<endl;
if(sum==1)
printf("%d %d\n",x+1,y);
if(sum==2)
printf("%d %d\n",x-1,y);
if(sum==3)
printf("%d %d\n",x,y+1);
if(sum==4)
printf("%d %d\n",x,y-1);
return 0;
}