A题:https://codeforces.com/contest/1271/problem/A
题意:这道题的话,就是给你一套衣服的四个部件,a,d部件可以组成一套衣服,b,c,d部件也可以组成一套衣服,花费分别是e和f。问你最多需要多少花费能做完衣服。
思路:思路的话就是分成两种情况讨论,比较简单。
AC代码:
#include <bits/stdc++.h>
typedef long long ll;
const int maxx=10010;
const int inf=0x3f3f3f3f;
using namespace std;
int main()
{
int a,b,c,d,e,f;
cin>>a>>b>>c>>d>>e>>f;
int cnt=0;
if(e>f)
cnt=min(a,d)*e+min(min(b,c),d-min(a,d))*f;
else
cnt=min(min(b,c),d)*f+min(a,d-min(min(b,c),d))*e;
cout<<cnt<<endl;
return 0;
}
B题:https://codeforces.com/contest/1271/problem/B
题意:这道题的话,给你一串字符串,有n个字符,其中只有W和B,W代表白色,B代表黑色。问你能不能再3n的步骤里把它们全变成白色或者黑色。
思路:思路的话,就是分情况讨论,已知如果要是n为奇数的话,肯定是不能成功的,另一种情况暴力一下即可。
AC代码:
#include <bits/stdc++.h>
typedef long long ll;
const int maxx=10010;
const int inf=0x3f3f3f3f;
using namespace std;
char a[maxx];
int b[maxx],c[maxx];
int i,n,j,s1,s2;
int main()
{
cin>>n;
getchar();
for(i=0; i<n; i++)
{
cin>>a[i];
if(a[i]=='B')
{
b[i]=0;
s1++;
}
else
{
b[i]=1;
s2++;
}
}
if(s1%2 && s2%2)
{
cout<<"-1"<<endl;
return 0;
}
for(i=0; i<n-1; i++)
{
if(b[i]==0)
{
b[i]=1-b[i];
b[i+1]=1-b[i+1];
c[j++]=i+1;
}
}
if(b[n-1]!=1)
for(i=0; i<n-1; i=i+2)
c[j++]=i+1;
cout<<j<<endl;
for(i=0; i<j; i++)
cout<<c[i]<<" ";
cout<<endl;
return 0;
}
C题:https://codeforces.com/contest/1271/problem/C
题意:给出一个点(sx,sy),再给出n个点(xi,yi)。现在找到一个点(x0,y0),使得cnt最大。每当有一个点(xi,yi)到点(sx,sy)的最短曼哈顿距离经过(x0,y0)时,cnt++。最后输出cnt和(x0,y0)。
思路:显然,所有最短曼哈顿路径必然存在于一个矩形之内。那么我们直接将所有以(sx,sy),(xi,yi)为顶点的矩形画出来即可发现最优位置只可能存在于(sx,sy)的四个方向上。所以直接统计在哪个方向上最优即可。
AC代码:
#include <bits/stdc++.h>
typedef long long ll;
const int maxx=10010;
const int inf=0x3f3f3f3f;
using namespace std;
int n,sx,sy;
int d[4];
void run()
{
for(int i=1; i<=n; i++)
{
int x,y;
cin>>x>>y;
if(x>sx)
++d[0];
else if(x<sx)
++d[1];
if(y>sy)
++d[2];
else if(y<sy)
++d[3];
}
int mx=*max_element(d,d+4);
cout<<mx<<endl;
if(d[0]==mx)
{
cout<<sx+1<<" "<<sy<<endl;
}
else if(d[1]==mx)
{
cout<<sx-1<<" "<<sy<<endl;
}
else if(d[2]==mx)
{
cout<<sx<<" "<<sy+1<<endl;
}
else
{
cout<<sx<<" "<<sy-1<<endl;
}
}
int main()
{
while(cin>>n>>sx>>sy)
run();
return 0;
}