Codeforces Round #210 (Div. 2)

本文分享了两道Levko竞赛题目的解决方案。第一题要求构造一个n×n矩阵,使得每一行每一列的元素之和等于k;第二题则需要找出一个数列,该数列中恰好有k个元素与其位置的欧几里得最大公约数大于1。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本不想写,毕竟就打了一个小时(训练题变成个人赛了T_T),但是第一次水题4分钟搞定,手速一点没涨,纯粹就是脑子快^_^。

A. Levko and Table

题意:输入n和k,要求输出n行n列的矩阵满足每行每列的数和等于k。

代码如下:

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
#define INF 0x3f3f3f3f
int a[105][105];
int main()
{
  int n,k;
  cin>>n>>k;
  memset(a,0,sizeof(a));
  for(int i=0;i<n;i++)
  {
    for(int j=0;j<n;j++)
    {
      if(i==j)
      {
        a[i][j]=k;
      }
    }
  }
  for(int i=0;i<n;i++)
  {
    for(int j=0;j<n;j++)
    {
      if(j==n-1)
        cout<<a[i][j];
      else
      cout<<a[i][j]<<" ";
    }
    cout<<endl;
  }
}
B Levko and Permutation

题意:输入n和k,求是否存在一个数列,使得这个数列存在k个数是good数,good数是第i个数和i的最大公约数大于1。存在输出这个数列,不存在输出-1,数列的所有数最大是n还有每个数不同。

思路:首先n等于k时就不存在毕竟1和任何数的最大公约数都是1,然后直接将前面n-k-1个数直接i+1第n-k处理为1,其他的直接等于i就行了。

代码如下:

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
#define INF 0x3f3f3f3f
int a[100005];
int main()
{
  int n,k;
  cin>>n>>k;
  if(n==k)
  {
    printf("-1\n");return 0;
  }
  if(n==1&&k==0)
  {
    cout<<1<<endl;return 0;
  }
  //memset(a,0,sizeof(a));
  for(int i=1;i<=n;i++)
  {
    a[i]=i;
  }
  for(int i=1;i<n-k;i++)
  {
    a[i]=a[i+1];
  }
  a[n-k]=1;
  for(int i=1;i<=n;i++)
  {
    if(i==n) cout<<a[i]<<endl;
    else
    cout<<a[i]<<" ";
  }
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值