codeforces 1196 A (简单)B(思维) C(思维)

A. Three Piles of Candies(简单)

题目链接:codeforces 1196A

题意:

    给三堆糖,然后一人拿一堆,多的一堆分掉,然后谁多扔掉一些,保证两个人的糖数量相等,求两个人拿的糖最多为多少

题解:

  无(太简单)

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 1e6+9;
int main(){
	int q;
	cin >> q;
	while(q--){
		ll a, b, c;
		cin >> a >> b >>c;
		cout << (a + b + c) / 2 << endl;
	} 
	return 0;
}

B. Odd Sum Segments(思维)

题目链接:codeforces 1196B

题意:

   给出一个n,(n个数), k(k个子段),然后要求每个字段(连续的)的和为奇数,如果可以,输出"YES",并输出子段的右边界,否则输出"NO"

样例:

 5  3

7 18 3 14 1

输出 1  3  5       左边界就上上一个的右边界

7 ,18 + 3  , 14 + 1  分别是一个和为奇数的子段

题解:

   只用判断a[i]是否为奇数,如果是奇数,记住下标,如果奇数的个数小于k,也就是说每个奇数单独都不能构成k个和为奇数的子段,输出NO ,或者 k % 2 != 奇数的个数,那么构不成 和为奇数的k个子段。

举例说明:

   1 2 3 4 5 6       最多能构成3个和为奇数的子段,无法构成 比3个多的奇数和的子段

  也不能构成2个子段和为奇数的子段   1+2       3+4+5+6(不为奇数)

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 2e5+9;
int main(){
	int q;
	cin >> q;
	while(q--){
		vector<int> v;
		int n, k, u, w = 1;
		cin >> n >> k;
		for(int i = 1; i <= n; i++){
			cin >> u;
			if(u % 2 != 0){
				v.push_back(i);
			}
		}
		w = v.size();
		if(k > w || k % 2 != w % 2){
			cout << "NO" << endl;
		}
		else{
			cout << "YES" << endl;
			for(int i = 0; i < k - 1; i++){
				cout << v[i] << " ";
			}
			cout << n << endl;
		}
	}
	return 0;
}

C. Robot Breakout(思维)

题目链接:codeforces 1196C

题意:

   给出n个点,可以对点进行操作,上下左右平移,如果f1 = 1,可以进行左移,如果f2 = 1,可以进行上移,如果f3 = 1,可以进行右移,如果f4 = 1,可以进行下移,问最终能否移动到一个点上。

题解:

   设置左右边界,如果左边界不超过右边界,上边界不超过下边界,就可以平移到一个点上

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn = 1e5;
int main(){
	int q;
	cin >> q;
	while(q--){
		int n, xl = -maxn, xr = maxn, yu = maxn, yd = -maxn;
		int x, y, f1, f2, f3, f4;
		cin >> n;
		for(int i = 1; i <= n; i++){
			cin >> x >> y >> f1 >> f2 >> f3 >> f4;
			if(f1 == 0){ // 左边界
				xl = max(xl, x);
			}
			if(f3 == 0){ // 右边界
				xr = min(xr, x);
			}
			if(f2 == 0){ // 上边界
				yu = min(yu, y);
			}
			if(f4 == 0){ // 下边界
				yd = max(yd, y);
			}
		}
		if(xl > xr || yu < yd){
			cout << 0 << endl;
		}
		else{
			cout << 1 << " " << xl << " " << yu << endl;
		}
	}
	return 0;
}

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值