概述
A题比较简单,B题不知道为什么死循环,查了好多遍查不出来,十二点多的时候实在太困了就睡了。今天补题。
A
#include <iostream>
using namespace std;
int n,
// chest num
m,
// key num
chesteven,
// chest中偶数的个数
chestodd,
// chest中奇数的个数
keyeven,
// key中偶数的个数
keyodd,
// key中奇数的个数
sum;
// 能打开的箱子的总数
int chest[100001] = {0},
key[100001] = {0};
int main()
{
cin >> n >> m; //读入箱子个数和钥匙个数
for(int i = 0; i < n; i++)
{
cin >> chest[i];
if(chest[i] % 2 == 0)
chesteven++;
else
chestodd++;
}
for(int i = 0; i < m; i++)
{
cin >> key[i];
if(key[i] % 2 == 0)
keyeven++;
else
keyodd++;
}
if(chestodd <= keyeven) //chest的奇数个数小于等于key的偶数个数(只有奇偶相加才是奇数)
sum += chestodd;
else
sum += keyeven;
if(keyodd <= chesteven)
sum += keyodd;
else
sum += chesteven;
cout << sum << endl;
return 0;
}
B
#include <iostream>
#include <cmath>
#include <algorithm>
#include <cstdio>
using namespace std;
int cat,
//读入的数字
sumopem,
//操作步数
oddcount;
//统计oddset放入了多少数字
bool check = 0;
int oddset[41];
//存放odd操作时n的取值
void dfs(int cat, int step)
{
if(step > 40)
return;
double m = log(cat + 1) / log(2);
if(abs(round(m) - m) < 0.000000000000001)
{
check = 1;
cout << step << endl;
for(int i = 0;i < oddcount;i++)
{
if(i == oddcount - 1)
{
cout << oddset[i];
return;
}
cout << oddset[i] << " ";
}
return;
}
if(step % 2 == 0) //该进行奇数次操作了
{
for(int k = 0; k <= 30; k++)
{
int temp1 = pow(2, k);
temp1 -= 1;
cat ^= temp1;
oddset[oddcount++] = k;
dfs(cat, step + 1);
oddset[--oddcount] = 0;
}
}
else
//进行偶数次操作
{
cat += 1;
dfs(cat, step + 1);
}
}
int main()
{
cin >> cat;
dfs(cat, 0);
return 0;
}
最后
以上就是超级面包为你收集整理的2019.4.24 Codeforces Round #554 (Div. 2)的全部内容,希望文章能够帮你解决2019.4.24 Codeforces Round #554 (Div. 2)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复