Вопрос 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;
}