A.^&^
http://acm.hdu.edu.cn/showproblem.php?pid=6702
题目大意:求C使得(AxorC)&(BxorC)最小。
即求C = A & B,特别注意如果C=0输出1.
AC代码:
#include <iostream>
#include <queue>
#include <algorithm>
#include <cstdio>
#include <cmath>
#include <cstring>
using namespace std;
typedef long long ll;
const int enf = 0x3f3f3f;
int T;
int main() {
cin >> T;
while(T--) {
ll a, b;
cin >> a >> b;
if((a & b ) == 0) cout << 1 << endl;
else cout << (a & b ) << endl;
}
return 0;
}
F.Shuffle Card
http://acm.hdu.edu.cn/showproblem.php?pid=6707
题目大意:n个数字,m个操作。
每次取出数值等于u的数字到队首,最后输出。
PE提示:注意最后无换行
解题思路:利用栈进行模拟。
AC代码:
#include <iostream>
#include <queue>
#include <algorithm>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <stack>
using namespace std;
typedef long long ll;
int s[100005];
bool used[100005];
stack<int> ss;
int n, t;
int u;
int main() {
while(cin >> n >> t) {
for (int i = 1; i <= n; i++) {
cin >> s[i];
}
for (int i = n; i >= 1; i--) {
ss.push(s[i]);
}
for (int i = 0; i < t; i++) {
cin >> u;
ss.push(u);
}
memset(used, 0, sizeof used);
while (!ss.empty()) {
int temp = ss.top();
ss.pop();
if (!used[temp]) {
cout << temp << " ";
used[temp] = 1;
}
}
}
return 0;
}
F.Windows Of CCPC
http://acm.hdu.edu.cn/showproblem.php?pid=6708
不贴题目了,打印题。
分成四个部分打表即可。也可以递归(每一个图都是由上一个图组成的)
AC代码:
#include <iostream>
#include <queue>
#include <algorithm>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <stack>
using namespace std;
typedef long long ll;
int s[100005];
bool used[100005];
char pic[2000][2000];
stack<int> ss;
int t, n;
int num[20];
void draw() {
num[0] = 1;
for(int i = 1;i <= 10; i++) {
num[i] = num[i - 1] * 2;
}
pic[1][1] = 'C';
pic[1][2] = 'C';
pic[2][1] = 'P';
pic[2][2] = 'C';
for(int k = 2; k <= 10; k++) {
for (int i = 1; i <= num[k]; i++) {
for (int j = 1; j <= num[k]; j++) {
if (i <= num[k - 1] && j <= num[k - 1]) continue;
else if (i <= num[k - 1] && j > num[k - 1]) {
pic[i][j] = pic[i][j - num[k - 1]];
} else if (i > num[k - 1] && j > num[k - 1]) {
pic[i][j] = pic[i - num[k - 1]][j - num[k - 1]];
} else if (i > num[k - 1] && j <= num[k - 1]) {
if (pic[i - num[k - 1]][j] == 'C') pic[i][j] = 'P';
else pic[i][j] = 'C';
}
}
}
}
}
int main() {
while(cin >> t) {
while(t--) {
cin >> n;
draw();
for(int i = 1; i <= num[n];i++) {
for(int j = 1; j <= num[n]; j++) {
cout <<pic[i][j];
}cout << endl;
}
}
}
return 0;
}
G.Fishing Master
参考代码:
#include <iostream>
#include <queue>
#include <algorithm>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <stack>
using namespace std;
typedef long long ll;
const int N = 1e5 + 5;
int T;
int n, k;
struct fish{
int id;
int cook;
}f[N];
bool cmp(fish a, fish b) {
return a.cook > b.cook;
}
int a[N];
int main() {
cin >> T;
while(T--) {
int ans = 0, cnt = 1, sum = 0;
cin >> n >> k;
ans += k;
for(int i = 0; i < n; i++) {
cin >> a[i];
cnt += a[i] / k;
f[i].id = i;
f[i].cook = a[i] % k;
ans += a[i];
}
if(cnt < n) {
sort(f,f+n,cmp);
for(int i = 0; i <= n - cnt - 1; i++) {
ans += k - f[i].cook;
}
}
cout << ans << endl;
}
return 0;
}