题目链接

A. Sereja and Mugs

time limit per test:1 second
memory limit per test:256 megabytes
input:standard input
output:standard output

Sereja showed an interesting game to his friends. The game goes like that. Initially, there is a table with an empty cup and n water mugs on it. Then all players take turns to move. During a move, a player takes a non-empty mug of water and pours all water from it into the cup. If the cup overfills, then we assume that this player lost.

As soon as Sereja's friends heard of the game, they wanted to play it. Sereja, on the other hand, wanted to find out whether his friends can play the game in such a way that there are no losers. You are given the volumes of all mugs and the cup. Also, you know that Sereja has (n - 1) friends. Determine if Sereja's friends can play the game so that nobody loses.

Input

The first line contains integers n and s (2 ≤ n ≤ 100; 1 ≤ s ≤ 1000) — the number of mugs and the volume of the cup. The next line contains n integers a1, a2, ..., an (1 ≤ ai ≤ 10). Number ai means the volume of the i-th mug.

Output

In a single line, print "YES" (without the quotes) if his friends can play in the described manner, and "NO" (without the quotes) otherwise.

Sample test(s)
input
3 4
1 1 1
output
YES
input
3 4
3 1 3
output
YES
input
3 4
4 4 4
output
NO

题意 : 大意大概是有很多n个小杯,1大杯,每个小杯的容积以及大杯的容积都知道了,游戏规则是,每个人拿一个非空的小杯,把水全部倒大杯里,如果谁倒的时候大杯满了,谁就输,然后她的(n-1)个朋友要玩儿,问你有没有一种倒水的方法使得没有人会输,如果没有输出NO。

思路 : 一开始以为她自己也玩儿,就不知道第二组样例为什么对了,后来又看了一遍题,觉得应该是光朋友玩儿,就试了一下儿,结果对了。。。。。

 #include <stdio.h>
#include <iostream>
#include <algorithm> using namespace std ; int a[] ; int main()
{
int n,s ;
while(~scanf("%d %d",&n,&s))
{
for(int i = ; i < n ; i++)
scanf("%d",&a[i]) ;
sort(a,a+n) ;
int sum = ;
bool flag = false ;
for(int i = ; i < n- ; i++)
{
sum += a[i] ;
if(sum > s)
{
flag = true ;
break ;
}
}
if(flag)
puts("NO") ;
else puts("YES") ;
}
return ;
}

B. Sereja and Mirroring

time limit per test:1 second
memory limit per test:256 megabytes
input:standard input
output:standard output

Let's assume that we are given a matrix b of size x × y, let's determine the operation of mirroring matrix b. The mirroring of matrix b is a2x × y matrix c which has the following properties:

  • the upper half of matrix c (rows with numbers from 1 to x) exactly matches b;
  • the lower half of matrix c (rows with numbers from x + 1 to 2x) is symmetric to the upper one; the symmetry line is the line that separates two halves (the line that goes in the middle, between rows x and x + 1).

Sereja has an n × m matrix a. He wants to find such matrix b, that it can be transformed into matrix a, if we'll perform on it several(possibly zero) mirrorings. What minimum number of rows can such matrix contain?

Input

The first line contains two integers, n and m (1 ≤ n, m ≤ 100). Each of the next n lines contains m integers — the elements of matrix a. The i-th line contains integers ai1, ai2, ..., aim (0 ≤ aij ≤ 1) — the i-th row of the matrix a.

Output

In the single line, print the answer to the problem — the minimum number of rows of matrix b.

Sample test(s)
input
4 3
0 0 1
1 1 0
1 1 0
0 0 1
output
2
input
3 3
0 0 0
0 0 0
0 0 0
output
3
input
8 1
0
1
1
0
0
1
1
0
output
2
Note

In the first test sample the answer is a 2 × 3 matrix b:

001
110

If we perform a mirroring operation with this matrix, we get the matrix a that is given in the input:

001
110
110
001

题意 :这个破题读了好久,我严重怀疑我近段时间的英语水平。就是说一个大小为x*y的矩阵b的mirroring定义为一个大小为2x*y的矩阵,前x行与b相同,后x行与前x行对称,然后给你一个n*m的矩阵,让你求一个矩阵b,使得b经过几次或0次mirroring后能够得到a,让你输出成立的b中,行最少的那一个。

思路 : 这个题的话要先判断一下,如果是mirroring的话,行一定是偶数,如果不是偶数,说明是通过0次mirroring操作的,所以最小就是它自己,然后就一直除以2进行枚举,判断一下是否是偶数,是否对称,如果对称就继续下去,看能不能更小,如果不对称就直接在这儿就行。。。。。
 #include <stdio.h>
#include <string.h>
#include <iostream>
#include <string> using namespace std ; int a[][] ;
char str[][] ; int main()
{
int n,m ;
while(~scanf("%d %d",&n,&m))
{
for(int i = ; i < n ; i++)
for(int j = ; j < m ; j++)
scanf("%d",&a[i][j]) ;
if(n % )
{
cout<<n<<endl ;
continue ;
}
int mid ;
while(true)
{
mid = n >> ;
bool flag = true;
for(int i = ; i < mid ; i++)
{
int j = n-i- ;
for(int k = ; k < m ; k++)
{
if(a[i][k] != a[j][k])
{
flag = false ;
break ;
}
}
if(!flag)
break ;
}
if(!flag)
{
printf("%d\n",mid*) ;
break ;
}
else
{
if(mid % )
{
cout<<mid<<endl ;
break ;
}
else
n = n >> ;
}
}
}
return ;
}

C. Sereja and Swaps

time limit per test:1 second
memory limit per test:256 megabytes
input:standard input
output:standard output

As usual, Sereja has array a, its elements are integers: a[1], a[2], ..., a[n]. Let's introduce notation:

A swap operation is the following sequence of actions:

  • choose two indexes i, j (i ≠ j);
  • perform assignments tmp = a[i], a[i] = a[j], a[j] = tmp.

What maximum value of function m(a) can Sereja get if he is allowed to perform at most k swap operations?

Input

The first line contains two integers n and k (1 ≤ n ≤ 200; 1 ≤ k ≤ 10). The next line contains n integers a[1], a[2], ..., a[n] ( - 1000 ≤ a[i] ≤ 1000).

Output

In a single line print the maximum value of m(a) that Sereja can get if he is allowed to perform at most k swap operations.

Sample test(s)
input
10 2
10 -1 2 2 2 2 2 2 -1 10
output
32
input
5 10
-1 -1 -1 -1 -1
output

-1

题意 : 给了两个公式能够求出m(a),然后允许最多交换k次,求其中的最大的m(a)。

思路 : 这个题看了二师兄的代码,瞬间对二师兄膜拜啊。大概应该是这样的,两个for循环先枚举(l,r)区间能够得到的最大值,并且把这些数存到容器里。然后肯定还有(1,l-1)和(r+1,n)这里边还有数,把这些数存到容器里,然后枚举交换次数,从第二个容器里找出最大值看是否比第一个容器的最小值大,那就交换。
 #include <stdio.h>
#include <string.h>
#include <iostream>
#include <algorithm>
#include <vector> using namespace std ; int a[] ; int main()
{
int n ,k;
while(~scanf("%d %d",&n,&k))
{
for(int i = ; i <= n ; i++)
scanf("%d",&a[i]) ;
int maxx = -,sum ;
for(int i = ; i <= n ; i++)
{
for(int j = i ; j <= n ; j++)
{
sum = ;
vector<int > v ,u;
for(int h = i ; h <= j ; h++)
{
v.push_back(a[h]) ;
sum += a[h] ;
}
maxx = max(maxx,sum) ;
for(int h = ; h <= n ; h++)
{
if(h < i || h > j)
u.push_back(a[h]) ;
}
sort(v.begin(),v.end()) ;
sort(u.begin(),u.end()) ;
reverse(u.begin(),u.end()) ;
for(int h = ; h <= k && h <= v.size() && h <= u.size() ; h++)//枚举交换次数
{
if(v[h-] < u[h-])
{
sum -= v[h-] ;
sum += u[h-] ;
maxx = max(sum,maxx) ;
}
}
}
}
printf("%d\n",maxx) ;
}
return ;
}

Codeforces Round #243 (Div. 2) A~C的更多相关文章

  1. Codeforces Round #243 (Div. 2) B(思维模拟题)

    http://codeforces.com/contest/426/problem/B B. Sereja and Mirroring time limit per test 1 second mem ...

  2. Codeforces Round #243 (Div. 1) A题

    http://codeforces.com/contest/425/problem/A 题目链接: 然后拿出这道题目是很多人不会分析题目,被题目吓坏了,其中包括我自己,想出复杂度,一下就出了啊!真是弱 ...

  3. Codeforces Round #243 (Div. 2) Problem B - Sereja and Mirroring 解读

    http://codeforces.com/contest/426/problem/B 对称标题的意思大概是.应当指出的,当线数为奇数时,答案是线路本身的数 #include<iostream& ...

  4. Codeforces Round #243 (Div. 2) C. Sereja and Swaps

    由于n比较小,直接暴力解决 #include <iostream> #include <vector> #include <algorithm> #include ...

  5. Codeforces Round #243 (Div. 2) B. Sereja and Mirroring

    #include <iostream> #include <vector> #include <algorithm> using namespace std; in ...

  6. Codeforces Round #243 (Div. 2) A. Sereja and Mugs

    #include <iostream> #include <vector> #include <algorithm> #include <numeric> ...

  7. Codeforces Round #243 (Div. 2) C. Sereja and Swaps(优先队列 暴力)

    题目 题意:求任意连续序列的最大值,这个连续序列可以和其他的 值交换k次,求最大值 思路:暴力枚举所有的连续序列.没做对是因为 首先没有认真读题,没看清交换,然后,以为是dp或者贪心 用了一下贪心,各 ...

  8. Codeforces Round #243 (Div. 1)-A,B,C-D

    此CF真是可笑.. . 由于早晨7初始点,因此,要做好CF时间已经17没有休息一小时,加上中午5小时耐力赛. 心里很清楚.是第一个问题的时候,几乎被解读为寻求最大的领域和.然后找到一个水体,快速A降. ...

  9. Codeforces Round #243 (Div. 2)——Sereja and Swaps

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/u012476429/article/details/24665103 题目链接 题意: 给定一个整数 ...

随机推荐

  1. SQL Server 中WITH (NOLOCK)浅析(转潇湘隐者)

    博文出处:http://www.cnblogs.com/kerrycode/p/3946268.html 概念介绍 开发人员喜欢在SQL脚本中使用WITH(NOLOCK), WITH(NOLOCK)其 ...

  2. 第六篇、微信小程序-form组件

    表单: 将组件内的用户输入的<switch/> <input/> <checkbox/> <slider/> <radio/> <pi ...

  3. 1.6建造者模式(生成器模式) Builder

    1.概念:将一个复杂对象的构建和他的表示分离,使得同样的构件可以创建不同的表示. 2.实例:肯德基和中餐,肯德基抽象了整个做菜的复杂过程(相同的构建),然后在不同的店铺进行实现(不同的表示).中餐往往 ...

  4. CSS笔记---文字两边对齐

    <style> .box{ width: 1000px; height: 500px; background-color: #aa0000; margin:0 auto; } .teste ...

  5. 【转载】Linux小白福利:《超容易的Linux系统管理入门书》(三)在虚拟机上安装Linux

    本篇是Linux小白最佳实践第3篇,目的就是让白菜们自己动手安装个Linux玩玩.如果你是Linux小白,请务必亲自动手来安装.不想安装多个操作系统的,虚拟机是最佳选择,一台电脑上可以用虚拟机安装7. ...

  6. uva247 - Calling Circles(传递闭包+DFS)

    题意:两人相互打电话(直接或间接),则在一个电话圈.即a给b打电话,b给c打电话,则a给c间接打电话. 注意:1.注意标记.2.注意输出格式. #include<iostream> #in ...

  7. bzoj 3626 LCA

    这一道题咋一看只觉得是离线,可以求出所有的f(1,i,z), 答案就等于f(1,r,z)-f(1,l-1,z).但是没有具体的做法,但是求LCA的深度和有一个非常巧妙的做法,每加一个点,就把这个点到根 ...

  8. MySQL的 inner join on 与 left join on

    WHERE子句中使用的连接语句,在数据库语言中,被称为隐性连接.INNER JOIN……ON子句产生的连接称为显性连接. inner join:理解为“有效连接”,两张表中都有的数据才会显示left ...

  9. Linux C 程序 文件操作(Linux系统编程)(14)

    文件操作(Linux系统编程) 创建一个目录时,系统会自动创建两个目录.和.. C语言实现权限控制函数 #include<stdio.h> #include<stdlib.h> ...

  10. 在.NET连接MySQL以及封装好的MySQLHelper.cs

    1.首先上MySQL网站下驱动:http://www.mysql.com/products/connector/ 2.安装下载的安装包 3.我们在Visual Studio里创建一个Web Appli ...