Problem:
お客様大感謝祭
悪天候が続き野菜の価格が高騰する中、セブンマートではお客様に野菜のまとめ買いセールを実施しています。 日ごろなかなか店頭に並ばない野菜もお手頃価格で手に入るとあって、        店内はとても賑わっています。
ある日、松長団地に住む仲良し 3 人組がセブンマートの広告を手に話に花を咲かせていました。今回のセールは「お客様大感謝祭」と銘打っただけに、袋詰めした野菜の中で最も安いものが無料になるのが目玉となっています。広告を読んでみると、どうやら以下のようなセールのようです。
1 つの袋には
m
個まで野菜を詰められる。
野菜が
m
個詰めてある袋については、その中で最も安い野菜が無料となる。
野菜の個数が
m
個に達しない袋は割引の対象外。
3人は早速セブンマートへ買い物に行きました。
買い物が終わり、  お店の外で待ち合わせた 3 人は安くてたくさん購入できたことに満足した様子で話をしていると、どうやら 3 人とも同じ野菜を購入していたことが分かりました。ある一人が、「本当に安いわよねぇ。これでXXX円だもの!」と言うと、もう一人は、「え?私はそれより**円高かったわ!どうして?」と驚き、また、残りの一人はレシートを見て自分が一番安く購入したことに気付きました。
さて、どのように袋詰めすれば購入価格を一番安くできるでしょうか。 購入する野菜の個数、袋に入る野菜の個数、各野菜の値段を入力とし、最低購入価格を出力するプログラムを作成してください。
Input
複数のデータセットの並びが入力として与えられます。入力の終わりはゼロふたつの行で示されます。
各データセットは以下の形式で与えられます。
n
m
p
1
p
2
...
p
n
1 行目に購入する野菜の個数
n
(1 ≤
n
≤ 1000) と袋に入る野菜の個数
m
(1 ≤
m
≤ 1000)　が与えられます。２行目に各野菜の値段
p
i
(10 ≤
p
i
≤ 10000) が与えられます。
データセットの数は 100 を超えません。
Output
入力データセットごとに、最低購入価格を１行に出力します。
Sample Input
4 2
50 40 100 80
7 3
400 300 100 700 200 600 500
0 0
Output for the Sample Input
150
2100

Submitted solutions:

code_snippet: #include<iostream>
using namespace std;
int main() {
	int a, b, date[11111],date2[11111],dai,kk,ans;
	while (1) {
		cin >> a >> b;
		if (a == 0 && b == 0) {
			goto a;
		}
		ans = 0;
		for (int i = 1; i <= a; i++) {
			cin >> date[i];
			ans += date[i];
		}
		for (int i = 1; i <= a; i++) {
			dai = 0;
			for (int z = 1; z <= a; z++) {
				if (dai <= date[z]) {
					dai = date[z];
					kk = z;
				}
			}
			date[kk] = 0;
			date2[i] = dai;
		}
		int ok = 0;
		while(ok<= a-b) {
			ok = ok + b;
			ans -= date2[ok];
		}
		cout << ans << endl;
	}
a:;
}
accuracy: 1
time_ms: 20
memory_kb: 3124
final_rank: 18

code_snippet: #include<iostream>
#include<utility>
using namespace std;

void selectionsort(int A[], int N){
  int minj;
  for(int i=N-1;i>=0;i--){
    minj = i;
    for(int j=i-1;j>=0;j--){
      if(A[j]<A[minj]) minj = j;
    }
    if(minj != i){
      swap(A[minj], A[i]);
    }
  }
}

int main(){
  int n, m;
  while(1){
    int sum = 0;
    cin>>n>>m;
    if(!(n * m)) return 0;
    int  P[1000];
    for(int i=0;i<n;i++){
      cin>>P[i];
      sum += P[i];
    }
    selectionsort(P, n);
    for(int i=1;i<=n/m;i++){
      sum -= P[i*m-1];
    }
    cout<<sum<<endl;
  }
}
accuracy: 1
time_ms: 30
memory_kb: 3064
final_rank: 20

code_snippet: #include"iostream"
using namespace std;
int main() {
	while (1) {
		int n, m,p[10000],sum=0;
		cin >> n >> m;
		
		if (n == 0 && m == 0)break;

		for (int i = 1; i <= n; i++) {
			cin >> p[i];
	}

		for (int j = 0; j < n - 1; j++) {
			for (int i = 1; i < n ; i++) {
				if (p[i] < p[i + 1]) {
					swap(p[i], p[i + 1]);

				}
			}
		}
		for (int i = 1; i <= n; i++) {
					if (i%m != 0) {
						sum += p[i];
					}

			}
		
		cout << sum << endl;
	}
		
	return 0;
}
accuracy: 1
time_ms: 20
memory_kb: 3084
final_rank: 17

code_snippet: #include<bits/stdc++.h>
using namespace std;
int main(){
	int n,m,temp;
	while(1){
		cin >> n >> m;
		int a[n+1],sum=0;
		if(n==m && n==0) break;
		for(int i=1;i<=n;i++){
			cin >> a[i];
		}
		for(int i=1;i<n;i++){
			for(int j=i+1;j<n+1;j++){
				if(a[i]<a[j]){
					temp=a[i];
					a[i]=a[j];
					a[j]=temp;
				}
			}
		}
		for(int i=1;i<n+1;i++){
			if(i%m!=0){
				sum+=a[i];
			}
		}
		cout << sum << endl;
	}
}
accuracy: 1
time_ms: 20
memory_kb: 2948
final_rank: 13

code_snippet: #include<bits/stdc++.h>
using namespace std;
int main(){
while(1){
  int n,m;
  int p[10000];
  int sum=0;
  cin>>n>>m;
  if(n==0 && m==0) break;
  for(int i=0;i<n;i++){
    cin>>p[i];
    }
  for(int i=0;i<n;i++){
    for(int j=0;j<n-1;j++){
      if(p[j]<p[j+1]) swap(p[j],p[j+1]);
      }
    }
  for(int i=0;i<n;i++){
    if(i%m==m-1) p[i]=0;
    }
  for(int i=0;i<n;i++){
    sum+=p[i];
    }
  cout<<sum<<endl;
}

  return 0;
}
accuracy: 1
time_ms: 20
memory_kb: 3060
final_rank: 15

code_snippet: #include <bits/stdc++.h>
using namespace std;

int p[1010];

int main(){
	while(1){
		int n,m,t=0;
		cin>>n>>m;
		if(n==0&&m==0) break;
		for(int i=0;i<n;i++) cin>>p[i];
		int f=1;
		while(f==1){
			f=0;
			for(int j=0;j<n-1;j++){
				if(p[j]<p[j+1]){
					swap(p[j],p[j+1]);
					f=1;
				}
			}
		}
		for(int i=1;i<=n/m;i++){
			p[i*m-1]=0;
		}
		for(int i=0;i<n;i++){
			t+=p[i];
		}
		cout<<t<<endl;
	}
	return 0;
}
accuracy: 1
time_ms: 20
memory_kb: 3072
final_rank: 16

code_snippet: #include <iostream>
using namespace std;
int main(){
	int n,m;
	int vegetable[10001];
	while(cin>>n>>m){
		if(n+m==0)break;
		for(int i=0 ; i<n ; i++ )
			cin>>vegetable[i];
		//sort__
		for(int i=0 ; i<n ; i++ ){
			for(int j=i+1 ; j<n ; j++ ){
				if( vegetable[i] < vegetable[j] ){
					int tmp=vegetable[i];
					vegetable[i]=vegetable[j];
					vegetable[j]=tmp;
				}
			}
		}
		//_sort.
		int x=n/m;
		int y=n%m;
		int sum=0;
		int tmp;
		for(int i=n-y ; i<n ; i++ )
			sum+=vegetable[i];
		for(int i=0 ; i<n-y ; i++ ){
			if((i+1)%m){
				sum+=vegetable[i];
			}
		}
		cout<< sum << endl;
	}
}
accuracy: 1
time_ms: 20
memory_kb: 2988
final_rank: 14

code_snippet: #include <stdio.h>
#include <vector>
#include <algorithm>
#include <math.h>
#include <queue>

using namespace std;

int main(){

	int n,m,table[1000],sum;

	while(true){
		scanf("%d %d",&n,&m);
		if(n == 0 && m == 0)break;

		for(int i = 0; i < n; i++){
			scanf("%d",&table[i]);
		}

		for(int i = 1; i <= n-1; i++){
			for(int k = n-1; k >= i; k--){
				if(table[k] > table[k-1])swap(table[k],table[k-1]);
			}
		}

		sum = 0;

		for(int i = 0; i < n; i++){
			if(i%m != m-1){
				sum += table[i];
			}
		}
		printf("%d\n",sum);
	}

	return 0;
}
accuracy: 1
time_ms: 10
memory_kb: 2676
final_rank: 10

code_snippet: #include<iostream>
#include<vector>
#include<string>
#include<algorithm>
using namespace std;

int main()
{
	while (1) {
		int a,b;
		cin >> a>>b;
		if (a == 0&&b==0)break;
		vector<int>s(a);
		for (int c = 0; c < a; c++) {
			cin >> s[c];
		}
		sort(s.begin(), s.end());
		int goukei = 0;
		for (int e = 0; e < a; e++) {
			if ((e + 1) % b != 0)goukei += s[s.size() - 1 - e];
		}
		cout << goukei << endl;
	}
}
accuracy: 1
time_ms: 10
memory_kb: 3152
final_rank: 11

code_snippet: #include<bits/stdc++.h>
#define range(i,a,b) for(int i = (a); i < (b); i++)
#define rep(i,b) range(i,0,b)
#define itrep(it, a) for(it = (a).begin(); it != (a).end(); it++)
#define all(a) (a).begin(), (a).end()
#define debug(x) cout << "debug " << x << endl;
#define INF (1 << 30)
using namespace std;

int main(){
    int n,m;
    while(cin >> n >> m, n||m){
        int a[1005], ans = 0;
        rep(i,n) cin >> a[i];
        sort(a, a + n, greater<int>());
        rep(i,n){
            if(i % m != m - 1) ans+=a[i];
        }
        cout << ans << endl;
    }
}
accuracy: 1
time_ms: 10
memory_kb: 1180
final_rank: 2

code_snippet: #include <iostream>
#include <string>
#include <algorithm>
#include <numeric>
#include <boost/tokenizer.hpp>
#include <boost/lexical_cast.hpp>
#include <vector>
#include <list>

using namespace std;
using namespace boost;


int main(int argc, char* argv[])
{
	using sprtr = char_separator<char>;
	using tknzr = tokenizer<sprtr>;
	sprtr sep(" ", "", keep_empty_tokens);

	int f, mf, mo;

	string line;
	while(1) {

		int n, m;
		{
			getline(cin, line);
			tknzr tkns(line, sep);
			auto it = tkns.begin();
			n = lexical_cast<int>(*it++);
			m = lexical_cast<int>(*it);
		}

		if( n == 0 && m == 0 ) {
			break;
		}
		
		list<int> ps;		
		{
			getline(cin, line);
			tknzr tkns(line, sep);
			for( auto p : tkns ) {
				//cout << p << endl;
				ps.push_back(lexical_cast<int>(p));
			}
		}

		ps.sort(greater<int>());

		int div = n / m;
		int mod = n % m;

		int sum = 0;
		auto it = ps.begin();
		for( int i = 0; i < div; i++ ) {
			for( int j = 0; j < m; j++ ) {
				auto p = *it++;
				if( j == m-1 ) continue;
				sum += p;
			}
		}

		if( mod ) {
			for( int i = 0; i < mod; i++ ) {
				auto p = *it++;
				sum += p;			   
			}
		}

		cout << sum << endl;

		ps.clear();
		
	}

    return 0;
}
accuracy: 1
time_ms: 20
memory_kb: 3136
final_rank: 19

code_snippet: #include <iostream>
#include <algorithm>
#include <vector>

using namespace std;

typedef long long ll;

int main() {
  int n,m,q;
  ll res;
  vector<ll> v;
  while(true) {
    cin >> n >> m;
    if(n == 0) break;
    v.clear();
    res = 0;
    for(int i = 0; i < n; i++){
      cin >> q;
      v.push_back(q);
    }
    sort(v.begin(), v.end(), greater<int>());
    for(int i=0; i < n; i++) {
      if(i % m != m - 1)
        res += v[i];
    }
    cout << res << endl;
  }
  
  return 0;
}
accuracy: 1
time_ms: 10
memory_kb: 1228
final_rank: 3

code_snippet: #include<stdio.h>
int main(void)
{
	int a,s,d[2000],f,g,h,i,j;
	scanf("%d %d",&a,&s);
	while(a!=0&&s!=0){
		for(i=1;i<=a;i++){
			scanf("%d",&d[i]);
		}
		for(i=1;i<=a;i++){
			for(j=i;j<=a;j++){
				if(d[i]<d[j]){
					f=d[i];
					d[i]=d[j];
					d[j]=f;
				}
			}
		}
		g=0;
		h=0;
		for(i=1;i<=a;i++){
			if(g==s-1){
				g=0;
				d[i]=0;
			}
			else if(g!=s-1){
				g++;
				h+=d[i];
			}
			//printf("%d %d\n",g,d[i]);
		}
		printf("%d\n",h);
	scanf("%d %d",&a,&s);
	}
	return 0;
}
accuracy: 1
time_ms: 20
memory_kb: 1036
final_rank: 8

code_snippet: #include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

int main()
{
	int n,m;
	while(cin>>n>>m&&n)
	{
		vector<int> a;
		int ans=0;
		for(int i=0;i<n;i++)
		{
			int x;
			cin>>x;
			a.push_back(x);
		}
		sort(a.begin(),a.end());
		for(int i=0;i<n%m;i++)
		{
			ans+=a[0];;
			a.erase(a.begin());
		}
		n-=n%m;
		for(int i=0;i<a.size();i++)ans+=a[i];
		for(int i=0;i<n/m;i++)
		{
			ans-=a[i*m];
		}
		cout<<ans<<endl;
	}
	
}
accuracy: 1
time_ms: 10
memory_kb: 1232
final_rank: 5

code_snippet: #include<bits/stdc++.h>
using namespace std;
int main()
{
    int n,m;
    while(cin>>n>>m,n,m){
        int vege[1000];
        for(int i=0;i<n;i++)cin>>vege[i];
        sort(vege,vege+n);
        for(int i=1;n-m*i>=0;i++)vege[n-m*i]=0;
        for(int i=1;i<n;i++)vege[0]+=vege[i];
        cout<<vege[0]<<endl;
    }
}
accuracy: 1
time_ms: 10
memory_kb: 1176
final_rank: 1

code_snippet: #include<iostream>
#include<queue>
#define loop(i,a,b) for(int i=a;i<b;i++)
#define rep(i,a) loop(i,0,a)
using namespace std;

int main(){
	int n,m,dt;
	while(1){
		cin>>n>>m;
		if(!(n&&m))break;
		priority_queue<int> que;
		rep(i,n){cin>>dt;que.push(dt);}
		int cnt=0,sum=0;
		while(!que.empty()){
			cnt++;
			if(cnt!=m)sum+=que.top();
			else cnt=0;
			que.pop();
		}
		cout<<sum<<endl;
	}
	return 0;
}
accuracy: 1
time_ms: 10
memory_kb: 1228
final_rank: 3

code_snippet: #include<stdio.h>
int main(){
  int m,n,a[1000],i,k,st,c;
  while(1){
    c=0;
    scanf("%d%d",&n,&m);
    if(n==0&&m==0)break;
    k=n;
    for(i=0;i<n;i++){
      scanf("%d",&a[i]);
    }
    while(k!=0){
      for(i=1;i<k;i++){
	if(a[i-1]>a[i]){
	  st=a[i];
	a[i]=a[i-1];
	a[i-1]=st;
	}
      }
	k--;
    }
    for(i=n;i>=0;i-=m){
      a[i]=0;
    }
    for(i=0;i<n;i++){
      c+=a[i];
    }
    printf("%d\n",c);
  }
  return 0;
}
accuracy: 1
time_ms: 20
memory_kb: 1032
final_rank: 7

code_snippet: #include<iostream>
using namespace std;
int main(){
  while(1){
    int ans=0,n,m,p[1001]={};
    cin>>n>>m;
    if(n==0 && m==0)break;
    for(int i=0;i<n;i++)
      cin>>p[i];
    
    for(int j=0;j<n;j++) 
      for(int i=0;i<n;i++)
	if(p[i]<p[i+1])swap(p[i],p[i+1]);

    for(int i=0;i<n;i++){
      if((i+1)%m==0)p[i]=0;
      ans+=p[i];
    }

    cout<<ans<<endl;
  }
  return 0;
}
accuracy: 1
time_ms: 50
memory_kb: 1160
final_rank: 12

code_snippet: #include <iostream>
#include <list>

int main() {
  int num,bag,sum;
	
  while(std::cin >> num >> bag){
	
    if(num!=0 && bag!=0){
      std::list<int>  beg;
      for(int i=0;i<num;++i){
	int price;
	std::cin >> price;
	beg.push_back(price);
      }
      beg.sort(std::greater<int>());
      sum=0;
	        
      for(int i=1;beg.empty()!=true;i++){	   
        if(i%bag != 0){
          sum+=beg.front();
        }	
        beg.pop_front();
      }
      std::cout << sum << std::endl;
    }
  }
  return 0;
}
accuracy: 1
time_ms: 20
memory_kb: 1224
final_rank: 9

code_snippet: #include <iostream>
#include <queue>

int main(){
    while (true) {
        int n;  // I will buy n vegetables.
        int m;  // One bag contains m vegetables.

        std::cin >> n >> m;
        if ( n==0 && m==0 ) {
            return 0;
        }

        // input vegetable's cost.
        std::priority_queue<int> buy;	            // the first item in 'buy' is the most expensive.
        int in;
        for (int i=0; i < n ; ++i) {
            std::cin >> in;
            buy.push(in);
        }

        int cost = 0;  // How much must I pay?
        int x = 1;  // This is the 'x'th vegetable in the bag.
        while ( ! buy.empty() ) {
            // the 'm'th item in the bag is free!
            if ( x > m-1 ) {
                x = 1;
            }else{
                cost += buy.top();
                ++x;
            }
            buy.pop();
        }

        // output
        std::cout << cost << std::endl;
    }

    return 0;
}
accuracy: 1
time_ms: 10
memory_kb: 1232
final_rank: 5