A题,熊孩子测视力,水题,题意就是判断一下两个数对应位不相同的数字有多少个。

#include<bits/stdc++.h>

using namespace std;

class BearCheats{
public:
string eyesight(int A, int B){
int digA[],digB[];
int t = ;
while(A){
digA[t++] = A%;
A/=;
}
for(int i = ; i < t; i++){
digB[i] = B%;
B/=;
}
int dif = ;
for(int i = ; i < t; i++){
if(digA[i]!=digB[i]) dif++;
}
if(dif<=) return "happy";
else return "glasses";
} };

Pro A

B题,熊孩子合并石子,题意是给你三堆石子,每次可以选两个,设小的那堆石子数为X,大的那堆石子为Y,X变成2*X,Y变成Y-X。问最后可不可能使三堆石子数相同。

div2的数据,暴力dfs就过了。因为石子总数一定,状态可以只有两维。

给用数论的大神orz

#include<bits/stdc++.h>
using namespace std;
const int maxn = ; bool vis[maxn][maxn]; bool dfs(int *dat)
{
if(dat[] == dat[] && dat[] == dat[]) return true;
int ndat[]= {dat[]<<,dat[]-dat[],dat[]};
sort(ndat,ndat+);
if(!vis[ndat[]][ndat[]] && ( vis[ndat[]][ndat[]] = true,dfs(ndat))) return true;
ndat[] = dat[]<<; ndat[] = dat[]; ndat[] = dat[] - dat[];
sort(ndat,ndat+);
if(!vis[ndat[]][ndat[]] && ( vis[ndat[]][ndat[]] = true,dfs(ndat))) return true;
ndat[] = dat[]; ndat[] = dat[]<<; ndat[] = dat[] - dat[];
sort(ndat,ndat+);
if(!vis[ndat[]][ndat[]] && ( vis[ndat[]][ndat[]] = true,dfs(ndat))) return true;
return false;
} class BearPlaysDiv2{
public:
string equalPiles(int A, int B, int C){
if( (A+B+C)/* != A+B+C ) return "impossible";
int dat[] = {A,B,C};
sort(dat,dat+);
vis[dat[]][dat[]] = true;
if(dfs(dat)) return "possible";
else return "impossible";
}
};

Pro B

C题,熊孩子排序,熊孩子乱搞了一个LESS函数,返回true和false的概率各占一半,问用一个排好序的序列经过sort以后得到给出序列的概率,其实就是问你比较次数。。。映射一下就完了。

举个栗子:比如要得到的序列是2,4,3,1。那么它和有序的映射是如左边所示,那么以原来的数字为key排序就得到了右边的映射,

怎么得到原来的映射呢?只要反过来,以右边的val做为key,key变成val。在排序就得到原来的映射了(这也就是为什么原来的映射一定要是有序的原因)。这和我们原来的问题有什么关系呢?当然有,观察下面的key,

在这个反过来sort的过程中,下面的1 2 3 4变成了 2 4 3 1,正是我们要得到的序列。

类似思路的题:CDOJ 485

#include<bits/stdc++.h>
using namespace std;
const int maxn = ;
int a[maxn];
int t[maxn];
const double onecmp = log(0.5);
int times;
void merge_sort(int* a,int l,int r)
{
if(r-l<=) return ;
int mid = (l+r)>>;
merge_sort(a,l,mid);
merge_sort(a,mid,r);
int i = l, j = mid, k =l,p; while(i < mid && j < r){
if(times++,a[i]>=a[j]) t[k] = a[j++];
else t[k] = a[i++];
k++;
}
if(i == mid) for(p = j; p < r; p++) t[k++] = a[p];
else for(p = i; p < mid; p++) t[k++] = a[p];
for(k = l;k < r; k++) a[k] = t[k];
} class BearSortsDiv2{
public:
double getProbability(vector <int> seq){
for(int i = ; i < seq.size(); i++){
a[seq[i]-] = i;
}
times = ;
merge_sort(a,,seq.size());//log(ans);double ans =
return times*onecmp;
}
}Bear;
/*
int main()
{
freopen("in.txt","r",stdin);
vector<int> s;
int tmp;
while(~scanf("%d",&tmp))
s.push_back(tmp);
double ans = Bear.getProbability(s);
printf("%lf",ans);
return 0;
}
*/

topcpder SRM 664 div2 A,B,C BearCheats , BearPlays equalPiles , BearSorts (映射)的更多相关文章

  1. TC SRM 664 div2 A BearCheats 暴力

     BearCheats Problem Statement    Limak is an old brown bear. Because of his bad eyesight he sometime ...

  2. TC SRM 664 div2 B BearPlaysDiv2 bfs

    BearPlaysDiv2 Problem Statement    Limak is a little bear who loves to play. Today he is playing by ...

  3. SRM 657 DIV2

    -------一直想打SRM,但是感觉Topcoder用起来太麻烦了.题目还是英文,不过没什么事干还是来打一打好了.但是刚注册的号只能打DIV2,反正我这么弱也只适合DIV2了.. T1: 题目大意: ...

  4. Topcoder Srm 673 Div2 1000 BearPermutations2

    \(>Topcoder \space Srm \space 673 \space Div2 \space 1000 \space BearPermutations2<\) 题目大意 : 对 ...

  5. Topcoder Srm 671 Div2 1000 BearDestroysDiv2

    \(>Topcoder \space Srm \space 671 \space Div2 \space 1000 \space BearDestroysDiv2<\) 题目大意 : 有一 ...

  6. 记第一次TopCoder, 练习SRM 583 div2 250

    今天第一次做topcoder,没有比赛,所以找的最新一期的SRM练习,做了第一道题. 题目大意是说 给一个数字字符串,任意交换两位,使数字变为最小,不能有前导0. 看到题目以后,先想到的找规律,发现要 ...

  7. Topcoder srm 632 div2

    脑洞太大,简单东西就是想复杂,活该一直DIV2; A:水,基本判断A[I]<=A[I-1],ANS++; B:不知道别人怎么做的,我的是100*N*N;没办法想的太多了,忘记是连续的数列 我们枚 ...

  8. SRM 638 Div2

    2333... 因为TC过少的参与者.加上不断fst 我掉了div2该. 幸运的是完成的背div1该.. 250 水的问题 500 水的问题.. 直接bfs扩展即可了 注意判重.  我还用康托展开了真 ...

  9. SRM 592 DIV2 报告

    昨天下午查看邮箱,看到了topcoder的SRM比赛通知和cf的比赛通知,当时什么也不想做,心里空荡荡的,忽然就想参加一下,试试看.吃完晚饭回来一看,就剩十几分钟了,匆忙把平台下了,就开始等待比赛开始 ...

随机推荐

  1. shell程序---编译目录下全部.c或.cpp文件

    今天大波又提起昨天我说的那个程序.这样的,起初我想写一个makefile,每次写完新代码后一键编译目录下所有的.cpp文件. 原因是用makefile的话,每次要把目标文件加紧去才能编译.感觉不方便. ...

  2. Gym - 100851A Adjustment Office(O(1)求行列和)

    Adjustment Office Gym - 100851A 2       3       4 3       4       5 4       5       6 n<=10^6,q&l ...

  3. 3dmax导出缩放

    参考 http://blog.dou.li/unity3d-import-3dmax-model-scale.html http://blog.csdn.net/pdw_jsp/article/det ...

  4. solidity 学习笔记(5)接口

    接口:不用实现方法,仅仅定义方法. pragma solidity ^; contract cat{ //cat实际上实现了接口animalEat,因为他们有相同的方法. string name; f ...

  5. Prefix.pch文件的用法

    我们知道,每新建立一个工程,比如说HelloWord,在分类SupportingFiles里都会有一个以工程名开头-Prefix.pch结尾的文件,如HelloWord-Prefix.pch.对于这个 ...

  6. 编译最新linux内核(version 4.4.2)

    环境:centos6.4 内核版本为2.6.32 目标:编译4.4.2内核,升级到 4.4.2 准备工作: 安装开发库和ncurses库 # yum groupinstall "Develo ...

  7. Ubuntu英文版中无法输入中文标点符号的问题

    问题: 不管是中文还是英文输入法,输入的标点符号都是英文的 解决方法: ctrl + .  进行切换,一个是lation 符号,一个是全角符号

  8. SVN Trunk Tag Branch

    http://blog.csdn.net/vbirdbest/article/details/51122637

  9. Python-13-pass,del和exec

    1.pass就是什么都不做 >>> pass >>>   2. 对于你不再使用的对象, Python通常会将其删除(因为没有任何变量或数据结构成员指向它) . &g ...

  10. 寒假作业第二组C题题解

    这道题题意很简单,主要是练习map的使用.看输入有三个数据,水果名,地名,和出现次数.再看输出,很容易想到map<string,int> string是水果,int是次数,那个地名怎么用m ...