A
题意:有两个游戏机在玩游戏,但是只有一个充电器,两个游戏机必须都要有电游戏才能继续。有电的标准是有一个电就行。
贪心,瞎鸡巴写了个代码,
#include <stdio.h> #include <string.h> #include <algorithm> #include <math.h> using namespace std; int main() { int a1,a2; while(~scanf("%d%d",&a1,&a2)) { int sum=0; while(1) { if(a1<=0||a2<=0) { break; } if(a1>a2) { int k1=a1-1; if(k1==1) { sum++; break; } k1/=2; a2+=k1; sum+=k1; a1=a1-k1*2; } else { int k2=a2-1; if(k2==1) { sum++; break; } else if(k2==0) { break; } k2/=2; sum+=k2; a1+=k2; a2=a2-k2*2; } } printf("%d ",sum); } return 0; }
B
题意:给你一个无序的序列,从头到尾遍历时,如果后面比前面大,happy值+1,问怎样排列才能使得happy值最大。
瞎鸡巴写的2333
#include <stdio.h> #include <string.h> #include <algorithm> #include <math.h> using namespace std; int s[1011],a[1101]; int main() { int n,d; while(~scanf("%d",&n)) { int max1=-1; memset(s,0,sizeof(s)); int ak=0; for(int i=0; i<n; i++) { scanf("%d",&d); s[d]++; if(s[d]==1) { a[ak++]=d; } if(s[d]>max1) { max1=s[d]; } } sort(a,a+ak); int sum=0; for(int i=1; i<=max1; i++) { int f=0; for(int j=0; j<ak; j++) { if(s[a[j]]>0) { if(f==0) { f=1; } else { sum++; } s[a[j]]--; } } } printf("%d ",sum); } return 0; }