topcoder 650 srm

500

遇到这种构造题 就给跪了

比赛的时候想很多方法 DP,贪心,模拟

发现越写越烦琐。看到别人出这么快,肯定又是奇葩思路。

后来居然想到 2^50的暴力 +剪枝 不过暴力肯定卡你

IDEA: 只要我们使尽量 S[I]!=S[I-1]就好了 。

对于s[0]==‘?‘我们枚举两次。

 1 #include <stdio.h>
 2 #include <string.h>
 3 #include <iostream>
 4 #include <algorithm>
 5 #include <vector>
 6 #include <queue>
 7 #include <set>
 8 #include <map>
 9 #include <string>
10 #include <math.h>
11 #include <stdlib.h>
12 #include <time.h>
13 #include<string>
14 using namespace std;
15
16 class TaroFillingAStringDiv2 {
17     public:
18     int getNumber(string S) {
19     int s1,s2;
20     s1=s2=0;
21     string s=S;
22     if(S[0]==‘?‘) s[0]=‘A‘;
23     for (int i=1;i<s.size();i++)
24     {
25         if (s[i]==‘?‘) s[i]= s[i-1]==‘A‘?‘B‘:‘A‘;
26         if (s[i]==s[i-1]) s1++;
27     }
28
29     s=S;
30     if(S[0]==‘?‘) s[0]=‘B‘;
31     for (int i=1;i<s.size();i++)
32     {
33         if (s[i]==‘?‘) s[i]= s[i-1]==‘A‘?‘B‘:‘A‘;
34         if (s[i]==s[i-1]) s2++;
35     }
36
37     return min(s1,s2);
38    }
39 };
时间: 2024-10-14 07:16:48

topcoder 650 srm的相关文章

topcoder 650 srm div2 1000pts

(15) 也是 DIV1 500 题意是给定 一个无向图 删去一条边以后 可不可以是完全二叉树. 细节点很多,开始做法居然求到桥去了,最近强联通写傻了. 最多1024-1个点 1024-1条边枚举 所以: 先枚举要删去的边,然后进行判断. 判断是否是一颗完全二叉树的话 要一个标记deep深度 max deep==h 然后还要看是否整个图强联通 还有一点 点的度 为1 ,2 ,3 其中度为2的只有一个 ,度为1的有2^(h-2)个 code: 1 #include<iostream> 2 #in

【TopCoder】SRM 680 DIV 2

1. BearPair之bigDistance1.1 题目概述在 <= 50的字符串中找位置i,j 满足(1) s[i] != s[j];(2) abs(i-j)尽可能大.若不存在返回-1, 否则返回最大值. 1.2 基本思路没什么好说的,串长这么短 O(n^2)直接A了. 1.3 代码 1 class BearPair { 2 public: 3 int pos[26]; 4 5 int bigDistance(string s) { 6 int len = s.length(); 7 int

TopCoder Practice SRM 144 Div 1

1 #include <iostream> 2 #include <vector> 3 #include <string> 4 #include <sstream> 5 #include <algorithm> 6 7 class Lottery 8 { 9 public: 10 std::vector<std::string> sortByOdds(std::vector<std::string> rules) 11 {

Topcoder Srm 673 Div2 1000 BearPermutations2

\(>Topcoder \space Srm \space 673 \space Div2 \space 1000 \space BearPermutations2<\) 题目大意 : 对于一个长度为 \(n\) 的排列,定义其的贡献为对其建笛卡尔树,树上有两个儿子的节点其左右儿子在原排列中的距离之和,给出 \(n, Mod\),求所有长度为 \(n\) 的排列的贡献之和对 \(Mod\) 取模的值 \(1 \leq n \leq 100\) 解题思路 : 考虑一个最暴力的 \(dp\) ,设

剪辑的楼天城的ACM之路

楼天城楼教主的acm心路历程(剪辑) 利用假期空闲之时,将这几年GCJ,ACM,TopCoder 参加的一些重要比赛作个回顾.昨天是GCJ2006 的回忆,今天时间上更早一些吧,我现在还清晰记得3 年前,我刚刚参加ACM 时参加北京赛区2005 和杭州赛区2005 的情况.2005 年ACM-ICPC——酸甜苦辣我进入清华大学开始本科学习的时间是2004 年8 月,在进入清华大学的第一年里,由于基础课学习比较紧张,再加上计算机系不允许大一学生自带电脑,我没有参加2004 年的ACM 比赛.不过在

中国大学生编程第一人:楼天城楼教主的acm心路历程

作为acm爱好者,分享下楼教主的故事,作为勉励 利用假期空闲之时,将这几年GCJ,ACM,TopCoder 参加的一些重要比赛作个回顾.昨天是GCJ2006 的回忆,今天时间上更早一些吧,我现在还清晰记得3 年前,我刚刚参加ACM 时参加北京赛区2005 和杭州赛区2005 的情况.2005 年ACM-ICPC——酸甜苦辣我进入清华大学开始本科学习的时间是2004 年8 月,在进入清华大学的第一年里,由于基础课学习比较紧张,再加上计算机系不允许大一学生自带电脑,我没有参加2004 年的ACM 比

【算法28】冒泡排序中的交换次数问题

问题描述 题目来源:Topcoder SRM 627 Div2 BubbleSortWithReversals 给定待排序数组A,在最多反转K个A的不相交子数组后,对A采用冒泡排序,问最小的swap次数是多少?冒泡排序的伪代码如下: BubbleSort(A): 循环len(A) - 1次: for i from 0 to len(A) - 2: if (A[i] > A[i+1]) swap(A[i], A[i+1]) 问题分析 首先,容易分析得到:对于任意待排序数组A,其采用冒泡排序所需要的

Topcoder SRM 658 Div1 650

Problem 有N个人,每个人血量为a[i],现在可以进行如下操作.选一个人,把它砍9滴血,如果再选一个人,砍3滴血,如果再选一个人,砍1滴血.一个人血量<=0的时候,这个人挂了.问最少砍多少次,使得N个人都挂.每个人血量不超过60,N不超过20. Solution just dp.dp[i][A][B]表示 砍第 i 个人时,第一种操作还可用 A 次时,第二种操作还可用 B 次时,第三种操作最多可用dp[i][A][B]次. 二分答案ans,枚举 i,再枚举A,B,然后枚举a,b,分别表示第

TopCoder SRM 625 Incrementing Sequence 题解

本题就是给出一个数k和一个数组,包括N个元素,通过每次增加数组中的一个数的操作,最后需要得到1 - N的一个序列,不用排序. 可以从暴力法入手,然后优化. 这里利用hash表进行优化,最终得到时间效率是O(n*n)的算法,而且常数项应该很低,速度还挺快的. 思路: 1 如果数组A[i]在1 -N 范围内,就利用bool B[]记录,这个数已经找到了: 2 如果A[i]的值之前已经找到了,那么就增加k操作,得到新的值A[i]+k,看这个值是否找到了,如果没找到,就使用B记录,如果之前已经找到了,那