看程式寫結果 program

2022-05-14 18:30:07 字數 2094 閱讀 2659

看程式寫結果(program)

time limit:1000ms memory limit:64mb

題目描述

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

在練習。

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

pascal:

readln(n);

for i:=1 to n do read(a[i]);

for i:=1 to n do for j:=1 to n do for k:=1 to n do for l:=1 to n do

if (a[i]=a[j]) and (a[i]

c++:

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]

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

輸入格式(program.in)

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

輸出格式(program.out)

乙個數表示答案。

輸入樣例

41 1 3 3

輸出樣例

16資料範圍

對於 20%的資料 n<=50。

對於 40%的資料 n<=200。

對於 60%的資料 n<=2000。

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

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

數》=n/10。

思路:我們現在分析一下這個c++**

pcanf(「%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]1)%1000000007

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

這段**裡面有4重迴圈大概n==100就差不多爆時間

所以我們要優化

其中有兩重迴圈可以簡化為o(1);

那就是第一重和最後一重

就是詢問有在這個陣列裡有幾個和這個元素值相等的元素

我們可以把所有的元素值記錄下來

然後離散化使之成為儲存每個元素個數的陣列

然後每個陣列的值都是這個元素個數的平方

現在再看第二重和第三重迴圈

這個是用來比較大小的

於是我想到了字首和

就是把比當前元素個數的平方和記錄下來

然後每次取值就用字首和就好

經優化後成為乙個o(n)時間複雜度的演算法

來,上**:

#include#include

#include

#define mod 1000000007ll

using

namespace

std;

long

long

int b[100001

],n,ans;

long

long

int sum[100001

];int a[100001

],head;

char

ch;void qread(long

long

int &x)

}int

main()

for(int i=1;i<=head;i++) a[i]=a[i]*a[i]%mod,sum[i]=(sum[i-1]+(a[i]%mod))%mod;

for(int i=1;i<=head;i++) ans=(ans+((sum[i-1]*a[i])%mod))%mod;

cout

return0;

}

看程式寫結果 program

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

看程式寫結果

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