水题 codeforces 158B Taxi

贪心题,虽然是道水题,但是因为当时花了点时间,而且用了两种方法,并且尚存一些问题没有解决,所以写下来:
先讲贪心的做法:先将数据从大到小排序:将大的一边和小的一边相加,与4进行比较:如果小于等于4,队伍-2,车数+1,再与小的一边相加,如果仍满足条件,队伍-1,车数不变,重复过程,直到不满足条件;如果大于4,队伍-1,车数+1
先贴超时错误的代码:

#include<iostream>
#include<stdio.h>
#include<queue>
#include<functional>
using namespace std;
int main()
{
 int n,ans=0;
 scanf("%d", &n);
 int a[10001];
 for (int i = 0; i < n; ++i) {
  scanf("%d", &a[i]);
 }
 sort(a, a + n,greater<int>());
 for (int i = 0; i < n; ++i) {
   while (a[i] + a[n-1] <= 4)
   {
    a[i] += a[n-1]; n--;
   }
   ans++;
 }
 printf("%d\n", ans);
 return 0;
}

方法与正确方法思路差不多,但是超时原因尚不清楚
再贴正确代码:

#include<iostream>
#include<algorithm>
#include<functional>
using namespace std;
int a[100010];
int main()
{
 int n;
 cin>>n;
 for(int i=0;i<n;i++)   cin>>a[i];
 sort(a,a+n,greater<int>());
 int ans=0,sum=0;
 for(int i=0;i<n;i++)
 {
  int sum=a[i]+a[n-1];
  if(sum<=4)
  {
   ans++;
   n--;
   while(sum+a[n-1]<=4)
   {
    n--;
    sum+=a[n-1];
   }
  }
  else ans++;
 }
 cout<<ans<<endl;
 return 0;
}

另一种方法则是纯粹的数学解法:

#include<iostream>
#include<stdio.h>
#include<queue>
#include<functional>
#include<cmath>
#include<stdlib.h>
using namespace std;
int main()
{
 int n,ans=0,A=0,b=0,c=0;
 scanf("%d", &n);
 int a[100001];
 for (int i = 0; i < n; ++i) {
  scanf("%d", &a[i]);
  if (a[i] == 4)ans++;
  else if (a[i] == 3)c++;
  else if (a[i] == 2)b++;
  else if (a[i] == 1)A++;
 }
 if (c >= A) {
  ans += c;
  ans += (b+1) / 2;
 }
 else if (c < A) {
  ans += b / 2;
  b %= 2;
  ans += c;
  A -= c;
  ans += A / 4;
  A %= 4;
  if (b) {
   A -= 2;
   ans++;
  }
  if (A > 0)ans++;
 }
 printf("%d\n", ans);
 return 0;
}

原文地址:https://www.cnblogs.com/sqlbf/p/10317754.html

时间: 2024-10-11 08:55:51

水题 codeforces 158B Taxi的相关文章

水题 Codeforces Round #286 (Div. 2) A Mr. Kitayuta&#39;s Gift

题目传送门 1 /* 2 水题:vector容器实现插入操作,暴力进行判断是否为回文串 3 */ 4 #include <cstdio> 5 #include <iostream> 6 #include <algorithm> 7 #include <cstring> 8 #include <string> 9 #include <vector> 10 using namespace std; 11 12 const int MAXN

水题 Codeforces Round #303 (Div. 2) A. Toy Cars

题目传送门 1 /* 2 题意:5种情况对应对应第i或j辆车翻了没 3 水题:其实就看对角线的上半边就可以了,vis判断,可惜WA了一次 4 3: if both cars turned over during the collision. 5 是指i,j两辆车,而不是全部 6 */ 7 #include <cstdio> 8 #include <algorithm> 9 #include <cstring> 10 #include <cmath> 11 #

水题 Codeforces Round #299 (Div. 2) A. Tavas and Nafas

题目传送门 1 /* 2 很简单的水题,晚上累了,刷刷水题开心一下:) 3 */ 4 #include <bits/stdc++.h> 5 using namespace std; 6 7 char s1[11][10] = {"zero", "one", "two", "three", "four", "five", "six", "seven

水题 Codeforces Round #302 (Div. 2) A Set of Strings

题目传送门 1 /* 2 题意:一个字符串分割成k段,每段开头字母不相同 3 水题:记录每个字母出现的次数,每一次分割把首字母的次数降为0,最后一段直接全部输出 4 */ 5 #include <cstdio> 6 #include <iostream> 7 #include <cstring> 8 #include <string> 9 #include <algorithm> 10 using namespace std; 11 12 con

水题 Codeforces Round #300 A Cutting Banner

题目传送门 1 /* 2 水题:一开始看错题意,以为是任意切割,DFS来做:结果只是在中间切出一段来 3 判断是否余下的是 "CODEFORCES" :) 4 */ 5 #include <cstdio> 6 #include <iostream> 7 #include <cstring> 8 #include <string> 9 #include <algorithm> 10 #include <cmath>

水题 Codeforces Round #308 (Div. 2) A. Vanya and Table

题目传送门 1 /* 2 水题:读懂题目就能做 3 */ 4 #include <cstdio> 5 #include <iostream> 6 #include <algorithm> 7 #include <cstring> 8 #include <cmath> 9 #include <vector> 10 #include <string> 11 #include <queue> 12 #include

水题 Codeforces Beta Round #70 (Div. 2) A. Haiku

题目传送门 1 /* 2 水题:三个字符串判断每个是否有相应的元音字母,YES/NO 3 下午网速巨慢:( 4 */ 5 #include <cstdio> 6 #include <cstring> 7 #include <string> 8 #include <iostream> 9 #include <algorithm> 10 #include <cmath> 11 using namespace std; 12 13 cons

水题 Codeforces Round #304 (Div. 2) A. Soldier and Bananas

题目传送门 1 /* 2 水题:ans = (1+2+3+...+n) * k - n,开long long 3 */ 4 #include <cstdio> 5 #include <algorithm> 6 #include <cstring> 7 #include <cmath> 8 using namespace std; 9 10 typedef long long ll; 11 12 int main(void) //Codeforces Roun

水题/CodeForces 485B Valuable Resources

1 /* 2 PROBLEM:CF 485B 3 AUTHER:Nicole 4 MEMO:水题 5 */ 6 #include<cstdio> 7 #include<cmath> 8 using namespace std; 9 const long long MAX=9999999999; 10 int main() 11 { 12 long long xmax,xmin,ymax,ymin; 13 xmax=-MAX,ymax=-MAX; 14 xmin=MAX,ymin=M