TCO 2016 Round 1B
problem 250
Problem Statement
Vasa likes to construct sequences of numbers. If you tell him a positive integer n, he will begin a new sequence by writing the integer n as its first element. He will then repeat the following steps:
- If the last number in his sequence is a prime, he terminates the sequence.
- If he already wrote n elements without finding a prime, he becomes bored and leaves.
- Otherwise, he computes the next element of the sequence as the sum of squares of digits of the last element. For example, 4001 will be followed by 4^2 + 0^2 + 0^2 + 1^2 = 17, and 17 will be followed by 1^2 + 7^2 = 50.
Find out what happens for the given int n. If Vasa eventually becomes bored and leaves, return -1. Otherwise, return the length of the generated sequence.
Definition
- ClassExploringNumbers
- MethodnumberOfSteps
- Parametersint
- Returnsint
- Method signatureint numberOfSteps(int n)
Limits
- Time limit (s)2.000
- Memory limit (MB)256
Notes
- A prime number is a positive integer with exactly two positive integer divisors: 1 and itself. The first few primes are 2, 3, 5, 7, 11. Note that 1 is not a prime.
Constraints
- n will be between 1 and 10^9, inclusive.
Test cases
- n5
Returns1
The input itself is a prime.- n57
Returns4
Vasa will write down 57, 74 (= 5^2 + 7^2), 65 (= 7^2 + 4^2), and 61 (= 6^2 + 5^2). Number 61 is a prime.- n1
Returns-1
Vasa begins by writing down the number 1. As 1 is not a prime, he is not done yet. As he already wrote down 1 element of the sequence without finding a prime, he becomes bored and leaves.- n6498501
Returns2
- n989113
Returns6
- n12366
Returns-1
For n=12366 there are no primes among the first 12366 elements of Vasa's sequence.
暴力循环一下就行了。再记录一下当前这个数在之前计算过没有,如果计算过了那么久返回-1
#include <cstdio>
#include <cmath>
#include <cstring>
#include <ctime>
#include <iostream>
#include <algorithm>
#include <set>
#include <vector>
#include <sstream>
#include <typeinfo>
#include <fstream>
#include <map>
using namespace std; class ExploringNumbers {
public:
int check(int x){
if(x==)return ;
for(int i=;i*i<=x;i++){
if(x%i==)return ;
}
return ;
}
int numberOfSteps(int n) {
map<int,int>mp;
int ans=;
int m=n;
if(n==)return -;
if(check(n))return ;
int sum;
int mark=;
while(check(n)==){
ans++;
sum=;
mp[n]=;
while(n>){
int a=n%;
n/=;
sum+=a*a;
}
n=sum;
if(mp[n]||ans>m){
mark=;break;
}
}
if(mark)return -;
return ans;
}
};
problem 500
Problem Statement
Vasa is a shopkeeper in the small town Deronje. Currently, there are some items for sale in his store. The price of each item is a positive integer. You are given these prices in the int[] A. Each item has a price tag.
Vasa has just learned that a very rich shopper is going to visit his store. Therefore, Vasa wants to alter some of the price tags to make the items in his store more expensive.
Vasa has a collection of stickers. Each of those stickers contains a single digit between 1 and 9, inclusive. Note that he has no stickers with zeros. You are given the description of Vasa's stickers in the int[] D. For each i between 1 and 9, inclusive, Vasa has D[i-1] stickers with the digit i.
Vasa can take any sticker and use it to replace any digit on any price tag. However, there is no extra room on the price tags, so he cannot add new digits, he can only replace existing ones.
Compute and return the maximum total cost of items in Vasa's store after he applies some (possibly none, possibly all) of his stickers to the current price tags.
Definition
- ClassReplacingDigit
- MethodgetMaximumStockWorth
- Parametersvector<int> , vector<int>
- Returnsint
- Method signatureint getMaximumStockWorth(vector<int> A, vector<int> D)
Limits
- Time limit (s)2.000
- Memory limit (MB)256
Constraints
- A will contain between 1 and 50 elements, inclusive.
- Each element of A will be between 1 and 10^6, inclusive.
- D will contain exactly 9 elements.
- Each element of D will be between 0 and 10^3, inclusive.
Test cases
- A{ 100, 90 }
- D{ 0, 0, 0, 0, 2, 1, 0, 0, 0 }
Returns745
Vasa has two digit stickers with digit 5 written on them, and one digit sticker with digit 6 written on it. There are two items in the shop: one with price 100, and the other one with price 90.
Vasa can use one digit sticker with 5 to replace digit 0 of price tag 90 obtaining a new price of 95 of that item. Then, he can use the remaining stickers 5 and 6 to change the price tag of the other item from 100 to 650. In that case, the worth of his stock would be 650 + 95 = 745.
Note that the same stock worth could be obtained by applying all the three digit stickers to 100 in order to obtain a new price of 655. In that case, the price 90 of the other item would remain unchanged.
- A{ 9 }
- D{ 1, 1, 1, 1, 1, 1, 1, 1, 0 }
Returns9
In this example, the maximum stock worth is obtained by leaving the price tag unchanged. Note that Vasa is not required to use all stickers.
- A{ 123456 }
- D{ 9, 8, 7, 6, 5, 4, 3, 2, 1 }
Returns988777
- A{ 10, 970019, 1976, 10936, 68750, 756309, 37600, 559601, 6750, 76091, 640, 312, 312, 90, 8870 }
- D{ 11, 2, 8, 10, 7, 6, 3, 1, 3 }
Returns3297500
- A{ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 }
- D{ 111, 111, 111, 111, 111, 111, 111, 111, 111 }
Returns198
题意就是现在你有1~9这9个数,每个数有D[i]个,然后让你用这9个数 代替 A集合中的数字的某些位,使得最后A集合中的数的和最大。贪心思想。以9,8,7....1的顺序 从最高位开始改。
#include <cstdio>
#include <cmath>
#include <cstring>
#include <ctime>
#include <iostream>
#include <algorithm>
#include <set>
#include <vector>
#include <sstream>
#include <typeinfo>
#include <fstream>
#define INF 2000000000
#define ll long long
using namespace std; class ReplacingDigit {
public:
int getMaximumStockWorth(vector<int> A, vector<int> D) {
sort(A.begin(),A.end());
vector<int>v[];
int n=A.size();
for(int i=;i<n;i++){
while(A[i]>){
int a=A[i]%;
v[i].push_back(a);
A[i]/=;
}
}
for(int i=D.size()-;i>=;i--){
while(D[i]>){
int mark=;
for(int t=;t>=;t--){
int ans=INF;
int id;
for(int j=;j<n;j++){
if(v[j].size()>=t){
if(v[j][t-]<ans){
ans=v[j][t-];
id=j;
}
}
}
if(ans<i+){
v[id][t-]=i+;
D[i]--;
mark=;
break;
}
}
if(mark==)break;
}
}
ll sum=;
for(int i=;i<n;i++){
int t=;
for(int j=;j<v[i].size();j++){
sum+=t*v[i][j];
t*=;
}
}
return sum;
}
};
理论上来说做了2题.坑爹的网络,第二题没有提交上..
TCO 2016 Round 1B的更多相关文章
- Google Code Jam 2016 Round 1B B
题意:给出两个数字位数相同,分别中间有若干位不知道,用问号表示.现在要求补全这两个数字,使得差值的绝对值最小,多解则取第一个数字的值最小的,再多解就取第二个数字最小的. 分析: 类似数位dp,但是很多 ...
- TCO 2015 Round 1B DIV1 500 概率题
[题意]现在有一些线索,每个线索被发现的概率p[i],如果线索i被知道,那么其他线索也可能会被知道,用vector<string> c给出,c[i][j]='Y'表示知道i这个线索,j这个 ...
- Google Code Jam 2016 Round 1B Problem C. Technobabble
题目链接:https://code.google.com/codejam/contest/11254486/dashboard#s=p2 大意是教授的学生每个人在纸条上写一个自己的topic,每个to ...
- 2019 TCO Round 1B——[ 状压DP ]
第一题是 EllysSki . 题意:给n个数,求两个方向的最长递减区间. 可以O(n). #include<cstdio> #include<cstring> #includ ...
- TCO 2014 Round 1C 概率DP
TCO round 1C的 250 和500 的题目都太脑残了,不说了. TCO round 1C 950 一个棋子,每次等概率的向左向右移动,然后走n步之后,期望cover的区域大小?求cover, ...
- Codeforces Round #351 (VK Cup 2016 Round 3, Div. 2 Edition) B. Problems for Round 水题
B. Problems for Round 题目连接: http://www.codeforces.com/contest/673/problem/B Description There are n ...
- Codeforces Round #351 (VK Cup 2016 Round 3, Div. 2 Edition) B
B. Problems for Round time limit per test 2 seconds memory limit per test 256 megabytes input standa ...
- VK Cup 2016 - Round 1 (Div. 2 Edition) C. Bear and Forgotten Tree 3
C. Bear and Forgotten Tree 3 time limit per test 2 seconds memory limit per test 256 megabytes input ...
- Codeforces Round #351 (VK Cup 2016 Round 3, Div. 2 Edition)只有A题和B题
连接在这里,->点击<- A. Bear and Game time limit per test 2 seconds memory limit per test 256 megabyte ...
随机推荐
- HDU [P3949] XOR
线性基求第 k 小异或值 http://www.cnblogs.com/Mr-WolframsMgcBox/p/8567844.html 这道题消元下来是一个上三角矩阵,代码简单,但是不使用与本题的情 ...
- MongoDB_spring整合mongodb
参考 spring data mongodb 设置副本集读写分离模式 https://blog.csdn.net/u010889990/article/details/42644963
- poj 3083 dfs,bfs
传送门 Children of the Candy Corn Time Limit:1000MS Memory Limit:65536KB 64bit IO Format:%I6 ...
- Python入门--3--操作符
一.算数操作符 有:+.-.*././/.%.**(幂) a= 3; a = 3+1; #等同于a += 1 这相当与a加一 同样 也可以-.*./.// 需要注意的是//是直接舍 ...
- AC日记——最大子段和 洛谷 P1115
题目描述 给出一段序列,选出其中连续且非空的一段使得这段和最大. 输入输出格式 输入格式: 输入文件maxsum1.in的第一行是一个正整数N,表示了序列的长度. 第2行包含N个绝对值不大于10000 ...
- KS103超声波测距模块
max232:电平转换芯片,将电脑的RS-232标准串口(高+12V,低-12V)转换为(高+5V,低0V). 电脑串口(RS -232) => 单片机串口(TTL串口) SIPEX SP323 ...
- Google代码风格配置文件(Java)(IDEA/Eclipse)
官网:http://www.cnblogs.com/EasonJim/p/7837474.html 下载: 安装: IDEA/Eclipse导入相应文件即可. 说明: Google代码风格文件的缩进是 ...
- lib无法访问另外lib中的头文件
工程中app已经有设置User Header Search Paths来包含了需要的头文件,但是个别的lib依然找不到头文件.解决方法: 选择这个lib,在Build Settings中查找选项Use ...
- (type interface {}) to type string
go 语言开发中,经常会在函数中碰到使用 insterface{} 作为接收任意参数,但是我们接收的数据经常是需要做类型转换,由于是初学者,因此,初次转换我是直接就 func New(paramete ...
- Matlab多项式拟合測试
x=0:0.2:4; %生成等差数列 rnd=rand(1,size(x,2))*5; %生成一组随机数 y=x.*x.*x+x.*x+6+rnd; %生成y=x^3+x^2+6函数在垂直方向5个尺度 ...