Конкурс очков 2, редакция

Вопрос 1F — Ледяной Трон HDU — 1248

Оригинальное название

http://acm.hdu.edu.cn/showproblem.php?pid=1248

Вход

Первая строка входных данных представляет собой целое число T (1<=T<=100), которое представляет количество тестовых данных. Затем есть T строк тестовых данных, каждые тестовые данные содержат только положительное целое число N (1<= N<= 10000), N представляет номинальную стоимость банкноты в руке рыцаря смерти.

Примечание. В магазине гоблинов есть только три предмета, описанные в вопросе.

Выход

Для каждого набора тестовых данных выведите минимальную сумму денег , которую рыцарь смерти должен потратить в качестве
чаевых гоблинскому торговцу.





Отвечать

Хотя этот вопрос является вопросом динамического программирования, вы все равно можете использовать только самый популярный метод - QAQ. Я не знаю, как заниматься динамическим программированием
(метод более умный, ищет связь между 150, 200, 350 (350 = 150+200, поэтому 350 можно напрямую заменить на 150+200) , остальные 200 можно считать 150+50))

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
int main()
{
    
    
    int t,n,sum,n1;
    cin>>t;
    while(t--)
    {
    
    
        cin>>n;
        sum=n;
        n1=sum/150;
        sum=sum%150;
        if(sum/50<=n1)
        {
    
    
            sum=sum%50;
        }
        else
            sum=sum-n1*50;
        cout<<sum<<endl;
    }
    return 0;
}

Вопрос 2J – История соленой воды HDU – 1408

Оригинальное название

При подвешивании соленой воды, если капание регулярное, сначала капните одну каплю и сделайте паузу; затем капните две капли и сделайте паузу; затем капните три капли и сделайте паузу... Теперь возникает вопрос: в этой бутылке с соленой водой общее количество ВУЛ мл.Каждая капля составляет D миллилитров, а скорость каждой капли равна одной секунде (при условии, что последняя капля меньше D миллилитров, затраченное время также считается за одну секунду), а время паузы также составляет одну секунду. Когда закончится эта бутылка воды?

Вход

Входные данные содержат несколько экземпляров теста, каждый экземпляр занимает одну строку, состоящую из VUL и D, где 0<D<VUL<5000.

Выход

Для каждого набора тестовых данных выведите время, необходимое для завершения установки соленой воды.Вывод каждого экземпляра занимает одну строку.

Пример ввода

10 1

Пример вывода

13

Отвечать

В этом вопросе рассматривается симуляция, и есть двойная яма. Если я использую int для определения мощности и объема капли, как бы я это ни писал, это будет WA - наконец-то позаимствую код друга, чтобы исправить это.

#include <iostream>

using namespace std;

int main()
{
    
    
    double a,b,sum;
    while(cin>>a>>b)
    {
    
    
        sum=0;
        int i=1,ii;
        ii=i;
        while(a>0)
        {
    
    
            while(ii--)
            {
    
    
                if(a>0)
                {
    
    
                    sum=sum+1;
                    a=a-b;
                }
            }
            if(a>0)
            {
    
    
                sum=sum+1;
                i++;
                ii=i;
            }

        }
        cout<<sum<<endl;
    }
    return 0;
}

Вопрос 3А — Веселые прыгуны SCU — 1997 г.

Оригинальное название

Перевод:
Последовательность из n>0 целых чисел называется весёлой перемычкой, если абсолютное значение разницы между последовательными элементами принимает все значения от 1 до n-1. Например,

1 4 2 3

Будьте счастливы, прыгайте, потому что абсолютная разница равна 3, 2 и 1 соответственно. Это определение означает, что любая последовательность целых чисел — это веселый прыгун. Вам нужно написать программу, которая будет определять, является ли каждая последовательность в серии последовательностей весёлым прыжком.

Вход

Каждая строка входных данных содержит целое число с n < 3000, за которым следуют n целых чисел, представляющих последовательность.

Выход

Для каждой строки ввода сгенерируйте одну строку вывода, обозначающую «Веселый» или «Невеселый».

Пример ввода

4 1 4 2 3
5 1 4 2 -1 6

Пример вывода

Веселый
Не веселый

Отвечать

#include <cstdio>
#include <iostream>
#include <cmath>
#include <string>
#include <cstring>
#include <algorithm>
#include <queue>
#include <vector>
#include <map>
using namespace std;
#define ll long long
const int inf = 0x3f3f3f3f;
const int mod = 1e9+7;

int n, a[10000+8], buffer[10000+8];

int main()
{
    
    
    while(~scanf("%d", &n))
    {
    
    
        int id = 0;
        for(int i = 0; i<n; i++)
        {
    
    
            scanf("%d", &a[i]);
            if(i)buffer[id++] = abs(a[i]-a[i-1]);
        }
        sort(buffer, buffer+id);
        bool flag = 1;
        for(int i = 0; i<id; i++)
        {
    
    
            if(buffer[i] != i+1)
            {
    
    
                flag = 0;
                break;
            }
        }
        if(flag)printf("Jolly\n");
        else printf("Not jolly\n");
    }
    return 0;
}

Вопрос 4D — Двоичный поиск (2) Jisuanke-T1561

Оригинальное название

У мистера Чеснока в руке есть массив AA длины nn. Поскольку массив слишком велик, г-н Суан Тоу не знает, какие числа находятся в массиве, поэтому г-н Суан часто спрашивает, какое минимальное значение больше или равно xx в массиве AA?

Формат ввода

В первой строке вводятся два целых числа nn и mm, которые представляют длину массива и количество запросов соответственно.
Следующая строка содержит nn целых чисел aiai.
В следующих мм строках каждая строка содержит 11 целых чисел xx, обозначающих целое число, заданное г-ном Суан Тоу.

Выходной формат

Для каждого запроса, если его можно найти, выведите это целое число.
В противном случае выведите −1−1.

диапазон данных

1<n,m<105,0<x<1061<n,m<105,0<x<106。

Пример ввода

10 5
1 1 1 2 3 5 5 7 8 9
0
1
4
9
10

Пример вывода

1
1
5
9
-1

Отвечать


#include <bits/stdc++.h>
using namespace std;
 
const int MAXN = 1e5+6;
int a[MAXN] = {
    
    };
 
int lower_bound(int *A, int l, int r, int x) {
    
    
    while (l <= r) {
    
    
        int mid = l+((r-l)>>1);
        if (A[mid]>=x) {
    
    
            r=mid-1;
        } else {
    
    
            l=mid+1;
        }
    }
    return l;
}
 
int main() {
    
    
    //读入数据
    int n,m;
    scanf("%d%d", &n, &m);
    int i;
    for (i=0; i<n; i++) {
    
    
        scanf("%d", &a[i]);
    }
 
    //排序
    sort(a, a+n);
 
    //查询数据
    for (i=0; i<m; i++) {
    
    
        int x;
        scanf("%d", &x);
 
        if (x<a[0]) {
    
    
            printf("%d\n", a[0]);
        } else if (x>a[n-1]) {
    
    
            printf("-1\n");
        } else {
    
    
            int pos = lower_bound(a, 0, n-1, x);
            printf("%d\n", a[pos]);
        }
    }
 
    return 0;
}

Guess you like

Origin blog.csdn.net/yang369741/article/details/112996912