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回使用します.このときアクセスできるセルの最大個数の問題.
グレースケールアルゴリズム
  • 高さ1では移動できません.方法1
  • の高さが2の場合(+2,+1)と(+1,+2)しか使用できないことを考慮すると、min(4,(width+1)/2)格子を移動するには4の制限が必要である.
  • の高さが3の場合を考えてみましょう.

    この場合、幅が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