64,653
社区成员
发帖
与我相关
我的任务
分享
#include <cstdio>
#include <queue>
using namespace std;
#define maxn 10000
long long ret[maxn];
int main()
{
long long a = 0, n = 0;
int cnt = 0;
while (scanf("%lld%lld", &a, &n) == 2)
{
queue<long long> fir;
queue<long long> sec;
fir.push(a);
for (int i = 0; i < n; i++)
{
if (fir.empty() == true)
{
ret[cnt] = sec.front();
fir.push(2 * sec.front() + 1);
sec.push(3 * sec.front() + 1);
sec.pop();
}
else if (sec.empty() == true)
{
ret[cnt] = fir.front();
fir.push(2 * fir.front() + 1);
sec.push(3 * fir.front() + 1);
fir.pop();
}
else if (fir.front() > sec.front())
{
ret[cnt] = sec.front();
fir.push(2 * sec.front() + 1);
sec.push(3 * sec.front() + 1);
sec.pop();
}
else if (fir.front() < sec.front())
{
ret[cnt] = fir.front();
fir.push(2 * fir.front() + 1);
sec.push(3 * fir.front() + 1);
fir.pop();
}
else if (fir.front() == sec.front())
{
sec.pop();
ret[cnt] = fir.front();
fir.push(2 * fir.front() + 1);
sec.push(3 * fir.front() + 1);
fir.pop();
}
}
cnt++;
}
bool first = true;
for (int i = 0; i < cnt; i++)
{
if (first)
{
first = false;
}
else
{
printf("\n");
}
printf("%lld", ret[i]);
}
return 0;
}
#include <stdio.h>
#define NUM_MAX 1000000
// 算法
struct blash {
typedef int blash_value;
unsigned char base_; // 基数
blash_value* seq_; // 计算的缓存数据
blash_value* seq_next;
blash_value* two_pos; // 2*x+1
blash_value two_val;
blash_value* tree_pos; // 3*x+1
blash_value tree_val;
public:
blash(){
base_ = 0;
seq_ = 0;
}
bool make_n(unsigned char base, int n) {
base_ = base;
if (seq_ == 0)
{
seq_ = new blash_value[NUM_MAX];
}
seq_next = seq_;
blash_value first(base_);
*seq_next = first;
++seq_next;
two_pos = seq_;
two_val = first * 2 + 1;
tree_pos = seq_;
tree_val = first * 3 + 1;
for (int i = 1; i < n; ++i) {
make_next();
}
return true;
}
bool make_next() {
if (two_val == tree_val) {
*seq_next = two_val;
++seq_next;
++two_pos;
++tree_pos;
two_val = (*two_pos) * 2 + 1;
tree_val = (*tree_pos) * 3 + 1;
}
else if (two_val < tree_val) {
*seq_next = two_val;
++seq_next;
++two_pos;
two_val = (*two_pos) * 2 + 1;
}
else {
*seq_next = tree_val;
++seq_next;
++tree_pos;
tree_val = (*tree_pos) * 3 + 1;
}
return true;
}
void print_n() {
printf("%d\n", *(seq_next - 1));
}
};
int main() {
int a = 0, n = 0;
blash b1;
while (scanf("%d%d", &a, &n) == 2)
{
b1.make_n(a, n);
b1.print_n();
}
return 0;
}
#include <iostream>
#include <list>
// 算法
struct blash {
typedef long long blash_value;
unsigned char base_; // 基数
std::list<blash_value> seq_; // 计算的缓存数据
std::list<blash_value>::iterator two_pos; // 2*x+1
blash_value two_val;
std::list<blash_value>::iterator tree_pos; // 3*x+1
blash_value tree_val;
public:
blash(unsigned char base) : base_(base) {}
bool make_n(int n) {
seq_.clear();
blash_value first(base_);
seq_.push_back(first);
two_pos = seq_.begin();
two_val = first*2+1;
tree_pos = seq_.begin();
tree_val = first*3+1;
for (int i = 1; i < n; ++i) {
make_next();
}
return true;
}
bool make_next() {
if (two_val == tree_val) {
seq_.push_back(two_val);
++two_pos;
++tree_pos;
two_val = (*two_pos)*2+1;
tree_val = (*tree_pos)*3+1;
seq_.pop_front();
} else if (two_val < tree_val) {
seq_.push_back(two_val);
++two_pos;
two_val = (*two_pos)*2+1;
} else {
seq_.push_back(tree_val);
++tree_pos;
tree_val = (*tree_pos)*3+1;
seq_.pop_front();
}
return true;
}
void print_n() {
std::cout <<seq_.back() <<std::endl;
}
};
int main() {
// 1 100
blash b1(1);
b1.make_n(100);
b1.print_n();
// 28 5437
blash b2(28);
b2.make_n(5437);
b2.print_n();
// 50 1000000
blash b3(50);
b3.make_n(1000000);
b3.print_n();
return 0;
}
/*
运行输出:
418
900585
1358539642
*/
#include<iostream>
#include<queue>
using namespace std;
int main() {
long long a, n, tmp;
while (cin >> a >> n) {
priority_queue<long long,vector<long long>,greater<long long>> q;
q.push(a);
while (--n) {
tmp = q.top();
while (!q.empty()&&q.top() == tmp) q.pop(); //去重
q.push(tmp * 2 + 1);
q.push(tmp * 3 + 1);
}
cout << q.top() << endl;
}
return 0;
}