M1

来源:互联网 发布:知乎封面图 编辑:程序博客网 时间:2024/05/01 06:29

A

#include<cstdio>#include<cstdlib>#include<cmath>#include<algorithm>#include<string>#include<cstring>using namespace std;int n;char s[55];int f[55],ans=0;int l[55],ct=0;int main(){    freopen("soccer.in","r",stdin);    freopen("soccer.out","w",stdout);    scanf("%d",&n);    for(int i=1;i<=n;i++){        scanf("%s",s+1);        for(int j=1;j<=n;j++){            if(s[j]=='-')continue;            else if(s[j]=='W')f[i]+=3;            else if(s[j]=='D'){                f[i]+=1;                f[j]+=1;            }            else if(s[j]=='L')f[j]+=3;//每两支队比两次        }//      ans=max(ans,f[i]);    }    for(int i=1;i<=n;i++)ans=max(ans,f[i]);    for(int i=1;i<=n;i++){        if(f[i]==ans){            ct++;            l[ct]=i;        }    }    for(int i=1;i<ct;i++)printf("%d ",l[i]);    printf("%d\n",l[ct]);    return 0;}

B
这里写图片描述

#include<cstdio>#include<cstdlib>#include<cmath>#include<algorithm>#include<string>#include<cstring>using namespace std;int x[1005],y[1005];double dp[1005][1005];double dis[1005][1005];double min(double a,double b){    if(a-b>=0.0)return b;    return a;}double Dis(int i,int j){    if(dis[i][j])return dis[i][j];    return dis[i][j]=sqrt(1.0*(x[i]-x[j])*(x[i]-x[j])+1.0*(y[i]-y[j])*(y[i]-y[j]));}int main(){    freopen("paths.in","r",stdin);    freopen("paths.out","w",stdout);    int n,b1,b2;    scanf("%d%d%d",&n,&b1,&b2);    for(int i=0;i<n;i++)scanf("%d%d",&x[i],&y[i]);    for(int i=0;i<=n;i++)        for(int j=0;j<=n;j++)            dp[i][j]=999999.0;    dp[0][0]=0.0;    for(int i=0;i<n;i++){        for(int j=0;j<n;j++){            int k=max(i,j)+1;            if(k==n)k--;            dp[i][k]=min(dp[i][k],dp[i][j]+Dis(j,k));// MIN            dp[k][j]=min(dp[k][j],dp[i][j]+Dis(i,k));// 题解打错了            if(k==b1)dp[i][k]=999999.0;//b1在A线             if(k==b2)dp[k][j]=999999.0;//b2在B线         }    }    double ans=dp[n-1][n-1];    printf("%.2lf\n",ans);    return 0;}

C
这里写图片描述

//暴力程序 60#include <cstdio>#include <iostream>using namespace std;int n,m;int mp[200009],car[1000009];int main() {    freopen("park.in","r",stdin);    freopen("park.out","w",stdout);    int tot=0;    scanf("%d%d",&n,&m);    for(int k=1; k<=m; k++) {        int f,x;        scanf("%d%d",&f,&x);        if(f==1) {            if(!tot) {                printf("1\n");                mp[1]=x;                car[x]=1;            } else {                int last=0,maxlen=-1,ans=1;                for(int i=1; i<=n; i++) {                    if(i==n && !mp[n]) {                        if(n-last-1>maxlen) {                            ans=n;                        }                    }                    else if(mp[i]) {                        if(last==0 && mp[1]==0) {                            maxlen=i-2;                            ans=1;                        } else if((i-last)/2-1>maxlen && i>1) {                            maxlen=(i-last-2)/2;                            ans=(i+last)/2;                        }                        last=i;                    }                }                printf("%d\n",ans);                car[x]=ans,mp[ans]=x;            }            tot++;        }        if(f==2) {            mp[car[x]]=0;            tot--;        }    }    return 0;}
0 0
原创粉丝点击