NOIP2014 T1*2

2020-09-27 06:36发布

D1T1 生活大爆炸版石头剪刀布

用时:10min 复杂度:n

简单模拟,照题意打表即可

#include<cstdio>
using namespace std;
int aka(int a,int b)
{
    if(a==b)
        return 0;
    else
    {
      if(a==0&&b==1)
        return 0;
      if(a==0&&b==2)
        return 1;
      if(a==0&&b==3)
        return 1;
      if(a==0&&b==4)
        return 0;
      if(a==1&&b==0) 
        return 1;
      if(a==1&&b==2) 
        return 0;       
      if(a==1&&b==3) 
        return 1;
      if(a==1&&b==4) 
        return 0;
      if(a==2&&b==0)
        return 0;
      f(a==2&&b==1)
        return 1;
      if(a==2&&b==3)
        return 0;
      if(a==2&&b==4)
        return 1;   
      if(a==3&&b==0)
        return 0;   
      if(a==3&&b==1)
        return 0;
      if(a==3&&b==2)
        return 1;
      if(a==3&&b==4)
        return 1;
      if(a==4&&b==0)
        return 1;
      if(a==4&&b==1)
        return 1;
      if(a==4&&b==2)
        return 0;
      if(a==4&&b==3)
        return 0;
    }
}
int akb(int a,int b)
{
    if(a==b)
        return 0;
    else
    {
      if(a==0&&b==1)
        return 1;
      if(a==0&&b==2)
        return 0;
      if(a==0&&b==3)
        return 0;
      if(a==0&&b==4)
        return 1;
      if(a==1&&b==0) 
        return 0;
      if(a==1&&b==2) 
        return 1;       
      if(a==1&&b==3) 
        return 0;
      if(a==1&&b==4) 
        return 1;
      if(a==2&&b==0)
        return 1;
      if(a==2&&b==1)
        return 0;
      if(a==2&&b==3)
        return 1;
      if(a==2&&b==4)
        return 0;   
      if(a==3&&b==0)
        return 1;   
      if(a==3&&b==1)
        return 1;
      if(a==3&&b==2)
        return 0;
      if(a==3&&b==4)
        return 0;
      if(a==4&&b==0)
        return 0;
      if(a==4&&b==1)
        return 0;
      if(a==4&&b==2)
        return 1;
      if(a==4&&b==3)
        return 1;
    }
}
int main()
{
    int n,a,b;
    scanf("%d%d%d",&n,&a,&b);
    int akioi[a+5],aknoi[b+5]; 
    for(int i=1;i<=a;i++)
        scanf("%d",&akioi[i]);
    for(int i=1;i<=b;i++)
        scanf("%d",&aknoi[i]);
    int sum[n+5],num[n+5];
    for(int i=1;i<=n;i++)
    {
        if(i%a!=0)
        sum[i]=akioi[i%a];
    else
        sum[i]=akioi[a];
    }
    for(int i=1;i<=n;i++)
    {
        if(i%b!=0)
        num[i]=aknoi[i%b];
    else
        num[i]=aknoi[b];
    }
    int ans_a=0,ans_b=0;
    for(int i=1;i<=n;i++)
    {
        ans_a+=aka(sum[i],num[i]);
        ans_b+=akb(sum[i],num[i]);
    }
    printf("%d %d",ans_a,ans_b);
    return 0;
}

 

D2T1 无线网络发射器选址

用时:10min 复杂度 :n^4

简单模拟,注意维护边界,比较方便的做法是把所有的坐标加上20

#include<cstdio>
#include<algorithm>
using namespace std;
int mp[175][175],an[175][175];
int main()
{
    int d,n,tot=0,ans=-432143;
    scanf("%d%d",&d,&n);
    for(int i=1,x,y,k;i<=n;i++)
    {
        scanf("%d%d%d",&x,&y,&k);
        mp[x+20][y+20]=k;
    }
    for(int i=20;i<=148;i++)
        for(int j=20;j<=148;j++)
            for(int a=i-d;a<=i+d;a++)
                 for(int b=j-d;b<=j+d;b++)
                     an[i][j]+=mp[a][b],ans=max(an[i][j],ans);
    for(int i=20;i<=148;i++)
        for(int j=20;j<=148;j++)
            if(an[i][j]==ans)
                tot++;
    printf("%d %d",tot,ans);
    return 0;
}

 

标签: