第十五届题目

握手问题

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;
}
相关推荐
Old Uncle Tom28 分钟前
OpenClaw 记忆系统 -- 记忆预加载
java·数据结构·算法·agent
会编程的土豆38 分钟前
洛谷题单入门1 顺序结构
数据结构·算法·golang
生信碱移40 分钟前
PACells:这个方法可以鉴定疾病/预后相关的重要细胞亚群,作者提供的代码流程可以学习起来了,甚至兼容转录组与 ATAC 两种数据类型!
人工智能·学习·算法·机器学习·数据挖掘·数据分析·r语言
蜡台1 小时前
Python包管理工具pip完全指南-----2
linux·windows·python
智者知已应修善业1 小时前
【51单片机中的打飞机设计】2023-8-25
c++·经验分享·笔记·算法·51单片机
^—app5668661 小时前
游戏运存小启动不起来临时解决方法
运维·服务器
Ujimatsu1 小时前
虚拟机安装Debian 13.x及其常用软件(2026.4)
linux·运维·ubuntu
千百元1 小时前
zookeeper启不来了
linux·zookeeper·debian
志栋智能2 小时前
超自动化安全:构建智能安全运营的核心引擎
大数据·运维·服务器·数据库·安全·自动化·产品运营
AnalogElectronic3 小时前
linux 测试网络和端口是否连通的命令详解
linux·网络·php