A: 题意: n个男孩和m个女孩组队跳舞 ,对于(i,j)这一对,i和j至少有一个人是第一次跳,问最多多少组 。
对于任意一个女孩,他们都可以和其中一个男孩组队,然后对于其中的一个女孩,又可以和剩下的男孩组队,
B.题意:有r朵红花,g朵绿花,b朵蓝花,有四组不同的组合方式,问一共最多多少组。
我的想法比较麻烦,分别是三种花都1.先按自己三朵组合,然后再一种出一朵的组合,
2.先任两种花按自己是三朵组合,然后整体按一种出一朵的组合,然后看第三种花有没有按自己三种的组合
3.先任一种花按自己三朵的组合
4.没有花先按自己三朵的组合
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<string>
#include<math.h>
#include<map>
#include<vector>
#include<queue>
#include<stack>
#include<algorithm>
using namespace std;
int r,g,b;
int main()
{
while(cin>>r>>g>>b)
{
int sum123=r/3+g/3+b/3+min(r%3,min(g%3,b%3));
int sum12=r/3+g/3+min(r%3,min(g%3,b))+(b-min(r%3,min(g%3,b)))/3;
int sum13=r/3+b/3+min(r%3,min(b%3,g))+(g-min(r%3,min(b%3,g)))/3;
int sum23=g/3+b/3+min(r,min(b%3,g%3))+(r-min(r,min(b%3,g%3)))/3;
int sum1=r/3+min(r%3,min(b,g))+(b-min(r%3,min(b,g)))/3+(g-min(r%3,min(b,g)))/3;
int sum2=b/3+min(r,min(b%3,g))+(r-min(r,min(b%3,g)))/3+(g-min(r,min(b%3,g)))/3;
int sum3=g/3+min(r,min(b,g%3))+(b-min(r,min(b,g%3)))/3+(r-min(r,min(b,g%3)))/3;
int sum=min(r,min(g,b))+(r-min(r,min(g,b)))/3+(b-min(r,min(g,b)))/3+(g-min(r,min(g,b)))/3;
int ans=max(sum1,sum2);
ans=max(ans,sum3);
ans=max(ans,sum12);
ans=max(ans,sum23);
ans=max(ans,sum13);
ans=max(ans,sum123);
ans=max(ans,sum);
cout<<ans<<endl;
}
}
C:初始位置在(0,0),然后给你一组操作,这组操作可以被循环,问是否可以到目的位置
先找出一组操作结束后,位置的变化,
然后再从头开始,发现中间某一步和目标位置的差距是第一步中求出的变化的自然数倍,就YES;
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<string>
#include<math.h>
#include<map>
#include<vector>
#include<queue>
#include<stack>
#include<algorithm>
using namespace std;
int r,g;
char s[110];
int main()
{
while(cin>>r>>g)
{
cin>>s;
int x=0;
int y=0;
int flag=0;
for(int i=0;s[i]&&flag==0;i++)
{
if(x==r&&y==g)
{
flag=1;
}
if(s[i]=='U') y++;
if(s[i]=='D') y--;
if(s[i]=='L') x--;
if(s[i]=='R') x++;
if(x==r&&y==g)
{
flag=1;
}
}
if(!flag)
{
int a=0,b=0;
for(int i=0;s[i]&&!flag;i++)
{
if(s[i]=='U') b++;
if(s[i]=='D') b--;
if(s[i]=='L') a--;
if(s[i]=='R') a++;
if(x==0&&y==0)
{
if(a==r&&b==g)
{
flag=1;
}
}
else if(x==0&&y!=0)
{
if(a==r&&(g-b)%y==0&&(g-b)/y>=0)//记得都要判断商是不是自然数
{
flag=1;
}
}
else if(y==0&&x!=0)
{
if(b==g&&(r-a)%x==0&&(r-a)/x>=0)
{
flag=1;
}
}
else
{
if((g-b)%y==0&&(r-a)%x==0&&(g-b)/y==(r-a)/x&&(r-a)/x>=0)
{
flag=1;
}
}
}
}
printf("%s\n",flag?"Yes":"No");
}
return 0;
}