半小时A两题,当时感觉C能做出来,可是后来才发现搞错题意了,要DP……
A
#include<stdio.h>
#include<stdlib.h>
#include<algorithm>
#include<math.h>
#include<string.h>
using namespace std;
#define rep(i,n) for(int (i)=0;(i)<(int)(n);++(i))
#define rer(i,l,u) for(int (i)=(int)(l);(i)<=(int)(u);++(i))
#define reu(i,l,u) for(int (i)=(int)(l);(i)<(int)(u);++(i))
typedef long long LL;
int main()
{
int n,tem,t2;
scanf("%d",&n);
rep(i,n-1) scanf("%d",&tem);
scanf("%d",&t2);
if(t2==0) printf("UP\n");
else if(t2==15) printf("DOWN\n");
else if(n==1) printf("-1\n");
else if(tem<t2) printf("UP\n");
else printf("DOWN\n");
}
B
#include<stdio.h>
#include<stdlib.h>
#include<algorithm>
#include<math.h>
#include<string.h>
using namespace std;
#define rep(i,n) for(int (i)=0;(i)<(int)(n);++(i))
#define rer(i,l,u) for(int (i)=(int)(l);(i)<=(int)(u);++(i))
#define reu(i,l,u) for(int (i)=(int)(l);(i)<(int)(u);++(i))
const int MAXN=100005;typedef long long LL;
char str[MAXN];
char rfirst[MAXN];
char bfirst[MAXN];
int main()
{
int n,t1;
int rcnt=0;int bcnt=0;int rcntb=0;int rcntr=0;
int bcntr=0;int bcntb=0;int mn=0;int mx=0;
bool flag=0;
int ans=0;
scanf("%d",&n);
scanf("%s",str);
rep(i,n)
{
if(!flag)
{
rfirst[i]='r';
bfirst[i]='b';
}
else
{
rfirst[i]='b';
bfirst[i]='r';
}
flag=!flag;
}
rfirst[n]=bfirst[n]='\0';
rep(i,n)
{
if(rfirst[i]!=str[i])
{
if(rfirst[i]=='r') rcntr++;
else rcntb++;
}
if(bfirst[i]!=str[i])
{
if(bfirst[i]=='r') bcntr++;
else bcntb++;
}
}
mn=min(rcntr,rcntb);
mx=max(rcntr,rcntb);
rcnt=mn+(mx-mn);
//printf("%d %d\n",mx,mn);
mn=min(bcntr,bcntb);
mx=max(bcntr,bcntb);
bcnt=mn+(mx-mn);
//printf("%d %d\n",mx,mn);
ans=min(rcnt,bcnt);
printf("%d\n",ans);
}