5 条题解

  • 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
      @ 2025-7-1 23:21:50

      题解 思路 两次循环遍历出所有可能的组合。

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

      解题方法 没什么好说的,枚举每个可能的 i i 和 j j,统计答案。

      复杂度 时间复杂度: 因为是双重循环,所以是 O ( n 2 ) 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; }

      • -2
        @ 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;
        }
        
        • -2
          @ 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;
          }
          
          • -3
            @ 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
            标签
            递交数
            413
            已通过
            265
            上传者