看程式寫結果 program

2021-08-09 01:28:30 字數 1576 閱讀 8029

看程式寫結果(program)

time limit:1000ms memory limit:64mb

題目描述

lyk 最近在準備 noip2017 的初賽,它最不擅長的就是看程式寫結果了,因此它拼命地

在練習。

這次它拿到這樣的乙個程式:

scanf(「%d」,&n);

for (i=1; i

<=n; i++) scanf(「%d」,&a[i]);

for (i=1; i

<=n; i++)

for (j=1; j

<=n; j++)

for (k=1; k<=n; k++)

for (l=1; l<=n; l++)

if (a[i]==a[j] && a[i]

< a[k] && a[k]==a[l])

ans=(ans+1)%1000000007;

printf(「%d\n」,ans);

lyk 知道了所有輸入資料,它想知道這個程式執行下來會輸出多少。

輸入格式(program.in)

第一行乙個數 n,第二行 n 個數,表示 ai。

輸出格式(program.out)

乙個數表示答案。

輸入樣例

1 1 3 3

輸出樣例

資料範圍

對於 20%的資料 n<=50。 對於 40%的資料 n<=200。 對於 60%的資料 n<=2000。

對於 100%的資料 n<=100000,1<=ai<=1000000000。

其中均勻分布著 50%的資料不同的 ai 個數<=10,對於另外 50%的資料不同的 ai 個

數》=n/10。

一種數的選擇方案有num^2種,因為可以選同乙個數,所以就相當於在兩個num長的陣列中一邊任選乙個。

那麼我們用f[i]表示1~i 這一段數中選兩個數作為形式a=a< b=b中a的方案數。

例如 1 1 1 2 3 3

對應的f陣列為 1 4 9 10 11 14

我們先將a陣列公升序排列,然後求出f陣列,然後從n->1,把每一種數的個數與前面的f相乘,即為當前這種數作為b時對答案的貢獻。

看**有助於理解:

#include

#include

#include

#include

#include

#define ll long long

const int mod=1000000007;

using namespace std;

int n,a[100009];

ll f[100009],ans;

int main()

else

}//for(int i=1;i<=n;i++) printf("%lld ",f[i]);puts("");

num=1;

for(int i=n-1;i>=1;i--)

}printf("%lld",ans);

return

0;}

看程式寫結果 program

看程式寫結果 program time limit 1000ms memory limit 64mb 題目描述 lyk 最近在準備 noip2017 的初賽,它最不擅長的就是看程式寫結果了,因此它拼命地 在練習。這次它拿到這樣的乙個程式 pascal readln n for i 1 to n do...

看程式寫結果

看程式寫結果 a 乙個類的靜態 塊,構造 塊,構造方法的執行流程 靜態 塊 構造 塊 構造方法 b 靜態的內容是隨著類的載入而載入 靜態 塊的內容會優先執行 c 子類初始化之前先會進行父類的初始化 結果是 靜態 塊fu 靜態 塊zi 構造 塊fu 構造方法fu 構造 塊zi 構造方法zi class...

看程式寫結果

看程式寫結果 program time limit 1000ms memory limit 64mb 題目描述 lyk最近在準備noip2017的初賽,它最不擅長的就是看程式寫結果了,因此它拼命地在練習。這次它拿到這樣的乙個程式 pascal readln n for i 1 to n do rea...