濟南學習 Day 3 T2 am

2022-02-11 20:23:03 字數 1807 閱讀 5098

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

writeln(ans);

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]

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

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

輸入格式(program.in)

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

輸出格式(program.out)

乙個數表示答案。

輸入樣例

41 1 3 3

輸出樣例

4資料範圍

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

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

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

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

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

數》=n/10。

首先說:直接貼上**20%的資料肯定沒問題,連對拍的**都給你了,這個題還是比較良心的,20分,關鍵是如何優化

1 #include2 #include3 #include4 #include5

#define n 100010

6using

namespace

std;

7const

int mo=1e9+7;8

long

long

sum[n],a[n],num[n],ans;

9int

n,x;

10int

main()

1123

for(int i=1;i<=x;i++)

24 num[i]=(num[i]*num[i])%mo;

25for(int i=1;i<=x;i++)

26 sum[i]=sum[i-1]+num[i];

27for(int i=1;i)

28 ans=(ans+num[i]*(sum[x]-sum[i]))%mo;

29 printf("%d"

,ans);

30return0;

31 }

思路:讀入之後,首先sort一遍,相同的數字肯定挨在了一起,掃一遍,記錄每種數字出現的次數(即它的個數)(接下來用len表示),每乙個len都平方一邊,並用sum記錄len^2的

字首和。對於第i種數字對於答案的貢獻為leni*len(i+1)+leni*len(i+2)+....+leni*(lenx)

即leni*(sum[x]-sum[i]);

濟南學習 Day 2 T3 am

問題描述 m m的方陣上有n棵蔥,你要修一些柵欄把它們圍起來。乙個柵欄是一段 沿著網格建造的封閉圖形 即要圍成一圈 各個柵欄之間應該不相交 不重疊 且互相不包含。如果你最多修k個柵欄,那麼所有柵欄的長度之和最小是多少?輸入格式 第一行三個整數m,k,n。接下來n行每行兩個整數x,y代表某棵蔥的位置。...

濟南學習 Day 3 T3 am

選數字 select time limit 3000ms memory limit 64mb 題目描述 lyk 找到了乙個 n m 的矩陣,這個矩陣上都填有一些數字,對於第 i 行第 j 列的位置上 的數為 ai,j。由於它 ak 了 noip2016 的初賽,最近顯得非常無聊,便想到了乙個方法自娛...

濟南學習 Day 5 T3 am

題目描述 眾所不知,rly現在不會玩西洋棋。但是,作為乙個oier,rly當然做過八皇后問題.在這裡再囉嗦幾句,皇后可以攻擊到同行同列同對角線,在 n n的棋盤中,擺放n個皇后使它們互相不能攻擊到,求不同的解的數量,這就是經典的n皇后問題。現在問題推廣n皇后問題,這個問題對你而言實 在是小菜一碟。但...