CF 604C Alternative Thinking#贪心

(~ ̄▽ ̄)~*

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;

const int MAXN=100005;
char s[MAXN];

int main()
{
    int n;
    scanf("%d",&n);
    scanf("%s",s);//输入01串
    int origin=1,flip=0;
    for(int i=1;i<strlen(s);i++)
    {
        if(s[i]==s[i-1])
            flip++;//00或11
        else origin++;//01或10
    }
    if(flip>2) flip=2;
    //由于不管怎样改变原01串,只有两端关系(可能从11->10/10->11等)会受影响,中间的01串数量仍不变
    //所以flip最多就是增加2
    printf("%d\n",origin+flip);
}
时间: 2024-11-08 09:56:41

CF 604C Alternative Thinking#贪心的相关文章

Alternative Accounts 贪心匹配

Alternative Accounts 贪心匹配 题意: 有n个账号,k场比赛(1 <= k <= 3),每场比赛有m个人参加,账号名分别为\(x_i\),一个人可以有多个账号,但是一个人只能用一个账号参加比赛,问最少有多少个人. 题解: (大佬教我的)同一场比赛的账号不能在同一个集合里,问最少用几个集合能把数装满,用cnt1,cnt2,cnt3分别记录只出现在第一,二,三场比赛的账号,用cnt12,cnt13,cnt23记录出现在第一二,一三,二三场比赛的账号,那么cnt1和cnt23可以

cf 12C Fruits(贪心【简单数学】)

题意: m个水果,n个价格.每种水果只有一个价格. 问如果给每种水果分配价格,使得买的m个水果总价格最小.最大. 输出最小值和最大值. 思路: 贪心. 代码: bool cmp(int a,int b){ return a>b; } string name; map<string,int> mp; int price[200],fruit[200]; int cn; int n,m; int main(){ cin>>n>>m; mp.clear(); cn=0;

CF 626C [Block Towers] 贪心

题目链接:http://codeforces.com/problemset/problem/626/C 题目大意: 有n个人用高度为2的砖往上搭,有m个人用高度为3的砖往上搭.每个人可用的砖块数是无限的,但是要求每个人搭的塔的高度,求所有可行情况中塔的最高高度的最小值. 关键思想:贪心,当且仅当高度为6的倍数时,他们的高度会相同.这时必须有一个人搭更高的,哪个人呢?此时就贪心:另外一种思想是数学的,首先答案x一定是大于等于2n也是大于等于3m的(有6的倍数取等号)对吧,而且m+n<=(x/2+x

cf 540b School Marks 贪心

B. School Marks time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output Little Vova studies programming in an elite school. Vova and his classmates are supposed to write n progress tests, for each

cf 853 A planning [贪心]

题面: 传送门 思路: 一眼看得,这是贪心[雾] 实际上,我们要求的答案就是sigma(ci*(ti-i))(i=1~n),这其中sigma(ci*i)是确定的 那么我们就要最小化sigma(ci*ti) 所以在新的每一秒,就把这一秒开始可以起飞的飞机中,cost最大的那一个拿出来,让他起飞就可以了 证明: 设最大的为m,我们取得另一个为n 那么n*ti+m*(ti+1) >= n*(ti+1)+m*ti 所以取m最好 这个过程用堆实现,懒得手打了,就用了priority_queue Code:

CF 545C Woodcutters(贪心)

题目链接:http://codeforces.com/problemset/problem/545/C 题目: Little Susie listens to fairy tales before bed every day. Today's fairy tale was about wood cutters and the little girl immediately started imagining the choppers cutting wood. She imagined the

Codeforces 604C Alternative Thinking

题目链接:http://codeforces.com/problemset/problem/604/C 题意:给一个01串,你可以指定起点,终点,翻转此区间一次.要求翻转后,0,1交替出现的子串长度最长,输出长度. 思路:头开始想想,感觉很麻烦,其实多写几个例子,想一想,就那么三种情况. 想要使翻转后,符合题意的子串长度增加.要么就是有连续相同的元素(11:增加1,111:增加2),要么就是可以交换的类型(0011:增加2). 连续的元素大于3也只能增加2. ×××要注意的一点是:1100001

第十六周 12.14---12.20

新的一周>_< ---12.14 补之前的一场 cf cf 604c http://codeforces.com/contest/604/problem/C 给一串长度为 n 的 01串,可以翻转一个区间,问能够得到的最长的01序列是多长(可以不连续) 没有想出来,,, 其实可以发现,翻转一个区间,能够给原串带来2个贡献,所以算出原来的最长的加上 2 和 n 取最小值就好了 1 #include<cstdio> 2 #include<cstring> 3 #includ

第六周 10.4-10.10

10.4 CF 582A GCD Table 贪心取最大.熟悉set大法. 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <algorithm> 5 #include <vector> 6 #include <set> 7 using namespace std; 8 multiset<int> S; 9 multiset