CodeTON Round 1 (Div. 1 + Div. 2, Rated, Prizes)(A-C)

简介: 算法

A. Good Pairs


题意:

17.png


思路:

观察上面的数学等式,有没有发现只要绝对值开出来不变号,那么一定成立?所以取个最大和最小即可

#include<bits/stdc++.h>
using namespace std;
const int maxn=2e5+100;
struct node{
  int v,idx;  
}a[maxn];
bool cmp1(node a,node b)
{
  return a.v<b.v;
}
int main()
{
  int n,i,j,t;
  cin>>t;
  while(t--)
  {
    cin>>n;
    for(i=0;i<n;i++)
    {
      cin>>a[i].v;
      a[i].idx=i+1;
    }
    sort(a,a+n,cmp1);
    cout<<a[0].idx<<" "<<a[n-1].idx<<endl;
  }
  return 0;
}


B. Subtract Operation


题意:

您将得到一个n整数列表。您可以执行以下操作:从列表中选择一个元素x,从列表中擦除x,并从其余所有元素中减去x的值。因此,在一个操作中,列表的长度精确地减少了1


思路:

拿三个数玩一下就知道了,比如 1 2 3 ,假设把1拿走,剩下就是1 2 ,再拿走一个就是1,有没有发现,一直拿下去,到最后剩下的两个数时,他们的差和变化之前是一样的,也就是说本来最后两个假设是2和3,他们的差就是1,最后虽然是1和2,但是他们的差还是1,所以既然每个数的差是固定的,那么其实我就找数组中有没有任意两个数的差为k就好

#include<bits/stdc++.h>
using namespace std;
map<long long ,long long >mo;
#define int long long 
const int maxn=2e5+1000;
int a[maxn];
signed main()
{
  int n,i,j,t,k;
  cin>>t;
  while(t--)
  {
    cin>>n>>k;
    for(i=0;i<n;i++)
    {
      cin>>a[i];
      mo[a[i]+k]++;
    }
    int flag=0;
    for(i=0;i<n;i++)
    {
      if(mo[a[i]]){
        flag=1;
        break;
      }
    } 
    if(flag) cout<<"YES"<<endl;
    else cout<<"No"<<endl;
    mo.clear();
  }
  return 0;
}


C. Make Equal With Mod


题意:

您将得到一个nn个非负整数的数组a1,a2,…。,a2,…...您可以进行以下操作:选择一个整数x≥2x≥2,并将数组的每个数除以xx,即对于所有1≤i≤N Set ai到ai%x时,将该数组的每个数替换为余数。


思路:

整体操作和上面一样,不过是用x%上每个数然后用他们的余数去代替,并且选的x可以任意,但是得大于等于2,首先不难发现,既然x随意选,那么只要大于2的都用它本身去取余直接就为0了,于是乎你从大到小一个数一个数余小去都可以得到0,那么没有出现1的情况都有解,现在思考有1的情况。


①有1的情况下如果有0那么一定是NO,因为无法进行取余操作,他们不会改变了


②有1的情况下1肯定是固定的,想办法把他们都变为1,那么余本身是0,余本身-1就是1了,所以就排序找一下数组里有没有出现过比他小1的即可。


我考场代码比较乱,最后几分钟过的。。哎,之前一直猜结论就芭比Q了,也是灵光一闪过的

#include<bits/stdc++.h>
using namespace std;
const int maxn=2e5+1000;
int a[maxn],c1[maxn];
signed main()
{
  int n,i,j,t,k;
  cin>>t;
  while(t--)
  {
    cin>>n;
    int f1=0,f2=0,d1=0,d2=0,cnt=0,b1=0;
    for(i=0;i<n;i++)
    {
      cin>>a[i];
      if(a[i]==1) d1=1;
      else if(a[i]==0){
        d2=1;
      }
      else 
        c1[cnt++]=a[i];
        if(a[i]==2) b1=1;
      if(a[i]%2==0) f2++;
      else f1++;
    }
    if(d1==0||f1==n||f2==n)
    {
      cout<<"YEs"<<endl;
    }
    else if(d1&&d2)
    {
      cout<<"No"<<endl;
    }
    else  
    {
      int dx=0,flag=0;
      sort(c1,c1+cnt);
      for(i=1;i<cnt;i++)
      {
        if(c1[i]-c1[i-1]==1) flag=1;
      }
      if(flag==0&&b1==0)
      {
        cout<<"YES"<<endl;
      }else 
      {
        cout<<"No"<<endl;
      }
    }
  }
  return 0;
}


相关文章
【Bug】Android resource linking failed和error: failed linking references.
【Bug】Android resource linking failed和error: failed linking references.
|
10月前
|
存储 安全 Windows
电脑怎么格式化?格式化详细步骤
格式化是我们在日常使用电脑时可能会用到的一种操作,无论是清理磁盘空间、安装新系统,还是解决磁盘读写错误,都可能需要格式化。不过,对于一些不熟悉电脑操作的用户来说,格式化听起来可能有些复杂。其实,只要掌握正确的方法,格式化并没有那么困难。本文将带您了解什么是格式化,并一步步讲解如何格式化电脑。
|
Shell Go 开发工具
使用 Hugo 快速搭建一个云博客系统
使用Hugo快速搭建博客,Hugo是基于Go的静态站点生成器,以其简单、高效著称。[官网](https://gohugo.io/) 提供多种主题,如[m10c](https://themes.gohugo.io/themes/hugo-theme-m10c/)等。在Mac上可通过`brew install hugo`安装。创建站点`hugo new site ~/hugo-blog`,
359 0
使用 Hugo 快速搭建一个云博客系统
|
消息中间件 人工智能 运维
|
NoSQL Redis
透视Redis集群:心跳检测如何维护高可用性
Redis心跳检测保障集群可靠性,通过PING命令检测主从连接状态,预防数据丢失。当连接异常时,自动触发主从切换。此外,心跳检测辅助实现`min-slaves-to-write`和`min-slaves-max-lag`策略,避免不安全写操作。还有重传机制,确保命令无丢失,维持数据一致性。合理配置心跳检测,能有效防止数据问题,提升Redis集群的高可用性。关注“软件求生”获取更多Redis知识!
832 10
透视Redis集群:心跳检测如何维护高可用性
|
JavaScript 定位技术
vue 百度地图开发【教程】3. 自定义百度地图主题
vue 百度地图开发【教程】3. 自定义百度地图主题
343 0
|
数据可视化 JavaScript 数据挖掘
探索R语言中的数据可视化工具
【4月更文挑战第25天】本文介绍了R语言的数据可视化,重点关注ggplot2和lattice包。ggplot2基于图形语法,允许用户通过图层创建复杂图表,例如`ggplot(data, aes(x=x_variable, y=y_variable)) + geom_point()`可绘制散点图。lattice包适用于多变量数据展示,如分面散点图。此外,还提到了plotly、D3.js和shiny等其他可视化工具,以及地图绘制和热图创建技巧。掌握这些工具能帮助数据分析人员更好地理解和呈现数据。
229 1
|
JavaScript
JS【详解】Symbol (含Symbol 作为属性名,静态方法for 和 keyFor,11 个内置的 Symbol 值)
JS【详解】Symbol (含Symbol 作为属性名,静态方法for 和 keyFor,11 个内置的 Symbol 值)
277 1
|
SQL 缓存 关系型数据库
MySQL的万字总结(缓存,索引,Explain,事务,redo日志等)
MySQL的万字总结(缓存,索引,Explain,事务,redo日志等)
246 0