Я поставил проблему ниже. Мое решение превышает срок. Может ли кто-нибудь дать мне представление о том, как его улучшить?Три разных номера
Вам просто нужно подсчитать количество упорядоченных троек разных чисел (X1, X2, X3), где Xi может быть любым положительным целым от 1 до Ni включительно (i = 1, 2, 3). Число N1, N2, N3 может быть до 10^18. Из-за этого ответ может быть довольно большим. Следовательно, вы должны выводить его по модулю 10^9 + 7.
Входной
Первая строка входного файла содержит целое число T, обозначающее количество тестов. Далее следует описание Т-тестов. Единственная строка каждого тестового примера содержит три целых числа N1, N2, N3, разделенные пробелами.
Выход
Для каждого теста вывести одну строку, содержащую количество требуемых троек по модулю 10^9 + 7.
Ограничения
1 ≤ T ≤ 1000
1 ≤ Ni ≤ 10^18
Example
Input:
5
3 3 3
2 4 2
1 2 3
25 12 2012
1 1 2013
Output:
6
4
1
578880
0
Это мое решение:
#include <iostream>
using namespace std;
int main()
{
int t;
scanf("%d",&t);
for(int i=0; i<t; i++)
{
long long unsigned a,b,c,sum=0,s1,s2,s3;
scanf("%llu %llu %llu", &a,&b,&c);
for(s1=1; s1<=a; s1++)
{
for(s2=1; s2<=b; s2++)
{
if(s1==s2) continue;
for(s3=1; s3<=c; s3++)
{
if(s1==s3 || s2==s3) continue;
sum=(sum+1)%1000000007;
}
}
}
printf("%llu\n",sum);
}
return 0;
}
это пахнет домашним заданием вопроса. почему вы хотите улучшить это? – bizzehdee
Да, это домашнее задание. Это решение не может пройти через 2 секунды. – Mayhem
Разве вы не должны просить своего профессора или ТП о помощи, а не обманывать домашнюю работу? –