看程式寫結果(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...