cf #214div2

 Dima and Guards
Time Limit:1000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u

Description

Nothing has changed since the last round. Dima and Inna still love each other and want to be together. They've made a deal with Seryozha and now they need to make a deal with the dorm guards...

There are four guardposts in Dima's dorm. Each post contains two guards (in Russia they are usually elderly women). You can bribe a guard by a chocolate bar or a box of juice. For each guard you know the minimum price of the chocolate bar she can accept as a gift and the minimum price of the box of juice she can accept as a gift. If a chocolate bar for some guard costs less than the minimum chocolate bar price for this guard is, or if a box of juice for some guard costs less than the minimum box of juice price for this guard is, then the guard doesn't accept such a gift.

In order to pass through a guardpost, one needs to bribe both guards.

The shop has an unlimited amount of juice and chocolate of any price starting with 1. Dima wants to choose some guardpost, buy one gift for each guard from the guardpost and spend exactlyn rubles on it.

Help him choose a post through which he can safely sneak Inna or otherwise say that this is impossible. Mind you, Inna would be very sorry to hear that!

Input

The first line of the input contains integer n (1 ≤ n ≤ 105) — the money Dima wants to spend. Then follow four lines describing the guardposts. Each line contains four integers a, b, c, d (1 ≤ a, b, c, d ≤ 105) — the minimum price of the chocolate and the minimum price of the juice for the first guard and the minimum price of the chocolate and the minimum price of the juice for the second guard, correspondingly.

Output

In a single line of the output print three space-separated integers: the number of the guardpost, the cost of the first present and the cost of the second present. If there is no guardpost Dima can sneak Inna through at such conditions, print -1 in a single line.

The guardposts are numbered from 1 to 4 according to the order given in the input.

If there are multiple solutions, you can print any of them.

Sample Input

Input
10 5 6 5 6 6 6 7 7 5 8 6 6 9 9 9 9
Output
1 5 5
Input
10 6 6 6 6 7 7 7 7 4 4 4 4 8 8 8 8
Output
3 4 6
Input
5 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3 3
Output
-1

Hint

Explanation of the first example.

The only way to spend 10 rubles to buy the gifts that won't be less than the minimum prices is to buy two 5 ruble chocolates to both guards from the first guardpost.

Explanation of the second example.

Dima needs 12 rubles for the first guardpost, 14 for the second one, 16 for the fourth one. So the only guardpost we can sneak through is the third one. So, Dima can buy 4 ruble chocolate for the first guard and 6 ruble juice of the second guard.

题解:有4个阵地,每个阵地两个女士兵把手,一个人贿赂女士兵,士兵需要巧克力或者橘子汁来贿赂

女士兵对这两个礼物都有价格限制;这个人打算用n元钱去贿赂;问可以进入的阵营编号,以及贿赂这两名士兵各自用的钱数;

代码:

extern "C++"{
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<queue>
using namespace std;
const int INF = 0x3f3f3f3f;
#define mem(x,y) memset(x,y,sizeof(x))
typedef long long LL;
typedef unsigned long long ULL;

void SI(int &x){scanf("%d",&x);}
void SI(double &x){scanf("%lf",&x);}
void SI(LL &x){scanf("%lld",&x);}
void SI(char *x){scanf("%s",x);}
}
const int MAXN = 1e5 + 100;
int bag[MAXN];
int main(){ 
    int n;
    int guard[4];
    while(~scanf("%d",&n)){
        int a,b,c,d,ans = 0,l,r;
        for(int i = 0;i < 4;i++){
            scanf("%d%d%d%d",&a,&b,&c,&d);
            if(ans)continue;
            int x = min(a,b) + min(c,d);
            if(x <= n){
                ans = i + 1;l = min(a,b);
                r = n - l;
            }
        }
        if(ans){
            printf("%d %d %d
",ans,l,r);
        }
        else puts("-1");
    }
    return 0;
}
Dima and To-do List
Time Limit:1000MS     Memory Limit:262144KB     64bit IO Format:%I64d & %I64u

Description

You helped Dima to have a great weekend, but it's time to work. Naturally, Dima, as all other men who have girlfriends, does everything wrong.

Inna and Dima are now in one room. Inna tells Dima off for everything he does in her presence. After Inna tells him off for something, she goes to another room, walks there in circles muttering about how useless her sweetheart is. During that time Dima has time to peacefully complete k - 1 tasks. Then Inna returns and tells Dima off for the next task he does in her presence and goes to another room again. It continues until Dima is through with his tasks.

Overall, Dima has n tasks to do, each task has a unique number from 1 to n. Dima loves order, so he does tasks consecutively, starting from some task. For example, if Dima has 6 tasks to do in total, then, if he starts from the 5-th task, the order is like that: first Dima does the 5-th task, then the 6-th one, then the 1-st one, then the 2-nd one, then the 3-rd one, then the 4-th one.

Inna tells Dima off (only lovingly and appropriately!) so often and systematically that he's very well learned the power with which she tells him off for each task. Help Dima choose the first task so that in total he gets told off with as little power as possible.

Input

The first line of the input contains two integers n, k (1 ≤ k ≤ n ≤ 105). The second line contains n integers a1, a2, ..., an (1 ≤ ai ≤ 103), where ai is the power Inna tells Dima off with if she is present in the room while he is doing the i-th task.

It is guaranteed that n is divisible by k.

Output

In a single line print the number of the task Dima should start with to get told off with as little power as possible. If there are multiple solutions, print the one with the minimum number of the first task to do.

Sample Input

Input
6 2 3 2 1 6 5 4
Output
1
Input
10 5 1 3 5 7 9 9 4 1 8 5
Output
3

Hint

Explanation of the first example.

If Dima starts from the first task, Inna tells him off with power 3, then Dima can do one more task (as k = 2), then Inna tells him off for the third task with power 1, then she tells him off for the fifth task with power 5. Thus, Dima gets told off with total power 3 + 1 + 5 = 9. If Dima started from the second task, for example, then Inna would tell him off for tasks 2, 4 and 6 with power 2 + 6 + 4 = 12.

Explanation of the second example.

In the second example k = 5, thus, Dima manages to complete 4 tasks in-between the telling off sessions. Thus, Inna tells Dima off for tasks number 1 and 6 (if he starts from 1 or 6), 2 and 7 (if he starts from 2 or 7) and so on. The optimal answer is to start from task 3 or 8, 3 has a smaller number, so the answer is 3.

题解:

姑娘给你一个开始位置;然后每隔n/k位就加上当前值;问总值最小的编号;c#写的;

C#代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{
    class Program
    {
        static void getdata(ref int x)
        {
            x = 0;
            int c;
            while (true)
            {
                c = Console.Read();
               // Console.WriteLine((char) c);
                if (c < '0' || c > '9') break;
                x = x * 10 + c - '0';
            }
        }
        static void Main(string[] args)
        {
            int[] a = new int[100010];
            int[] ans = new int[100010];
            for (int i = 0; i < 100010; i++)
                ans[i] = 0;
            int n = 0, k = 0;
            getdata(ref n);
            getdata(ref k);
            // Console.WriteLine("{0} {1}", n, k);
            getdata(ref a[0]);
            for (int i = 1;i <= n; i++)
            {
                getdata(ref a[i]);
            }
            /*
            for (int i = 1; i <= n; i++)
            {
                Console.Write("{0} ", a[i]);
            }
            Console.WriteLine();
            */
            int t = n / k;
            for(int i = 1;i <= n; i++)
            {
                ans[i % k == 0 ? k : i % k] += a[i];
               // Console.Write("ans{0}={1}   ", i % k == 0 ? k : i % k, ans[i % k == 0 ? k : i % k]);
            }
            int mx = 0x3f3f3f3f, pos = 0;
            for(int i = 1;i <= k; i++)
            {
                if(ans[i] < mx)
                {
                    mx = ans[i];
                    pos = i;
                }
            }
            Console.WriteLine(pos);
           // while (true) ;
        }
    }
}
原文地址:https://www.cnblogs.com/handsomecui/p/5336316.html