这道题的代码询问,求各位大佬

 

求这道题的代码,写了半天还是错的

#include <stdio.h>
#include <string>
//组合数公式 
typedef long long LL;
using namespace std;
const int maxn = 1e3 + 5;
const int MOD = 1e9 + 7;
int inv[maxn];//阶乘的逆元
int fac[maxn];//阶乘
long long ksm(long long a, long long b, long long mod)
{
	long long res = 1, base = a;
	while (b)
	{
		if (b & 1)res = (res*base) % mod;
		b >>= 1;
		base = (base*base) % mod;
	}
	return res;
}
long long S(long long n){
	return n + n*(n - 1) / 2;
}


long long C(int n, int m)
{
	if (n == 4){
		return 6;
	}
	if (n == 3){
		return 3;
	}
	if (n == 2){
		return 1;
	}
	if (m == 0 || n == m)return 1;
	long long res = 1;
	res = res*fac[n] % MOD*inv[m] % MOD*inv[n - m] % MOD;
	return res;
}

int main(){
	long long x = 0;
	fac[0] = fac[1] = inv[1] = 1;
	for (long long i = 2; i<maxn; i++)
	{
		inv[i] = (inv[i - 1] * ksm(i, MOD - 2, MOD)) % MOD;
		fac[i] = (i*fac[i - 1]) % MOD;
	}
	scanf("%lld", &x);
	long long count = 0;
	long long temp1 = 0;
	long long temp2 = 0;
	long long sum = 0;
	for (long long i = 0; i < x; i++){
		scanf("%lld", &temp2);
		if (temp2 - temp1 >= 0){
			count++;
		}
		else{
			sum += S(count);
			count = 1;
		}
		temp1 = temp2;
	}
	sum += S(count);
	printf("%lld", sum);
}

 

感谢

 

有题目链接吗 我试一下

https://ac.nowcoder.com/acm/contest/11746/D

这简单啊!你错在哪里?

得不出那个答案

能否给个代码参考一下呢

 

#include <stdio.h>
#include <string>
//组合数公式 
typedef long long LL;
using namespace std;
const int maxn = 1e3 + 5;
const int MOD = 1e9 + 7;
int inv[maxn];//阶乘的逆元
int fac[maxn];//阶乘
long long ksm(long long a, long long b, long long mod)
{
	long long res = 1, base = a;
	while (b)
	{
		if (b & 1)res = (res*base) % mod;
		b >>= 1;
		base = (base*base) % mod;
	}
	return res;
}
long long C(int n, int m)
{
	if (n == 4){
		return 6;
	}
	if (n == 3){
		return 3;
	}
	if (n == 2){
		return 1;
	}
	if (m == 0 || n == m)return 1;
	long long res = 1;
	res = res*fac[n] % MOD*inv[m] % MOD*inv[n - m] % MOD;
	return res;
}

int main(){
	long long x = 0;
	fac[0] = fac[1] = inv[1] = 1;
	for (long long i = 2; i<maxn; i++)
	{
		inv[i] = (inv[i - 1] * ksm(i, MOD - 2, MOD)) % MOD;
		fac[i] = (i*fac[i - 1]) % MOD;
	}
	scanf("%lld", &x);
	long long count = 0;
	long long temp1 = 0;
	long long temp2 = 0;
	long long sum = 0;
	for (long long i = 0; i < x; i++){
		scanf("%lld", &temp2);
		if (temp2 - temp1 >= 0){
			count++;
		}
		else{
			sum += C(count + 1, 2);
			count = 1;
		}
		temp1 = temp2;
	}
	sum += C(count + 1, 2);
	printf("%lld", sum);
}

 

下面这个过了

 👍厉害厉害,这道题我好像在 LeetCode 看见过。你没事应该常常上去拼拼。

#include <stdio.h>
#include <stdlib.h>

int main()
{
    long long n,t,r,i,j;
    scanf("%lld", &n);
    scanf("%lld", &t);
    r = 1;
    j = 1;
    for (i = 1; i < n; i++)
    {
        long long x;
        scanf("%lld", &x);
        if (x>=t)
            j++;
        else
            j = 1;
        r += j;
        t = x;
    }
    printf("%lld", r);
    return 0;
}