只写了A~D

A - Orac and Factors

题意:f(n)就是n的第二小因数,问执行k次 n=f(n)+n 后的结果。

题解:如果一直找第二小的因子的话,1e9肯定得t。看下边样例解释就会惊奇的发现,执行次数多了,n一定会变成2的倍数,然后就可以剪枝了。如果n不是2的倍数,那么就执行 n=f(n)+n,k-- 直到n是2的倍数(当然k得>0),最后再加上k*2。

 1 #include<bits/stdc++.h>
2 #define ll long long
3 using namespace std;
4
5 int main()
6 {
7 ios::sync_with_stdio(false);
8 cin.tie(0);
9 cout.tie(0);
10 int t;
11 cin>>t;
12 while(t--){
13 ll n,k;
14 cin>>n>>k;
15 while(k){
16 if(n%2==0) break;
17 for(ll i=2;i<=n;i++){
18 if(n%i==0){
19 n+=i;
20 break;
21 }
22 }
23 k--;
24 }
25 n=n+k*2;
26 cout<<n<<endl;
27 }
28 return 0;
29 }

B - Orac and Models

题意:让你找出一个序列使得他在原序列满足一下条件 i%j==0&&a[i]>a[j]; 问最长的序列长度

题解:找1~n每个数当因子时最长的符合条件的序列。

 1 #include<bits/stdc++.h>
2 #define ll long long
3 using namespace std;
4
5 ll a[100100];
6 ll dp[100100];
7
8 int main()
9 {
10 ios::sync_with_stdio(false);
11 cin.tie(0);
12 cout.tie(0);
13 ll t;
14 cin>>t;
15 while(t--){
16 ll n;
17 cin>>n;
18 for(ll i=1;i<=n;i++) cin>>a[i];
19 ll ans=0 ;
20 for (ll i=n;i>=1;i--){
21 dp[i]=1;
22 for (ll j=i;j<=n;j+=i){
23 if(a[j]>a[i])
24 dp[i]=max(dp[i],dp[j]+1);
25 }
26 ans = max(dp[i],ans);
27 }
28 cout<<ans<<endl;
29 }
30 return 0;
31 }

C - Orac and LCM

题意:求这个序列所有数两两之间的 lcm 的 gcd。

题解:和a1 lcm 后的所有数的 gcd 就是lcm(a1,gcd(a2,a3, ......)),a2就是lcm(a2,gcd(a3,a4, ......)).....,然后再把这些数就行gcd

证明结论:

gcd( lcm (a,b), lcm(a,c) )

= gcd( a*b/gcd(a,b), a*c/gcd(a,c) )

= a*gcd( b/gcd(a,b), c/gcd(a,c) );

lcm( a, gcd(b, c) )=a*gcd(b, c) / gcd(a,gcd(b, c));

最大公约数的百度百科的性质那一栏也能找到这个结论。

 1 #include<bits/stdc++.h>
2 #define ll long long
3 using namespace std;
4
5 ll a[100100];
6 ll p[200100];
7
8 int main()
9 {
10 ios::sync_with_stdio(false);
11 cin.tie(0);
12 cout.tie(0);
13 ll n;
14 cin>>n;
15 for(ll i=1;i<=n;i++) cin>>a[i];
16 ll ans;
17 p[n]=a[n];
18 for(ll i=n-1;i>0;i--){
19 p[i]=__gcd(p[i+1],a[i]);
20 }
21 ans=a[1]*p[2]/__gcd(a[1],p[2]);
22 for(ll i=2;i<=n;i++){
23 ans=__gcd(ans,p[i+1]*a[i]/__gcd(a[i],p[i+1]));
24 }
25 cout<<ans<<endl;
26 return 0;
27 }

D - Orac and Medians

题意:数组里一段数可以都变成他的中位数,问整个序列能不能变成k。

题解:

①判断一下序列里是否有k这个数,没有的话就直接输出no;

②如果整个序列 >=k 的个数比 <k 的个数多,就输出yes;

③判断一下序列里是否有一段长度>2的连续子序列使得 >=k 的个数比 <k 的个数多,有的话就输出yes,没有就输出no;(代码略丑)

 1 #include<bits/stdc++.h>
2 #define ll long long
3 using namespace std;
4
5 int a[100100];
6 int p[100100];
7
8 int main()
9 {
10 ios::sync_with_stdio(false);
11 cin.tie(0);
12 cout.tie(0);
13 int t;
14 cin>>t;
15 while(t--){
16 int n,k;
17 cin>>n>>k;
18 for(int i=1;i<=n;i++) cin>>a[i],p[i]=0;
19 int flag=0;
20 for(int i=1;i<=n;i++){
21 if(a[i]==k) flag=1;
22 if(a[i]>=k) p[i]=1;
23 else p[i]=-1;
24 }
25 if(!flag) {cout<<"no"<<endl;continue;}
26 flag=0;
27 for(int i=1;i<=n;i++){
28 p[i]+=p[i-1];
29 }
30 if(p[n]>0) flag=1;
31 int minn=p[0];
32 for(int i=2;i<=n;i++){
33 if(p[i]>minn){
34 flag=1;
35 break;
36 }
37 if(p[i-1]<minn){
38 minn=p[i-1];
39 }
40 }
41 if(!flag) {cout<<"no"<<endl;continue;}
42 cout<<"yes"<<endl;
43 }
44 return 0;
45 }

Codeforces Round #641 (Div. 2)的更多相关文章

  1. Codeforces Round #641 (Div. 2) D. Orac and Medians (贪心)

    题意:有一个长度为\(n\)的数组,问能否通过多次使某个区间的所有元素变成这个区间的中位数,来使整个数组变成题目所给定的\(k\). 题解:首先这个\(k\)一定要在数组中存在,然后我们对中位数进行考 ...

  2. Codeforces Round #366 (Div. 2) ABC

    Codeforces Round #366 (Div. 2) A I hate that I love that I hate it水题 #I hate that I love that I hate ...

  3. Codeforces Round #354 (Div. 2) ABCD

    Codeforces Round #354 (Div. 2) Problems     # Name     A Nicholas and Permutation standard input/out ...

  4. Codeforces Round #368 (Div. 2)

    直达–>Codeforces Round #368 (Div. 2) A Brain’s Photos 给你一个NxM的矩阵,一个字母代表一种颜色,如果有”C”,”M”,”Y”三种中任意一种就输 ...

  5. cf之路,1,Codeforces Round #345 (Div. 2)

     cf之路,1,Codeforces Round #345 (Div. 2) ps:昨天第一次参加cf比赛,比赛之前为了熟悉下cf比赛题目的难度.所以做了round#345连试试水的深浅.....   ...

  6. Codeforces Round #279 (Div. 2) ABCDE

    Codeforces Round #279 (Div. 2) 做得我都变绿了! Problems     # Name     A Team Olympiad standard input/outpu ...

  7. Codeforces Round #262 (Div. 2) 1003

    Codeforces Round #262 (Div. 2) 1003 C. Present time limit per test 2 seconds memory limit per test 2 ...

  8. Codeforces Round #262 (Div. 2) 1004

    Codeforces Round #262 (Div. 2) 1004 D. Little Victor and Set time limit per test 1 second memory lim ...

  9. Codeforces Round #371 (Div. 1)

    A: 题目大意: 在一个multiset中要求支持3种操作: 1.增加一个数 2.删去一个数 3.给出一个01序列,问multiset中有多少这样的数,把它的十进制表示中的奇数改成1,偶数改成0后和给 ...

随机推荐

  1. MalformedByteSequenceException: 1字节的 UTF-8 序列的字节 1 无效

    记住,每次修改了配置之后都 clean 一下,把 target 删除 第一种解决方案 去掉 pom.xml 中的 properties <properties> <maven.com ...

  2. 经常使用的Sublime Text 快捷键

    最常用的 Sublime快捷键:

  3. 02. struts2中Action名称的搜索顺序

    搜索顺序 获得请求路径的URI,例如URL为:http://localhost:8080/struts2/path1/path2/path3/student.action 首先寻找namespace为 ...

  4. (09)-Python3之--类的三大特性(封装、继承、多态)

    1.封装 封装,就是只能在类的内部访问,外部访问属性或方法会报异常,python中的封装很简单,只要在属性前或者方法名前加上两个下划线就可以,如self.__name,def __eat(self)这 ...

  5. 栈 堆 stack heap 堆内存 栈内存 内存分配中的堆和栈 掌握堆内存的权柄就是返回的指针 栈是面向线程的而堆是面向进程的。 new/delete and malloc/ free 指针与内存模型

    小结: 1.栈内存 为什么快? Due to this nature, the process of storing and retrieving data from the stack is ver ...

  6. 端口被占用通过域名的处理 把www.domain.com均衡到本机不同的端口 反向代理 隐藏端口 Nginx做非80端口转发 搭建nginx反向代理用做内网域名转发 location 规则

    负载均衡-Nginx中文文档 http://www.nginx.cn/doc/example/loadbanlance.html 负载均衡 一个简单的负载均衡的示例,把www.domain.com均衡 ...

  7. 正则r的作用

    >>> mm = "c:\\a\\b\\c" >>> mm 'c:\\a\\b\\c' >>> print(mm) c:\a\ ...

  8. 从零搭建TypeScript与React开发环境

    前言 平时进行开发大多数是基于vue-cli或者create-react-app等官方或者公司内部搭建的脚手架.   我们业务仔做的最多就是npm i和npm run dev或者npm start,然 ...

  9. JavaScript代码是怎么执行的?

    前言 众所周知,JavaScript是单线程语言.所以JavaScript是按顺序执行的! 先编译再执行 变量提升 请看下面的例子: console.log(cat) catName("Ch ...

  10. codevs1700 施工方案第二季

    题目描述 Description c国边防军在边境某处的阵地是由n个地堡组成的.工兵连受命来到阵地要进行两期施工. 第一期的任务是挖掘暗道让所有地堡互联互通.现已勘测设计了m条互不相交的暗道挖掘方案, ...