第十五届题目

握手问题

cs 复制代码
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
  int sum=0;
  for(int i=49;i>=7;i--)
  {
    sum+=i;
  }
  printf("%d",sum);
  return 0;
}

小球反弹

cs 复制代码
#include <stdio.h>
#include <math.h>

int main(int argc, char *argv[])
{
  long long t=1,x=343720,y=233333;
  while(1)
  {
    if((15*t)%x==0&&(17*t)%y==0) break;
    t++;
  }
  printf("%.2f",2*sqrt(15*15*t*t+17*17*t*t));
  return 0;
}

好数

cs 复制代码
#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
  int n;
  scanf("%d",&n);
  int cnt=0;
  for(int i=1;i<=n;i++)
  {
    int a[10000005];
    int idx=1;
    int t=i;
    while(t)
    {
      a[idx++]=t%10;
      t/=10;
    }
    int flag=1;
    for(int j=1;j<=idx;j++)
    {
      if(j%2==1)
      {
        if(a[j]%2==0)
        {
          flag=0;
          break;
        } 
      }
      else 
      {
        if(a[j]%2==1)
        {
          flag=0;
          break;
        }
      }
    }
    if(flag) cnt++;
  }
  printf("%d",cnt);
  return 0;
}

R 格式

cs 复制代码
#include <stdio.h>
#include <math.h>
#include <string.h>

#define MAX 2000

int main(int argc, char *argv[])
{
  int n;
  char d[1025];
  int b[MAX]={0};
  int b_len=0;
  int sum=0,k=0;
  int i;
  scanf("%d %s",&n,d);
  for(int i=strlen(d)-1;i>=0;i--)
  {
    if(d[i]!='.')
    {
      if(b_len<MAX)
      {
        b[b_len]=d[i]-'0';
        b_len++;
      }
    }
    else k=sum;
    sum++;
  }
  for(int i=0;i<n;i++)
  {
    int carry=0;
    for(int j=0;j<b_len;j++)
    {
      b[j]=b[j]*2+carry;
      if(b[j]>=10)
      {
        carry=b[j]/10;
        b[j]=b[j]%10;
      }
      else carry=0;
    }
    if(carry)
    {
      if(b_len<MAX)
      {
        b[b_len]=carry;
        b_len++;
      }
    }
  }
  if(k>0&&b[k-1]>=5)
  {
    int carry=1;
    for(i=k;i<b_len;i++)
    {
      b[i]=b[i]+1;
      if(b[i]<=9)
      {
        carry=0;
        break;
      }
      else b[i]-=10;
    }
    if(carry)
    {
      if(b_len<MAX)
      {
        b[b_len]=1;
        b_len++;
      }
    }
  }
  for(i=b_len-1;i>=k;i--)
  {
    printf("%d",b[i]);
  }
  return 0;
}

宝石组合

cs 复制代码
#include <stdio.h>
#include <string.h>

#define N 500010

int gem[N];
int num[N];

int main(int argc, char *argv[])
{
  int n;
  scanf("%d",&n);
  int max=-0x3f3f3f3f;
  for(int i=0;i<n;i++)
  {
    scanf("%d",&gem[i]);
    num[gem[i]]++;
    if(gem[i]>max) max=gem[i];
  }
  for(int i=max;i>=1;i--)
  {
    int tmp[3];
    int pos=0;
    int cnt=0;
    for(int j=i;j<=max;j+=i)
    {
      if(num[j])
      {
        cnt+=num[j];
        for(int k=0;k<num[j]&&pos<3;k++)
        {
          tmp[pos++]=j;
        }
      }
      if(cnt>=3) break;
    }
    if(cnt>=3)
    {
      for(int j=0;j<3;j++)
      {
        printf("%d ",tmp[j]);
      }
      printf("\n");
      break;
    }
  }
  return 0;
}

数字接龙

cs 复制代码
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int n,k;
int g[11][11];
int dx[8]={-1,-1,0,1,1,1,0,-1};
int dy[8]={0,1,1,1,0,-1,-1,-1};

char path[121];
int path_len=0;

int st[11][11];
int edge[11][11][11][11];

int dfs(int a,int b)
{
  if(a==n-1&&b==n-1) 
  {
    return path_len==n*n-1;
  }
  st[a][b]=1;
  for(int i=0;i<8;i++)
  {
    int x=a+dx[i],y=b+dy[i];
    if(x<0||x>=n||y<0||y>=n) continue;
    if(st[x][y]) continue;
    if(g[x][y]!=(g[a][b]+1)%k) continue;
    if(i%2&&(edge[a][y][x][b]||edge[x][b][a][y])) continue;
    edge[a][b][x][y]=1;
    path[path_len++]=i+'0';
    if(dfs(x,y)) return 1;
    path_len--;
    edge[a][b][x][y]=0;
  }
  st[a][b]=0;
  return 0;
}

int main(int argc, char *argv[])
{
  scanf("%d %d",&n,&k);
  for(int i=0;i<n;i++)
  {
    for(int j=0;j<n;j++)
    {
      scanf("%d",&g[i][j]);
    }
  }
  memset(st,0,sizeof(st));
  memset(edge,0,sizeof(edge));
  path_len=0;
  if(!dfs(0,0)) printf("-1\n");
  else 
  {
    path[path_len]='\0';
    printf("%s\n",path);
  }
  return 0;
}

拔河

cs 复制代码
#include <stdio.h>
#include <stdlib.h>
#include <math.h>

#define N 1004

typedef long long ll;

ll min(ll a,ll b)
{
  return a<b?a:b;
}

ll abs_ll(ll x)
{
  return x<0?-x:x;
}

int main() {
  int n;
  scanf("%d",&n);
  ll a[N];
  for(int i=1;i<=n;i++)
  {
    scanf("%lld",&a[i]);
  }
  ll ans=1e14;
  for(int l=1;l<=n;l++)
  {
    for(int r=n;r>l;r--)
    {
      int i=l,j=r;
      ll sum1=a[i],sum2=a[j];
      ans=min(ans,abs_ll(sum1-sum2));
      if(ans==0)
      {
        printf("0");
        return 0;
      }
      while(i+1<=j)
      {
        if(sum1==sum2)
        {
          printf("0");
          return 0;
        }
        if(sum1>sum2)
        {
          j--;
          sum2+=a[j];
        }
        else if(sum1<sum2)
        {
          i++;
          sum1+=a[i];
        }
        ans=min(ans,abs_ll(sum1-sum2));
      }
    }
  }
  printf("%lld",ans);
  return 0;
}
相关推荐
凤年徐2 小时前
Linux权限详解:从入门到掌握
linux·运维·服务器
以太浮标2 小时前
华为eNSP模拟器综合实验之- 华为USG6000V防火墙配置防御DoS攻击实战案例解析
运维·网络协议·网络安全·华为·信息与通信
努力打怪升级2 小时前
Apache HTTP Server 2.4 Windows 版完整配置与运维手册
运维·http·apache
zzzyyy5382 小时前
进程优先级
linux·运维·服务器
腾科IT教育2 小时前
华为云计算运维工程师怎么考?2026年报考攻略
运维·华为云·华为认证·hcip考试·华为hcip考试
我头发多我先学2 小时前
C++ STL vector 原理到模拟实现
c++·算法
小鸡食米2 小时前
Linux-例行性工作+时间服务器
linux·服务器·网络
机器学习之心2 小时前
信号分解和小波阈值联合降噪 | NRBO-FMD基于牛顿拉夫逊算法优化特征模态分解+皮尔逊系数+小波阈值降噪+信号重构,MATLAB代码
算法·matlab·重构·nrbo-fmd·特征模态分解
Lauren_Blueblue2 小时前
第十六届蓝桥杯省赛Python研究生组-F串
python·算法·蓝桥杯·算法基础