This commit is contained in:
Zengtudor 2024-08-14 09:09:21 +08:00
parent 2708eb8dab
commit 4848df60e5
3 changed files with 157 additions and 3 deletions

View File

@ -1,7 +1,54 @@
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int MAX_N = 2e8+5;
int a[MAX_N];
int n,amax=INT_MIN,ans=0;
int readint();
int main(){
signed main(signed argc,char *argv[]){
#ifdef OITEST
#define AS_EQ(a,b){if((a)!=(b)){cerr<<"assert eq faild:"<<endl<<#a<<":"<<(a)<<endl<<#b<<":"<<(b)<<endl;exit(-1);}}
#define AS_NE(a,b){if((a)==(b)){cerr<<"assert not eq faild:"<<endl<<#a<<":"<<(a)<<endl<<#b<<":"<<(b)<<endl;exit(-1);}}
AS_EQ(argc,3)
auto fin = freopen(argv[1],"r",stdin);
AS_NE(fin,NULL)
ifstream afile(argv[2]);
AS_EQ(afile.is_open(),true);
#endif
n=readint();
for(int i=1;i<=n;i++){
int input=readint();
a[input]++;
amax=max(amax,input);
}
for(int i=2;i<=amax;i++){
int nans = 0;
for(int j=1;(i*j)<=amax;j++){
nans+=a[i*j]*i*j;
}
ans=max(ans,nans);
}
cout<<ans<<endl;
#ifdef OITEST
int cans;
afile>>cans;
AS_EQ(ans,cans)
#endif
}
int readint(){
int x=0,w=1;
char ch=0;
while(!isdigit(ch)){
if(ch=='-')w=-1;
ch=getchar();
}
while(isdigit(ch)){
x=x*10+(ch-'0');
ch=getchar();
}
return x*w;
}

View File

@ -0,0 +1,98 @@
# 因子
## 题目描述
今天是$ YQH $的生日,她得到了一个长度为$ n $的正整数序列$ a_1,a_2,\dots,a_n $作为生日礼物。
然而,$YQH $并不对这个序列满意,因为这个序列可能不合法。
具体地,一个序列合法,当且仅当存在一个大于$ 1 $的整数$ k$,使得序列里每个元素都是$ k $的倍数。
为了让$ YQH $满意,你需要找到一个$ a_1,a_2,\dots,a_n $的子序列,使得这个子序列是合法的。$b_1,b_2,\dots,b_m $称为$ a_1,a_2,\dots,a_n $的子序列当且仅当,你可以从$ a_1,a_2,\dots,a_n $删去若干个(可以是$ 0 $个)元素后得到$ b_1,b_2,\dots,b_m$。
符合条件的子序列可能很多,所以$ YQH $只想要你找到,总和最大的合法子序列的总和。注意,子序列可以取空集,且空集是合法的。
## 输入格式
第一行一个正整数$ n$。
接下来$ n $行,每行一个正整数。第$ i $行的数表示$ a_{i-1}$。
## 输出格式
输出一个整数表示答案。
## 样例 #1
### 样例输入 #1
```
4
1
1
1
1
```
### 样例输出 #1
```
0
```
## 样例 #2
### 样例输入 #2
```
6
1
2
3
4
5
6
```
### 样例输出 #2
```
12
```
## 样例 #3
### 样例输入 #3
```
10
28851
8842
9535
2311
25337
26467
12720
10561
8892
6435
```
### 样例输出 #3
```
56898
```
## 提示
| 子任务编号 | $n\le$ | $a_i\le $| 特殊限制 | 分值 |
| :--------: | :--: | :----: | :------: | :--: |
| 1 | $18 $ | $10^9 $ | 无 | 20 |
| 2 | $1000$ | $10^5 $ | 无 | 20 |
| 3 | $1000$| $10^9 $ | A | 20 |
| 4 | $1000$ | $10^9$ | 无 | 40 |
特殊限制$A$:保证所有$ a_i $都是质数。
对于所有数据,保证$ 1\le n\le 1000,1\le a_i\le 10^91\le n\le 1000,1\le a_i\le 10^9$。

View File

@ -3,6 +3,7 @@ if is_mode("debug")then
add_defines("OIPRINT")
end
set_warnings("all")
set_languages("c++17")
target("st_raw")
set_kind("binary")
@ -124,4 +125,12 @@ target("P3374")
target("P3608")
set_rundir("./day11/P3608")
add_files("./day11/P3608/*.cpp")
add_files("./day11/P3608/*.cpp")
target("U466180")
set_rundir("day12/U466180")
add_files("day12/U466180/*.cpp")
for v=1,5 do
local s=tostring(v)
add_tests(s,{files="day12/U466180/*.cpp",defines="OITEST",run_timeout=1000,runargs={"ex_divisor"..s..".in","ex_divisor"..s..".ans"}})
end