3.階調アルゴリズム(2)
31435 ワード
グレースケールアルゴリズム
質問する
2875大会または実習生
10610 30
1個の数Nが与えられた場合には、30の倍数の問題が数字混合で生じる.
30を2×3 x 5=30に分解します.このとき2の倍数は2 4 6...3の倍数はすべての位置に加算された値が3の倍数で、5は末尾数が5と0ですが、2の倍数で末尾数は0に固定されています.
グレースケールアルゴリズム
1.最初に受け取った数字を降順に並べ替えます.
2.すべての位置に加算された値が3の倍数であるか
3.最後の数字が0であることを確認する#define _CRT_SECURE_NO_WARNINGS
#define _USE_MATH_DEFINES
#include <iostream>
#include <string>
#include <cstring>
#include <cstdio>
#include <functional>
#include <algorithm>
#include <cstdlib>
#include <vector>
#include <ctime>
#include <cmath>
#include <stack>
#include <queue>
#define ll long long
#define len 1001
using namespace std;
int ans, i,n;
int main(void) {
freopen("input.txt", "r", stdin);
ios_base::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
string s;
cin >> s;
int sum = 0;
for (int i = 0; i < s.length(); ++i) {
sum += s[i] - '0';
}
sort(s.begin(), s.end());
if (s[0] == '0' && sum % 3 == 0) {
reverse(s.begin(), s.end());
cout << s << '\n';
}
else {
cout << -1 << '\n';
}
}
1783病夜
まず条件が大きいのはなんと2億...
4つのケースがあり、移動回数が4回を超える場合は、いずれも1回使用します.このときアクセスできるセルの最大個数の問題.
グレースケールアルゴリズム
#define _CRT_SECURE_NO_WARNINGS
#define _USE_MATH_DEFINES
#include <iostream>
#include <string>
#include <cstring>
#include <cstdio>
#include <functional>
#include <algorithm>
#include <cstdlib>
#include <vector>
#include <ctime>
#include <cmath>
#include <stack>
#include <queue>
#define ll long long
#define len 1001
using namespace std;
int ans, i,n;
int main(void) {
freopen("input.txt", "r", stdin);
ios_base::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
string s;
cin >> s;
int sum = 0;
for (int i = 0; i < s.length(); ++i) {
sum += s[i] - '0';
}
sort(s.begin(), s.end());
if (s[0] == '0' && sum % 3 == 0) {
reverse(s.begin(), s.end());
cout << s << '\n';
}
else {
cout << -1 << '\n';
}
}
この場合、幅が7未満の場合にのみ、次の状況が使用されます.だから3以上から幅が7以上か以下かを計算します.
逆に7を超えると4の制限を守る必要がないのでwidx-2の地を踏むことができます.
#define _CRT_SECURE_NO_WARNINGS
#define _USE_MATH_DEFINES
#include <iostream>
#include <string>
#include <cstring>
#include <cstdio>
#include <functional>
#include <algorithm>
#include <cstdlib>
#include <vector>
#include <ctime>
#include <cmath>
#include <stack>
#include <queue>
#define ll long long
#define len 1001
using namespace std;
int ans, i,n;
int main(void) {
freopen("input.txt", "r", stdin);
ios_base::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
ll height, width;
cin >> height >> width;
ll ans = 0;
if (height == 1) {
ans = 1;
}
else if (height == 2) {
ans = min((ll)4, (width+1)/2);
}
else {
if (width >= 7) {
ans = width - 2;
}
else {
ans = min((ll)4,width);
}
}
cout << ans << '\n';
}
12970 AB
まず,BとAの位置によって,我々が要求するAB対の個数が異なることを決定できる.
Bが一列に並んでいる場合、Aがずっと中央に並んでいる場合、常に0からa xbまでの文字列を作成することができる.
#define _CRT_SECURE_NO_WARNINGS
#define _USE_MATH_DEFINES
#include <iostream>
#include <string>
#include <cstring>
#include <cstdio>
#include <functional>
#include <algorithm>
#include <cstdlib>
#include <vector>
#include <ctime>
#include <cmath>
#include <stack>
#include <queue>
#define ll long long
#define len 1001
using namespace std;
int ans, i,j,n;
int main(void) {
freopen("input.txt", "r", stdin);
ios_base::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
int n, k;
cin >> n >> k;
for (int a = 0; a < n; ++a) {
int b = n - a;
if (b * a < k) continue;
vector<int> cnt(b + 1,0);
for (i = 0; i < a; ++i) {
int x = min(b, k);
cnt[x] += 1;
k -= x;
}
for (i = b; i >= 0; --i) {
for (j = 0; j < cnt[i]; ++j) {
cout << 'A';
}
if (i > 0) {
cout << 'B';
}
}
return 0;
}
cout << -1;
return 0;
}
12904およびB
A演算:文字列の後にAを追加
B演算:文字列を反転し、後にBを追加する
この質問の答えは少し違いますが、Aは文字列の後ろにAを追加します.
Bは逆にBを後ろにつける.
では、S文字とT文字を比較してSをTと書くと、
TからSの方が早いでしょうか?
このように一つ一つ減らして最適解を満たすことができますか?
かもしれません.
#define _CRT_SECURE_NO_WARNINGS
#define _USE_MATH_DEFINES
#include <iostream>
#include <cstring>
#include <cstdio>
#include <functional>
#include <algorithm>
#include <cstdlib>
#include <vector>
#include <ctime>
#include <cmath>
#include <stack>
#include <string>
#include <queue>
#define ll long long
#define len 1001
using namespace std;
int ans, i,n;
int main(void) {
freopen("input.txt", "r", stdin);
ios_base::sync_with_stdio(false);
cin.tie(0);cout.tie(0);
string s, t;
cin >> s;
cin >> t;
while (s.length() != t.length()) {
if (t[t.length()-1] == 'A') {
t.pop_back();
}
else {
t.pop_back();
reverse(t.begin(), t.end());
}
}
if (s != t) {
cout << 0 << '\n';
}
else {
cout << 1 << '\n';
}
}
1201 NMK
2873ジェットコースター
12919 AとB 2
Reference
この問題について(3.階調アルゴリズム(2)), 我々は、より多くの情報をここで見つけました https://velog.io/@tonyhan18/4.-그리디-알고리즘2テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol