2019-07-18

09:15:34

这个是练习刷的题

Vus the Cossack and Numbers

Vus the Cossack has nn real numbers aiai. It is known that the sum of all numbers is equal to 00. He wants to choose a sequence bb the size of which is nn such that the sum of all numbers is 00 and each bibi is either ⌊ai⌋⌊ai⌋ or ⌈ai⌉⌈ai⌉. In other words, bibi equals aiairounded up or down. It is not necessary to round to the nearest integer.

For example, if a=[4.58413,1.22491,−2.10517,−3.70387]a=[4.58413,1.22491,−2.10517,−3.70387], then bb can be equal, for example, to [4,2,−2,−4][4,2,−2,−4].

Note that if aiai is an integer, then there is no difference between ⌊ai⌋⌊ai⌋ and ⌈ai⌉⌈ai⌉, bibiwill always be equal to aiai.

Help Vus the Cossack find such sequence!

The first line contains one integer nn (1≤n≤1051≤n≤105) — the number of numbers.

Each of the next nn lines contains one real number aiai (|ai|<105|ai|<105). It is guaranteed that each aiai has exactly 55 digits after the decimal point. It is guaranteed that the sum of all the numbers is equal to 00.

In each of the next nn lines, print one integer bibi. For each ii, |ai−bi|<1|ai−bi|<1 must be met.

If there are multiple answers, print any.

Input
4
4.58413
1.22491
-2.10517
-3.70387
Output
4
2
-2
-4
Input
5
-6.32509
3.30066
-0.93878
2.00000
1.96321
Output
-6
3
-1
2
2

The first example is explained in the legend.

In the second example, we can round the first and fifth numbers up, and the second and third numbers down. We can round the fourth number neither up, nor down.

题解:

这道题把所有的值向下取整,求两数的差的总和,如果sum > 0 ,就说明向下取整导致值变小,所以要加,sum < 0,类似

错误点:

我没有注意两数之差要小于1

#include <bits/stdc++.h>
using namespace std; typedef long long ll; double a[] = {};
ll b[] = {};
double sum = ; int main()
{
ll n;
scanf("%lld",&n); for(ll i = ; i < n; i++)
{
scanf("%lf", &a[i]);
b[i] = floor( a[i] );
sum += (a[i] - b[i]);
}
sum = round(sum);
if(sum > ) //b[i]相较于a[i]减去的太多了,所以b[i]++
{
for(ll i = ; i < n; i++)
{
if(sum == )
{
break;
}
b[i]++;
sum--;
if(abs(a[i] - b[i]) >= )
{
b[i]--;
sum++;
} }
}
else
{
for(ll i = ; i < n; i++)
{
if(sum == )
{
break;
}
b[i]--;
sum++;
if(abs(a[i] - b[i]) >= )
{
b[i]++;
sum--;
} }
}
for(ll i = ; i < n; i++)
{
cout << b[i] << endl;
} return ;
}

题2:

Your favorite shop sells nn Kinder Surprise chocolate eggs. You know that exactly ssstickers and exactly tt toys are placed in nn eggs in total.

Each Kinder Surprise can be one of three types:

  • it can contain a single sticker and no toy;
  • it can contain a single toy and no sticker;
  • it can contain both a single sticker and a single toy.

But you don't know which type a particular Kinder Surprise has. All eggs look identical and indistinguishable from each other.

What is the minimum number of Kinder Surprise Eggs you have to buy to be sure that, whichever types they are, you'll obtain at least one sticker and at least one toy?

Note that you do not open the eggs in the purchasing process, that is, you just buy some number of eggs. It's guaranteed that the answer always exists.

The first line contains the single integer TT (1≤T≤1001≤T≤100) — the number of queries.

Next TT lines contain three integers nn, ss and tt each (1≤n≤1091≤n≤109, 1≤s,t≤n1≤s,t≤n, s+t≥ns+t≥n) — the number of eggs, stickers and toys.

All queries are independent.

Print TT integers (one number per query) — the minimum number of Kinder Surprise Eggs you have to buy to be sure that, whichever types they are, you'll obtain at least one sticker and one toy

Input
3
10 5 7
10 10 10
2 1 1
Output
6
1
2

In the first query, we have to take at least 66 eggs because there are 55 eggs with only toy inside and, in the worst case, we'll buy all of them.

In the second query, all eggs have both a sticker and a toy inside, that's why it's enough to buy only one egg.

In the third query, we have to buy both eggs: one with a sticker and one with a toy.

题解:

  

#include <bits/stdc++.h>
using namespace std; typedef long long ll;
int main()
{
ll T;
scanf("%lld", &T);
while(T--)
{
ll n, s, t;
scanf("%lld %lld %lld", &n, &s, &t);
ll x = s + t - n;
cout << max(s, t) - x + << endl;
} return ;
}

题3:

After playing Neo in the legendary "Matrix" trilogy, Keanu Reeves started doubting himself: maybe we really live in virtual reality? To find if this is true, he needs to solve the following problem.

Let's call a string consisting of only zeroes and ones good if it contains differentnumbers of zeroes and ones. For example, 1, 101, 0000 are good, while 01, 1001, and 111000 are not good.

We are given a string ss of length nn consisting of only zeroes and ones. We need to cut ss into minimal possible number of substrings s1,s2,…,sks1,s2,…,sk such that all of them are good. More formally, we have to find minimal by number of strings sequence of good strings s1,s2,…,sks1,s2,…,sk such that their concatenation (joining) equals ss, i.e. s1+s2+⋯+sk=ss1+s2+⋯+sk=s.

For example, cuttings 110010 into 110 and 010 or into 11 and 0010 are valid, as 110, 010, 11, 0010 are all good, and we can't cut 110010 to the smaller number of substrings as 110010 isn't good itself. At the same time, cutting of 110010 into 1100 and 10 isn't valid as both strings aren't good. Also, cutting of 110010 into 1, 1, 0010 isn't valid, as it isn't minimal, even though all 33 strings are good.

Can you help Keanu? We can show that the solution always exists. If there are multiple optimal answers, print any.

The first line of the input contains a single integer nn (1≤n≤1001≤n≤100) — the length of the string ss.

The second line contains the string ss of length nn consisting only from zeros and ones.

Output

In the first line, output a single integer kk (1≤k1≤k) — a minimal number of strings you have cut ss into.

In the second line, output kk strings s1,s2,…,sks1,s2,…,sk separated with spaces. The length of each string has to be positive. Their concatenation has to be equal to ss and all of them have to be good.

If there are multiple answers, print any.

Examples

Input
1
1
Output
1
1
Input
2
10
Output
2
1 0
Input
6
100011
Output
2
100 011

Note

In the first example, the string 1 wasn't cut at all. As it is good, the condition is satisfied.

In the second example, 1 and 0 both are good. As 10 isn't good, the answer is indeed minimal.

In the third example, 100 and 011 both are good. As 100011 isn't good, the answer is indeed minimal.

题解:

第一:

如果个数是偶数,除2,还要在判断一下奇偶

#include <bits/stdc++.h>
using namespace std; typedef long long ll;
int main()
{
ll n;
scanf("%lld", &n);
getchar();
string s;
cin >> s;
ll zer = ;
ll one = ;
for(ll i = ; i < s.length(); i++)
{
if(s[i] == '')
{
zer++;
}
else
{
one++;
} }
if(zer != one)
{
cout << << endl;
cout << s;
}
else
{
if( (n/) & )
{
cout << << endl;
ll lenth = s.length();
for(ll i = ; i < lenth / ; i++)
{
cout << s[i];
}
cout << " ";
for(ll i = lenth/; i < n; i++)
{
cout << s[i];
}
}
else
{
cout << << endl;
ll lenth = s.length();
for(ll i = ; i <= lenth / ; i++)
{
cout << s[i];
}
cout << " ";
for(ll i = lenth/ + ; i < n; i++)
{
cout << s[i];
}
} } return ;
}

#include <bits/stdc++.h>usingnamespacestd; typedeflonglong ll; double a[100005] = {0}; ll b[100005] = {0}; double sum = 0; int main() { ll n; scanf("%lld",&n); for(ll i = 0; i < n; i++) { scanf("%lf", &a[i]); b[i] = floor( a[i] ); sum += (a[i] - b[i]); } sum = round(sum); if(sum > 0) //b[i]相较于a[i]减去的太多了,所以b[i]++ { for(ll i = 0; i < n; i++) { if(sum == 0) { break; } b[i]++; sum--; if(abs(a[i] - b[i]) >= 1) { b[i]--; sum++; } } } else { for(ll i = 0; i < n; i++) { if(sum == 0) { break; } b[i]--; sum++; if(abs(a[i] - b[i]) >= 1) { b[i]++; sum--; } } } for(ll i = 0; i < n; i++) { cout << b[i] << endl; } return0; }

最新文章

  1. 工作任务:模拟淘宝登录和购物车功能:使用cookie记录登录名,下次登录时能够记得上次的登录名,使用cookie模拟购物车功能,使用session记住登录信息并验证是否登录,防止利用url打开网站,并实现退出登录功能
  2. Struts2的模板和主题theme及自定义theme的使用
  3. Reactjs 入门基础(三)
  4. EXTJS 4 动态grid
  5. Codeforces Round #116 (Div. 2, ACM-ICPC Rules)
  6. Socket的连接问题
  7. c++ template笔记
  8. webrtc学习——mediaStream和MediaStreamTrack
  9. 操作Sql数据库帮助类
  10. WPF遮蔽层的实现
  11. NOIP2001-普及组复赛-第二题-最大公约数和最小公倍数问题
  12. Download the Hibernate Tools
  13. Python内置函数(65)——staticmethod
  14. CoreAnimation中layer动画闪烁的原因及解决
  15. 【T09】要认识到TCP是一个可靠的,但不是绝对可靠的协议
  16. Ubuntu16.04中pip无法更新升级,采用源码方式安装
  17. 【转】取模(mod)与取余(rem)的区别——Matlab学习笔记
  18. Spark记录-阿里巴巴开源工具DataX数据同步工具使用
  19. hdu CA Loves GCD(dp)
  20. hdu4467 Graph

热门文章

  1. zzulioj - 2628: 小新的字母广场
  2. 2019.12.10 switch(){ case: }
  3. rust学习
  4. 2016级移动应用开发在线测试12-service
  5. tf.matmul()报错expected scalar type Float but found Double
  6. clion ctrl+鼠标左键不能调到函数实现
  7. OpenFOAM计算结果转换到CFD-Post当中处理
  8. centos7安装mysql8 ERROR! The server quit without updating PID file
  9. intellij ide 激活(转发)
  10. solr 使用