[模拟] aw3626. 三元一次方程(模拟+暴力+aw周赛002_1)
Posted Ypuyu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[模拟] aw3626. 三元一次方程(模拟+暴力+aw周赛002_1)相关的知识,希望对你有一定的参考价值。
1. 题目来源
链接:3626. 三元一次方程
2. 题目解析
签到题。
直接暴力即可,枚举 x
、y
,判断 n-3x-5y
是否大于 0 且能被 7 整除即可。
其中 x
从小到大枚举,且 y
也是从小到大枚举,所以保证了答案的字典序输出。
时间复杂度: O ( n 2 ) O(n^2) O(n2)
空间复杂度: O ( 1 ) O(1) O(1)
正常写法:
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int n;
bool work() {
for (int x = 0; x * 3 <= n; x ++ )
for (int y = 0; y * 5 + x * 3 <= n; y ++ )
if ((n - x * 3 - y * 5) % 7 == 0) {
cout << x << ' ' << y << ' ' << (n - x * 3 - y * 5) / 7 << endl;
return true;
}
return false;
}
int main() {
int T;
cin >> T;
while (T -- ) {
cin >> n;
if (!work()) puts("-1");
}
return 0;
}
丑陋无脑写法:
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int main() {
int T;
cin >> T;
while (T -- ) {
int n;
cin >> n;
int flag = false;
for (int x = 0; x <= n; x ++ ) {
for (int y = 0; y <= n; y ++ ) {
for (int z = 0; z <= n; z ++ )
if (3 * x + 5 * y + 7 * z == n) {
cout << x << ' ' << y << ' ' << z << endl;
flag = true;
break;
}
if (flag) break;
}
if (flag) break;
}
if (!flag) cout << -1 << endl;
}
return 0;
}
以上是关于[模拟] aw3626. 三元一次方程(模拟+暴力+aw周赛002_1)的主要内容,如果未能解决你的问题,请参考以下文章