Codeforces Round #433 (Div. 2, based on Olympiad of Metropolises)

A. Fraction

題目連接:http://codeforces.com/contest/854/problem/Anode

題目意思:給出一個數n,求兩個數a+b=n,且a/b不可約分,若是存在多組知足條件的a和b,輸出a/b最大的a和b。ios

題目思路:首先a+b=n,那麼暴力枚舉i和n-i,且gcd(i,n-i)==1,因爲i越大是n-i越小,則a/b的值越大。c++

代碼:ide

 1 //Author: xiaowuga
 2 #include <bits/stdc++.h>
 3 using namespace std;
 4 #define inf 0x3f3f3f3f
 5 #define MAX INT_MAX
 6 #define mem(s,ch) memset(s,ch,sizeof(s))
 7 const long long N=100000; 
 8 const long long mod=1e9+7; 
 9 typedef long long LL;
10 typedef int II;
11 typedef unsigned long long ull;
12 #define nc cout<<"nc"<<endl
13 #define sp " "
14 int main() {
15     ios::sync_with_stdio(false);cin.tie(0);
16     II n;
17     cin>>n;
18     II a,b;
19     for(II i=1;i<=n/2;i++){
20         if(__gcd(i,n-i)==1){
21             a=i;b=n-i;
22         }
23     }
24     cout<<a<<' '<<b<<endl;
25     return 0;
26 }
View Code

B. Maxim Buys an Apartment

題目連接:http://codeforces.com/contest/854/problem/Bspa

題目意思:有n個房屋排成一排,如今其中k個房屋已經住了人,可是不知道其中的哪些房屋住進了房屋,可是小明喜歡住進鄰居的房屋中有人住進的的房子裏。問最少有多少個房屋知足條件,最多有多少個房屋知足條件。code

題目思路:首先若是首先若是n遠大於k了話,那麼每個住人的房屋,周圍的兩個房屋都知足小明的條件,因此咱們想到每三個放一個。若是k×3>n,那麼答案就是n-k,不然答案就是2×k,固然還有一些特殊狀況,好比n==k還有k==0的時候,須要特判一下。blog

代碼:隊列

 1 /* ***********************************************
 2 Author        :xiaowuga
 3 Created Time  :2017年10月18日 星期三 13時36分58秒
 4 File Name     :Desktop/B.cpp
 5 ************************************************ */
 6 #include <bits/stdc++.h>
 7 typedef long long LL; 
 8 #define endl "\n" 
 9 #define inf 0x3f3f3f3f 
10 const long long N=1000000;
11 const long long mod=1e9+7;
12 using namespace std;
13 int main(){
14     ios::sync_with_stdio(false);cin.tie(0);
15     LL n,k;
16     cin>>n>>k;
17     cout<<(k&&k<n)<<' '<<min(n-k,2*k)<<endl;    
18     return 0;
19 }
View Code

C. Planning

題目連接:http://codeforces.com/contest/854/problem/Cci

題目意思:本來有n個航班,他們的起飛時間是1-n,如今機場規定在每一天的前k分鐘不能有飛機起飛,那麼就得有航班起飛要延誤,如今給出每一個航班延誤一分鐘所消耗的費用,問你怎麼安排飛機的起飛才能使花費最少,飛機起飛時間不能比本來的要早。get

題目思路:對於一個時間,用一個優先隊列處理能放在當前時間的擁有每分鐘最大損失的航班,這樣只須要n*logn的複雜度。

題目代碼:

 1 //Author: xiaowuga
 2 #include <bits/stdc++.h>
 3 using namespace std;
 4 #define inf 0x3f3f3f3f
 5 #define MAX INT_MAX
 6 #define mem(s,ch) memset(s,ch,sizeof(s))
 7 const long long N=100000; 
 8 const long long mod=1e9+7; 
 9 typedef long long LL;
10 typedef int II;
11 typedef unsigned long long ull;
12 #define nc cout<<"nc"<<endl
13 #define sp " "
14 int main() {
15     ios::sync_with_stdio(false);cin.tie(0);
16     struct node{
17         LL c,id;
18         bool operator <(const node &m) const {
19             return c<m.c;
20         }
21     };
22     LL n,k;
23     vector<node>a;
24     cin>>n>>k;
25     a.resize(n+1);
26     priority_queue<node>q;
27     for(LL i=1;i<=n;i++){
28         cin>>a[i].c;
29         a[i].id=i;
30     } 
31     vector<int>ans(n+1);
32     for(LL i=1;i<=k;i++) q.push(a[i]);
33     for(LL i=k+1;i<=n+k;i++){
34         if(i<=n) q.push(a[i]);
35         auto now=q.top();
36         q.pop();
37         ans[now.id]=i; 
38     }
39     LL sum=0;
40     for(II i=1;i<=n;i++){
41         sum+=(ans[i]-i)*a[i].c;
42     }
43     cout<<sum<<endl;
44     for(II i=1;i<=n;i++) cout<<ans[i]<<' ';
45     return 0;
46 }
View Code
相關文章
相關標籤/搜索