晚上自虐拿前年杭州的题来刷。。果然是凶残,目测是4题打铁的节奏。。
hdu 4461 The Power of Xiangqi
题意:象棋每个棋子赋予了一定的战力,比较红方还是黑方战力高。
思路:略。
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
int power[]={16,7,8,1,1,2,3};
int main(){
int t;
cin>>t;
while(t--){
int pa=0;
int pb=0;
int na;
cin>>na;
bool checkc=0;
bool checkb=0;
for(int i=1;i<=na;i++){
char q[4];
cin>>q;
pa+=power[q[0]-'A'];
if(q[0]=='C')checkc=1;
if(q[0]=='B')checkb=1;
}
if(!(checkc&&checkb)&&pa)pa--;
int nb;
cin>>nb;
checkc=0;
checkb=0;
for(int i=1;i<=nb;i++){
char q[4];
cin>>q;
pb+=power[q[0]-'A'];
if(q[0]=='C')checkc=1;
if(q[0]=='B')checkb=1;
}
if(!(checkc&&checkb)&&pb)pb--;
if(pa==pb){
cout<<"tie"<pb){
cout<<"red"<
hdu 4463 Outlets
题意:求最小生成树,其中一条边必须连着。
思路:先连一条边,然后跑kruskal。
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;
int x[55];
int y[55];
bool vis[55];
double dis[55][55];
struct edge{
int u,v;
double len;
};
edge E[50*50];
bool cmp(edge a,edge b){
return a.len>n){
if(!n)break;
memset(vis,0,sizeof(vis));
for(int i=1;i<=n;i++)p[i]=i;
int a,b;
cin>>a>>b;
for(int i=1;i<=n;i++){
cin>>x[i]>>y[i];
}
int end=0;
for(int i=1;i<=n;i++){
for(int j=i+1;j<=n;j++){
dis[i][j]=dis[j][i]=calc(i,j);
E[end].u=i;
E[end].v=j;
E[end++].len=calc(i,j);
}
}
sort(E,E+end,cmp);
_union(a,b);
double ans=0.0;
ans+=dis[a][b];
for(int t=2;t
hdu 4460 Friend Chains
题意:求图的直径。
思路:人名(字符串)用map映射到整数,然后根据关系建图。图直径的求法是随便找一个点x,找出离x最远的点u(如果有多个,取度最小的点),然后从u出发,找最远的点v,uv的距离就是图的直径。
#include
#include
#include
#include
#include
#include
hdu 4462 Scaring the Birds
题意:一片N*N田地,有一些空地(至多10)可以插稻草人,每个地方插的稻草人能监视的距离为R(曼哈顿距离),问最少多少个稻草人能监视整片田。
思路:暴力。用10位二进制整数表示插稻草人的情况。对每种情况暴力判断每个格子是否被监视。注意能插稻草人的地方不用监视,特别是整片田都能插的情况。。。
#include
#include
#include
#include
#include
#include