考試(2023年3月26日) (COCI)

2021-07-29 14:17:22 字數 4743 閱讀 6621

第一題:銀行賬戶(account)

【題目描述】大家都知道28定律吧,據說世界上20%的人擁有80%的財富。現在你對一家銀行的賬戶進行檢測,看是否符合28定律,或者有更強的定律。比如說,10%的人擁有85%的財富。更準確的描述是:對n個銀行賬戶進行調查,你的任務是找出兩個數a,b,使得b-a的差最大。a,b的含義是a%的人擁有b%的財富。

【輸入格式】

輸入的第一行包含乙個整數n(1<=n<=300000),表示銀行賬戶的個數。

接下來一行包含n個整數,每個整數在區間[0,100000000],表示這n個賬戶中的存款金額。

【輸出格式】

輸出兩行,分別是兩個實數a,b。a,b的含義如題所述。誤差在0.01內可以接受。

【輸入樣例】

2

100 200

【輸出樣例】

50.0

66.66666666666666

水題一道,就是注意int會爆就ok

直接上**:

#include

#include

#include

#include

#include

#include

const int maxn=300000;

using namespace std;

struct nodeac[maxn+5];

int n;

double temp,k,a1,a2;

long long sum;

bool cmp(node t1,node t2)

int main()

sort(ac+1,ac+n+1,cmp);

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

else break;

}printf("%lf",a2); putchar(10);

printf("%lf",a1); putchar(10);

}

第二題:染色面積(area)

【題目描述】給你n個矩形,這些矩形在平面座標系中,並且以座標系的零點為中心,它們的邊都平行於座標軸。每個矩形由寬度和高度可以唯一確定。現在對矩形進行染色操作。下圖即是樣例的示意圖:

現在請你計算有染色區域的面積。

輸入格式:

第一行包含1個整數n(1<=n<=1000000),表示矩形的個數。

接下來n行包含兩個偶數x和y(2<=x,y<=10000000),分別表示寬度和高度。

輸出格式:

一行,表示區域面積。

【輸入樣例】

38 2

4 42 6

【輸出樣例】

28這道題也水,我旁邊那位童鞋乍一看以為是矩形樹,但仔細再想想就不對……

按y值從大到小排個序,也不用管什麼這些矩形在平面座標系中,並且以座標系的零點為中心

就當他給的是一象限的x,y值

還有也是要注意int會爆,而且不只是答案,在計算答案的中間過程時也會爆(wa得我好爽)

主要思路是這樣的:

按y值從大到小排序後,列舉y值

比較相鄰的x值

設y值大者座標為a(x1,y1),小者為b(x2,y2),s表示之前已覆蓋的面積

顯然y1 > y2

x分兩種情況

(1)  x1>=x2

顯然b所覆蓋的面積已被a覆蓋,跳過這種情況即可

(2)  x2>x1

此時,面積為:s+=(x2-x1)*y2;

**如下:

#include

#include

#include

#include

#include

#include

const int maxn=1000000;

using namespace std;

struct pointpoint[maxn+5];

int n,t;

unsigned long long ans;

bool cmp(point a,point b)

int main()

h[maxm*2];

int empty,count,num,point,n,m,a,b,cnt,fir[maxn+5];

bool used[maxn+5][maxn+5],vis[maxn+5];

void dfs(int s)

if(!vis[h[i].e]) dfs(h[i].e);}}

int main()

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

num=0; point=0;}}

if(empty>2)

else if(count<=2)

else

}

第四題:陣列詢問(query)

【題目描述】mirko是乙個非常單純的人,他的好朋友給他乙個有

n個自然數的陣列,然後對他進行

q次查詢.

每一次查詢包含兩個正整數l,r,表示乙個陣列中的乙個區間

[l,r]

,mirko

需要回答在這個區間中有多少個值剛好出現2次。

【輸入格式】

第一行包含兩個整數n和

q(1<=n,q<=500000)

第二行包含n個自然數,這些數均小於

1000000000

,表示陣列中的元素。

接下來有q行,每行包含兩個整數l和

r(1<=l<=r<=n)。

【輸出格式】

輸出包含q行,每行包含一次查詢的答案。

【輸入樣例1】

5 11 2 1 1 1

1 3【輸出樣例1】

【輸入樣例2】

5 21 1 1 1 1

2 42 3

【輸出樣例2】

下面那一道就是題解標程都看不懂的題了:

#include

#include

#include

#include

#include

#include

#include

using namespace std;

typedef long long llint;

typedef pair pii;

const int maxn = 1 << 20;

int n, q;

vector t[maxn];

int a[maxn];

int ls[maxn], rs[maxn];

int left[maxn];

int right[maxn];

int ans[maxn];

void update (int x, int l, int r, int l, int v) );

int mid = (l + r) / 2;

if (l == r) return;

update(x * 2, l, mid, l, v);

update(x * 2 + 1, mid+1, r, l, v); }

void query_update (int x, int l, int r, int l, int r, int p1, int p2) );

t[x].push_back();

return; }

int mid = (l + r) / 2;

query_update(x * 2, l, mid, l, r, p1, p2);

query_update(x * 2 + 1, mid+1, r, l, r, p1, p2); }

void solve (int x, int l, int r)

if (l == r) return;

int mid = (l+r) / 2;

solve(x*2, l, mid);

solve(x*2+1, mid+1, r); }

int main (void)

map m;

for (int i = 0; i < n; ++i)

m.clear();

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

right[n] = n;

for (int i = 0; i < n; ++i)

solve(1, 0, n-1);

for (int i = 0; i < q; ++i)

printf("%d\n", ans[i]);

return 0; }

2023年10月3日測試

不知為何,wps將pdf轉成word的時候出了問題,所以只好用了qwq 第一題意思是說把一些0轉成1或者把1轉成0,然後使得前面一部分為0,後面一部分為一,當然也可以全0或全1。這個時候也許會想到dp 當然dp也能過,不過可能會卡一卡常數 對於這道題,我們可以用一下字首和,和字尾和。然後對於每乙個位...

2023年11月26日 練習3

公雞5元,母雞3元,小雞3只一元,總數money,需要買s只,則三雞多少只 money int input 請輸入多少金額 s int input 需要多少只 for i in range 1,money 5 1 for j in range 1,money 3 1 for k in range 1...

2023年4月26日工作日記

用mysqldump來備份線上資料庫 需求 備份全部表結構,備份部分表資料 語句 bin mysqldump udbproxy pdbproxy xlw xlw.sql 複製xlw這個資料庫到xlw.sql檔案 bin mysql udbproxy pdbproxy test xlw xlw.sql...