本文主要是介绍18.12.15 Nuist_acm集训队个人赛,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
VJ上的原题地址:https://cn.vjudge.net/problem/CodeForces-789A
题目大意: 给定一组石头,每个数字都是种类各不相同的石头的个数,现在有两个容量为k
的桶,每个桶里不能有不同种类的石头,每一次都只能使用这两个桶,求需要装多少次(桶可以不装满)
思路:先排序,再模拟,模拟不能用减法,会TLE,用模运算
注意注意注意:最后一天的时候,因为只剩下一种石头了,所以桶的容量相当于变成了2k
代码:
#include<iostream>
#include<algorithm>
#include<vector>
#include<cstdio>
using namespace std;int main()
{int n,k,x;vector<int> arr;while(scanf("%d %d",&n,&k)!=EOF){int ans=0;arr.clear();for(int i=0;i<n;i++){scanf("%d",&x);arr.push_back(x);}sort(arr.begin(),arr.end());for(int i=0;i<n;i++){while(arr[i]>0){if(i+1==n){int t=arr[i]%(2*k),tt=arr[i]/(2*k);if(t!=0)tt++;ans+=tt;break;}int t=arr[i]%k,tt=arr[i]/k;if(t!=0)tt++;arr[i]=0;if(i+1<n)arr[i+1]-=tt*k;ans+=tt;} }printf("%d\n",ans);}return 0;
}
嘛,我用了 vector,就和数组一样,C的话,直接用数组就好了
ps:我用了sort函数,C++在algorithm里面,C在stdlib.h里面
话说C++好用多了,c语言党还不学上一手(滑稽
这篇关于18.12.15 Nuist_acm集训队个人赛的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!