求这道题的代码,写了半天还是错的
#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;
}