3 条题解

  • 3
    @ 2022-10-31 0:27:14
    #include<iostream>
    #include<queue>
    #include<stack>
    #include<math.h>
    #include<string.h>
    #include<algorithm>
    using namespace std;
    const int maxn=1e5+10;
    int number[maxn];
    int main(){
    	int n;
    	scanf("%d", &n);
    	while(n--){
    		int m;
    		scanf("%d", &m);
    		for(int i=0;i<m;i++){
    			scanf("%d", &number[i]);
    		}
    		int ans=0,k;
    		while(m>1){
    			sort(number+ans,number+m);
    			for(int i=ans;i<m;i++){
    				if(number[i]==0){
    					ans++;
    				}else{
    					break;
    				}
    			}
    			if(ans>0){
    				ans--;
    			}
    			k=ans;
    			for(int i=k;i<m-1;i++){
    				number[i]=number[i+1]-number[i];
    			}
    			m--;
    		}
    		printf("%d\n", number[ans]);
    	}
    }
    
    • @ 2022-10-31 0:31:51

      英雄可以受委屈,但是你不能踩我的切尔西

  • 2
    @ 2022-11-1 12:16:39
    #include<cstdio>
    #include<algorithm>
    using namespace std;
    
    int a[100001];
    
    int main()
    {
        int t;
        scanf("%d",&t);
        int n;
        int i,j;
        while(t--)
        {
            int n;
            scanf("%d",&n);
            j=-2;
            for(i=0;i<n;i++)
            {
                scanf("%d",&a[i]);
                if(a[i]!=0&&j==-2)j=i-1;
            }
            if(j<0)j=0;
            while(n!=1)
            {
                for(i=j;i<n-1;i++)
                a[i]=a[i+1]-a[i];
                n--;
                while(j<n&&a[j]==0)j++;
                if(j>0)j--;
                sort(&a[j],&a[n]);  
            }
            printf("%d\n",a[0]);
        }
        return 0;
    }
    
    • 2
      @ 2022-10-29 20:17:28

      首先一眼题可以想到是差分+排序,每一次操作都排,但说实话不见得每次排序把所有元素全部排一遍,前面是0的可以忽略不计,因为不管怎么排,0始终在前面,所以只需要排后面的非零元素就好啦,然后上个代码:

      #include <bits/stdc++.h>
      using namespace std;
      const int N = 1e5 + 10;
      int a[N];
      int main()
      {
          int t;
          scanf("%d", &t);
          while (t--)
          {
              int n;
              scanf("%d", &n);
              int ans = n;
              for (int i = 1; i <= n; i++)
              {
                  scanf("%d", &a[i]);
              }
              for (int i = 1; i <= n; i++)
              {
                  if (a[i] != 0)
                  {
                      ans = i - 1;
                      break;
                  }
              }
              if (ans == 0)
              {
                  ans = 1;
              }
              while (n > 1) //找第一个不为0的位置的前一个位置,因为如果是0的话,那相减还是0,排序后还是在最前面,排了也没用
              {
                  for (int i = ans; i <= n; i++)
                  {
                      a[i] = a[i + 1] - a[i];
                  }
                  --n;
                  sort(a + ans, a + 1 + n);
                  if (ans > 1)
                  {
                      ans--;
                  }
                  while (ans + 1 <= n && a[ans + 1] == 0)
                  {
                      ++ans;
                  }
              }
              printf("%d\n", a[1]);
          }
          return 0;
      }
      
      • 1

      信息

      ID
      817
      时间
      2000ms
      内存
      256MiB
      难度
      9
      标签
      递交数
      332
      已通过
      28
      上传者