A - Shell Game【暴力】
題意:
1.有三個坑,小球在其中一個坑。
2.執行
3.奇數次
4.數據範圍:
思路:
1.週期爲
2.暴力枚舉坑的位置
代碼:
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef pair<int,int> pii;
int n, x;
bool judge(int i) {
int a[3];
n %= 30;
memset(a, 0, sizeof(a));
a[i] = 1;
for(int i = 1; i <= n; i++) {
if(i % 2 == 0) swap(a[1], a[2]);
else swap(a[0], a[1]);
}
if(a[x] == 1) return true;
return false;
}
int main() {
scanf("%d%d", &n, &x);
for(int i = 0; i < 3; i++) {
if(judge(i)) {
cout << i << endl;
return 0;
}
}
return 0;
}
B.Game of Credit Cards【貪心】
題意:
1.這題的作者估計也是希望夏洛克和莫里亞蒂搞基的。
2.給你兩串長度爲
3.比對每一位,數字小的要被彈腦殼。
4.調整數字順序。求莫里亞蒂最少被彈次數,和夏洛克最多被彈次數。
(PS.因爲小莫比較受,所以應該少被彈)
思路:
1.問題一的貪心策略:從小到大sort兩人的數字。每一次攻夏拿出一個當前最小數字,小莫應該拿出儘可能小的不被彈的數字。
2.問題二的貪心策略:從大到小sort兩人的數字。每一次小莫拿出一個當前最大數字,攻夏應該拿出儘可能大的被彈的數字。
代碼:
#include <bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef pair<int,int> pii;
int a[1010], b[1010];
bool cmp(const int &a, const int &b) {
return a > b;
}
int main() {
int n;
cin >> n;
string s1, s2;
cin >> s1 >> s2;
for(int i = 0; i < n; ++ i) a[i] = s1[i] - '0';
for(int i = 0; i < n; ++ i) b[i] = s2[i] - '0';
sort(a, a + n);
sort(b, b + n);
int idx1 = 0, idx2 = 0;
while(idx1 < n && idx2 < n) {
if(a[idx1] > b[idx2]) idx2++;
else idx1++, idx2++;
}
cout << n - idx1 << endl;
idx1 = 0, idx2 = 0;
sort(b, b + n, cmp);
sort(a, a + n, cmp);
int maxx = b[0];
while(idx1 < n && a[idx1] >= maxx) idx1++;
while(idx1 < n && idx2 < n) {
if(b[idx2] > a[idx1]) idx1++, idx2++;
else idx1++;
}
cout << idx2 << endl;
}