题目链接:Codeforces Round #433 (Div. 2)
题意:已知分子与分母的和,求分子小于分母的 最大的最简分数。
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <algorithm> 5 using namespace std; 6 int gcd(int a,int b){return b?gcd(b,a%b):a;} 7 int n; 8 int main() { 9 int a, b; 10 scanf("%d", &n); 11 for(int i = n/2; i >= 1; --i) 12 if(gcd(i, n-i)==1) {a = i, b = n-i; break;} 13 printf("%d %d ", a, b); 14 retur
codeforces 854 B. Maxim Buys an Apartment【水】
题意:有标号1~n的n个公寓顺序排列在一条线,已知有k个公寓不为空 但不知道是哪k个,定义一个 空的 并且旁边至少有一个 非空的公寓 为好公寓,问最少和最多有几个 好公寓。
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <algorithm> 5 using namespace std; 6 int n, k; 7 int main() { 8 int a, b; 9 scanf("%d %d", &n, &k); 10 if(k >= n/3+1) {a = (n!=k); b = n-k;} 11 else {a = (k!=0); b = k*2;} 12 printf("%d %d ", a, b); 13 return 0; 14 }
codeforces 853 A. Planning【贪心+优先队列】
题意:n个航班,原本顺序出发,现在已知前k分钟没有航班能出发,每个航班均只能延迟出发时间,已知每个航班延迟一分钟需要的花费,现在要你安排出发顺序,使得总花费最小。
题解:用优先队列维护延迟时间最大值,贪心的对每个位置取队列中的最大值。
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <queue> 5 #include <algorithm> 6 using namespace std; 7 typedef long long ll; 8 const int N = 3e5+5; 9 int n, k; 10 int c[N], a[N]; 11 priority_queue<pair<int, int> > q; 12 ll ans, t; 13 int main() { 14 ans = t = 0; 15 while(!q.empty()) q.pop(); 16 int i, j, x; 17 scanf("%d %d", &n, &k); 18 for(i = 1; i <= k+n; ++i) { 19 if(i <= n) { 20 scanf("%d", &x); t += x; 21 q.push(make_pair(x, i)); 22 } 23 if(i > k) { 24 a[q.top().second] = i; 25 t -= q.top().first; q.pop(); 26 } 27 ans += t; 28 } 29 printf("%lld ", ans); 30 for(i = 1; i < n; ++i) 31 printf("%d ", a[i]); 32 printf("%d ", a[n]); 33 return 0; 34 }
未完待补。。。
codeforces 853 B. Jury Meeting【贪心】
题意:有n+1个城市,0号为首都,1~n每个城市有一个人,现在要安排每个人去首都,并且所有人一起待上至少k天并且返回自己的城市(航班飞行时长为一天),给出m个航班信息(每个航班都是在 0号城市 与其他城市之间往返),求满足安排的最少花费。
题解:将航班按时间排序后,贪心算所有人在第i天前出发的最小花费和第i天后返回的最小花费,最后前缀后缀扫一下。
//因为各种细节问题WA。。QAQ
1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <algorithm> 5 #define CLR(a,b) memset((a),(b),sizeof((a))) 6 using namespace std; 7 typedef long long ll; 8 const int N = 1e5+5; 9 const int M = 1e6+5; 10 const ll inf = 2e11+5; 11 int n, m, k; 12 struct node { 13 int d, f, t, c; 14 bool operator < (const node &r)const { 15 return d < r.d; 16 } 17 }e[N]; 18 ll a[M], b[M]; 19 int d[N]; 20 int main() { 21 int i, j, day = 0, u; 22 ll ans = inf; 23 CLR(a, 0); CLR(b, 0); CLR(d, 0); 24 scanf("%d %d %d", &n, &m, &k); 25 for(i = 1; i <= m; ++i) { 26 scanf("%d%d%d%d", &e[i].d, &e[i].f, &e[i].t, &e[i].c); 27 day = max(day, e[i].d); 28 } 29 int num = n, tt = 0; 30 ll mi = 0; 31 sort(e+1, e+1+m); 32 for(i = 1; i <= m; ++i) { 33 tt = e[i].d; 34 if(u=e[i].f) { 35 if(!d[u]) { 36 d[u] = e[i].c; num--; 37 if(!num) { 38 for(j = 1; j <= n ; ++j)a[tt] += d[j]; 39 mi = a[tt]; 40 } 41 } 42 else if(d[u] > e[i].c){ 43 if(!num) {mi -= (d[u] - e[i].c); a[tt]=mi;} 44 d[u] = e[i].c; 45 } 46 } 47 } 48 if(num) {puts("-1"); return 0;} 49 CLR(d, 0); num = n; 50 for(i = m; i >= 1; --i) { 51 tt = e[i].d; 52 if(u=e[i].t) { 53 if(!d[u]) { 54 d[u] = e[i].c; num--; 55 if(!num) { 56 for(j = 1; j <= n ; ++j)b[tt] += d[j]; 57 mi = b[tt]; 58 } 59 } 60 else if(d[u] > e[i].c){ 61 if(!num) {mi -= (d[u] - e[i].c); b[tt]=mi;} 62 d[u] = e[i].c; 63 } 64 } 65 } 66 if(num) {puts("-1"); return 0;} 67 68 for(i = 1; i <= day; ++i) { 69 if(!a[i]) a[i] = a[i-1]; 70 else if(a[i-1]) a[i] = min(a[i], a[i-1]); 71 } 72 for(i = day; i >= 1; --i) { 73 if(!b[i]) b[i] = b[i+1]; 74 else if(b[i+1]) b[i] = min(b[i], b[i+1]); 75 } 76 77 //for(i = 1; i <= day; ++i) printf("%d ",a[i]);puts(""); 78 //for(i = day; i >= 1; --i) printf("%d ",b[i]);puts(""); 79 80 for(i = 1; i <= day; ++i) 81 if(a[i] && i+1+k <= day && b[i+1+k]) 82 ans = min(ans, a[i]+b[i+1+k]); 83 if(ans<inf) printf("%lld ", ans); 84 else puts("-1"); 85 return 0; 86 }