4 条题解

  • 1
    @ 2024-10-19 12:24:27

    题解

    思路

    循环枚举

    解题方法

    循环枚举每一个可能的i与j,如果abs(a[i]-a[j])等于k,输出Yes并return 0。

    注:abs为求绝对值

    Code

    #include<bits/stdc++.h>
    using namespace std;
    int n,m,a[103];
    int main(){
        cin>>n>>m;
        for(int i=1;i<=n;i++){
            cin>>a[i];
        }
        for(int i=1;i<=n;i++){
            for(int j=i+1;j<=n;j++){
                if(abs(a[i]-a[j])==m){
                    cout<<"Yes";
                    return 0;
                }
            }
        }
        cout<<"No";
        return 0;
    }
    
    • 0
      @ 2024-10-25 19:53:34

      很简单的模拟题。考虑二重循环模拟。

      第一重循环 i=1ni=1\sim n,第二重循环 j=i+1nj=i+1\sim n,然后再进行判断即可。

      时间复杂度 Θ(n2)Θ(n^2),可以通过本题。

      伪代码

      input(a)\bold{input}(a)

      for i=1n:\bold{for}\ i=1\sim n:

          for j=i+1n:\ \ \ \ \bold{for}\ j=i+1\sim n:

              if aiaj=k:\ \ \ \ \ \ \ \ \bold{if}\ |a_i-a_j|=k:

                  (Yes)\ \ \ \ \ \ \ \ \ \ \ \ (Yes)

      (No)(No)

      AC Code

      #include<bits/stdc++.h>
      using namespace std;
      vector<int> a(1);
      int main() {
          int n,k;
          cin>>n>>k;
          for(int i=1;i<=n;i++) {
              int x;
              cin>>x;
              a.push_back(x);
          }
          for(int i=1;i<=n;i++) {
              for(int j=i+1;j<=n;j++) {
                  if(abs(a[i]-a[j])==k) {
                      cout<<"Yes";
                      return 0;
                  }
              }
          }
          cout<<"No";
          return 0;
      }
      
      • 0
        @ 2024-9-30 12:07:17

        可以对于每个数 aia_i,用一个 map 来记录他们出现过。那么只需要将所有数存进 map 后,对于每个数 aia_i,查询 ai+ka_i+k 是否存在即可。时间复杂度 Θ(nlogn)\Theta(n\log n)logn\log nmap 常数。

        #include <bits/stdc++.h>
        using namespace std;
        int a[100005];
        map<int,int> mp;
        int main() {
        	int n,k; cin >> n >> k; for(int i = 1;i <= n;i++) { cin >> a[i]; mp[a[i]]++; }
        	for(int i = 1;i <= n;i++) {
        		if(mp[a[i]+k]) {
        			cout << "Yes"; exit(0);
        		}
        	}
        	cout << "No\n";
        	return 0;
        }
        
        • -1
          @ 2024-9-28 21:30:57

          题解

          思路

          两次循环遍历出所有可能的组合。

          若前者减去后者的差为 kk,答案加 11,最终输出即可。

          解题方法

          没什么好说的,枚举每个可能的 iijj,统计答案。

          复杂度

          时间复杂度:

          因为是双重循环,所以是 O(n2)O(n^2)

          Code

          #include <bits/stdc++.h>
          using namespace std;
          int a[110];
          int main()
          {
              int n,k,op=0;
              cin>>n>>k;
              for(int i=1;i<=n;i++) cin>>a[i];
              for(int i=1;i<=n;i++)
              {
                  for(int j=1;j<=n;j++)
                  {
                      if(j!=i && a[i]-a[j]==k)
                      {
                          op=1;
                          break;
                      }
                  }
              }
              if(op) cout<<"Yes";
              else cout<<"No";
              return 0;
          }
          
          • 1

          信息

          ID
          67
          时间
          3000ms
          内存
          512MiB
          难度
          1
          标签
          递交数
          385
          已通过
          244
          上传者