第十三届题目

九进制转十进制

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

int main(int argc, char *argv[])
{
  printf("%d",2*1+2*9+2*9*9*9);
  return 0;
}

顺子日期

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

int main(int argc, char *argv[])
{
  printf("14");
  return 0;
}

刷题统计

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

typedef long long ll;

int main(int argc, char *argv[])
{
  ll a,b,n;
  scanf("%lld %lld %lld",&a,&b,&n);
  ll week=a*5+b*2;
  ll t=n%week;
  ll x=n/week*7;
  if(t!=0)
  {
    ll sum=0,k=0;
    for(int i=1;i<=5;i++)
    {
      sum+=a;
      if(sum>=t) 
      {
        printf("%lld",x+i);
        return 0;
      }
    }
    for(int i=1;i<=2;i++)
    {
      sum+=b;
      if(sum>=t)
      {
        printf("%lld",x+i+5);
        return 0;
      }
    }
  }
  printf("%lld",x);
  return 0;
}

修剪灌木

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

int main()
{
  int n;
  scanf("%d",&n);
  for(int i=1;i<=n/2;i++)
  {
    printf("%d\n",2*n-2*i);
  }
  if(n%2!=0) printf("%d\n",n-1);
  for(int i=n/2;i>0;i--)
  {
    printf("%d\n",n*2-i*2);
  }
  return 0;
}

X 进制减法

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

int max2(int a,int b)
{
  return a>b?a:b;
}

int max3(int a,int b,int c)
{
  int t=max2(a,b);
  return t>c?t:c;
}

int main(int argc, char *argv[])
{
  int n;
  scanf("%d",&n);
  int ma;
  scanf("%d",&ma);
  int a[100005];
  for(int i=ma-1;i>=0;i--)
  {
    scanf("%d",&a[i]);
  }
  int mb;
  scanf("%d",&mb);
  int b[100005];
  for(int i=mb-1;i>=0;i--)
  {
    scanf("%d",&b[i]);
  }
  int t=max2(ma,mb);
  long long ans=0;
  for(int i=t-1;i>=0;i--)
  {
    int m1=(i<ma)?a[i]:0;
    int m2=(i<mb)?b[i]:0;
    int x=max3(m1+1,m2+1,2);
    ans=(ans*(long long)x+(long long)(m1-m2))%1000000007;
    if(ans<0) ans+=1000000007;
  }
  printf("%lld",ans);
  return 0;
}

统计子矩阵

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

int main(int argc, char *argv[])
{
  int n,m;
  long long k;
  int a[1000][1000];
  scanf("%d %d %lld",&n,&m,&k);
  for(int i=0;i<n;i++)
  {
    for(int j=0;j<m;j++)
    {
      scanf("%d",&a[i][j]);
    }
  }
  long long cnt=0;
  long long col_sum[1000];
  for(int top=0;top<n;top++)
  {
    for(int j=0;j<m;j++)
    {
      col_sum[j]=0;
    }
    for(int bottom=top;bottom<n;bottom++)
    {
      for(int j=0;j<m;j++)
      {
        col_sum[j]+=a[bottom][j];
      }
      int left=0;
      long long current_sum=0;
      for(int right=0;right<m;right++)
      {
        current_sum+=col_sum[right];
        while(current_sum>k&&left<=right)
        {
          current_sum-=col_sum[left];
          left++;
        }
        if(current_sum<=k)
        {
          cnt+=(long long)(right-left+1);
        }
      }
    }
  }
  printf("%lld",cnt);
  return 0;
}

积木画

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

typedef long long ll;
const mod=1000000007;

int dp[10000010][3];

int main(int argc, char *argv[])
{
  dp[0][2]=1;
  dp[1][2]=1;
  int n;
  scanf("%d",&n);
  for(int i=2;i<=n;i++)
  {
    dp[i][0]=((ll)dp[i-1][1]+dp[i-2][2])%mod;
    dp[i][1]=((ll)dp[i-1][0]+dp[i-2][2])%mod;
    dp[i][2]=((ll)dp[i-1][2]+dp[i-1][0]+dp[i-1][1]+dp[i-2][2])%mod;
  }
  printf("%d",dp[n][2]);
  return 0;
}

扫雷

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

int main(int argc, char *argv[])
{
  int n,m;
  scanf("%d %d",&n,&m);
  int a[1005][1005],b[1005][1005];
  for(int i=0;i<n;i++)
  {
    for(int j=0;j<m;j++)
    {
      scanf("%d",&a[i][j]);
    }
  }
  int dx[]={1,1,1,-1,-1,-1,0,0};
  int dy[]={1,-1,0,1,-1,0,1,-1};
  for(int i=0;i<n;i++)
  {
    for(int j=0;j<m;j++)
    {
      if(a[i][j]==1) 
      {
        b[i][j]=9;
        continue;
      }
      int cnt=0;
      for(int k=0;k<8;k++)
      {
        int x=i+dx[k],y=j+dy[k];
        if(x>=0&&y>=0&&x<n&&y<m) 
        {
          if(a[x][y]==1) cnt++;
        }
      }
      b[i][j]=cnt;
    }
  }
  for(int i=0;i<n;i++)
  {
    for(int j=0;j<m;j++)
    {
      printf("%d ",b[i][j]);
    }
    printf("\n");
  }
  return 0;
}

砍竹子

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

typedef long long ll;

ll h[200005][8];

ll sum(ll n)
{
  ll res=sqrtl(n/2+1);
  return res;
}

int main(int argc, char *argv[])
{
  ll n,res=0;
  scanf("%lld",&n);
  for(int i=0;i<n;i++)
  {
    scanf("%lld",&h[i][0]);
    for(int j=1;h[i][j-1]>1;j++)
    {
      h[i][j]=sum(h[i][j-1]);
      res++;
    }
  }
  for(int i=0;i<n-1;i++)
  {
    for(int j=0;h[i][j]!=1;j++)
    {
      for(int k=0;h[i+1][k]!=1;k++)
      {
        if(h[i][j]==h[i+1][k])
        {
          res--;
          break;
        }
      }
    }
  }
  printf("%lld",res);
  return 0;
}
相关推荐
BothSavage20 分钟前
Trae远程开发中DeepSeek自定义模型4054错误的排查与修复
算法
小林ixn22 分钟前
从暴力到KMP:一道题彻底搞懂字符串匹配的前世今生
算法
烬羽2 小时前
字符串算法入门:从反转字符串到回文判断,面试不再慌
算法·面试
郝学胜_神的一滴2 小时前
CMake 034:生成器表达式:解耦构建时序、精简分支逻辑的终极利器
c++·cmake
先吃饱再说18 小时前
判断回文字符串,从一行代码到双指针优化
算法
见过夏天18 小时前
C++ 基础入门完全指南
c++
黄敬峰20 小时前
深入理解算法核心:从递归思想、数组扁平化到快速排序
算法
得物技术1 天前
从狂野代码到按目标生产:得物推荐 AI Harness 的工程化实践|AICon 演讲整理
人工智能·算法·架构
AI小老六1 天前
SkillOpt 架构拆解:把 Skill 文本当参数,用执行轨迹训练 Agent
后端·算法·ai编程