CodeForces Div2 433

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CodeForces Div2 433相关的知识,希望对你有一定的参考价值。

A题 Fraction


暴力枚举 无思维难度 无坑点

技术分享
 1 #include <cstdio>
 2 #include <algorithm>
 3 using namespace std;
 4 int n,Mi,Mj;
 5 double Max,now;
 6 int main(){
 7     scanf("%d",&n);
 8     for(int i=1;i<n;i++){
 9         for(int j=1;j<i;j++){
10             //printf("%d %d gcd:%d\n",i,j,__gcd(i,j));
11             if(i+j==n && __gcd(i,j)==1){
12                 double x=i;
13                 double y=j;
14                 now = y/x;
15                 //printf("%.2f\n",now);
16                 if(now>Max){
17                     Max = now;
18                     Mi = i;
19                     Mj = j;
20                 }
21             }
22         }
23     }
24     printf("%d %d\n",Mj,Mi);
25     return 0;
26 }
T1

 

B题 Maxim Buys an Apartment

手写几组数据就能发现这是一个结论题目,特判一下特殊情况就OK了。

技术分享
 1 #include <cstdio>
 2 #include <iostream>
 3 typedef long long ll;
 4 ll n,k;
 5 int main(){
 6     std::cin>>n>>k;
 7     if(n==1){
 8         printf("0 0");
 9         return 0;
10     }
11     if(n==k){
12         printf("0 0");
13         return 0;
14     }
15     if(k==0){
16         printf("0 0");
17         return 0;
18     }
19     printf("1 ");
20     if(2*k<=n-k){
21         std::cout<<2*k;
22     }
23     else std::cout<<n-k;
24     return 0;
25 }
T2

 

C题 Planning

比赛时始终没有想到这个算法怎么实现。。。赛后看了下题解,发现还是自己too young
贪心思路:每一秒走能走的最贵的飞机

技术分享
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 typedef long long ll;
 4 struct p
 5 {
 6     ll x,y;
 7     p(ll x=0,ll y=0):x(x),y(y){}
 8     bool operator <(const p&t)const
 9     {
10         if (x==t.x) return y<t.y;
11         return x>t.x;
12     }
13 };
14 p a[300005];
15 p b[300005];
16 int num[300005];
17 bool use[300005];
18 int main()
19 {
20     ios::sync_with_stdio(false);
21     ll n,k;
22     cin>>n>>k;
23     for(int i=1;i<=n;i++)
24     {
25         cin>>a[i].x;
26         a[i].y=i;
27     }
28 //排序
29     sort(a+1,a+1+n);
30     ll ans=0;
31     int now=1;
32     memset(use,0,sizeof(use));
33     for(int i=1;i<=n;i++)
34         if (!use[i])
35     {
36 //如果当前有和y一样的次序 就不用加和
37         while(a[now].y>i+k)
38         {
39                 num[a[now].y]=a[now].y;
40                 use[a[now].y-k]=1;
41                 now++;
42         }
43 //对于当前比较大的 我尽量让差值尽量下就行了,因为i+k是递增的,所以当前值一定是最优的
44         if (i+k>=a[now].y)
45         {
46             num[a[now].y]=i+k;
47             ans+=a[now].x*(i+k-a[now].y);
48             use[i]=1;
49             now++;
50         }
51     }
52     cout<<ans<<endl;
53     for(int i=1;i<n;i++)
54         cout<<num[i]<<" ";
55     cout<<num[n]<<endl;
56     return 0;
57 }
T3

 

D题 Jury Meeting

待补

 

E题

思路:容斥原理+可持久化线段树

可持久化线段树不会写Orz 继续留坑

以上是关于CodeForces Div2 433的主要内容,如果未能解决你的问题,请参考以下文章

Codeforces Round #433

Codeforces Round #393 div2

codeforces433B

Codeforces Round #326 div2

Codeforces Round #433 (Div. 2)

Codeforces Round #564(div2)