topcpder SRM 664 div2 A,B,C BearCheats , BearPlays equalPiles , BearSorts (映射)
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 (映射)的更多相关文章
- TC SRM 664 div2 A BearCheats 暴力
BearCheats Problem Statement Limak is an old brown bear. Because of his bad eyesight he sometime ...
- TC SRM 664 div2 B BearPlaysDiv2 bfs
BearPlaysDiv2 Problem Statement Limak is a little bear who loves to play. Today he is playing by ...
- SRM 657 DIV2
-------一直想打SRM,但是感觉Topcoder用起来太麻烦了.题目还是英文,不过没什么事干还是来打一打好了.但是刚注册的号只能打DIV2,反正我这么弱也只适合DIV2了.. T1: 题目大意: ...
- Topcoder Srm 673 Div2 1000 BearPermutations2
\(>Topcoder \space Srm \space 673 \space Div2 \space 1000 \space BearPermutations2<\) 题目大意 : 对 ...
- Topcoder Srm 671 Div2 1000 BearDestroysDiv2
\(>Topcoder \space Srm \space 671 \space Div2 \space 1000 \space BearDestroysDiv2<\) 题目大意 : 有一 ...
- 记第一次TopCoder, 练习SRM 583 div2 250
今天第一次做topcoder,没有比赛,所以找的最新一期的SRM练习,做了第一道题. 题目大意是说 给一个数字字符串,任意交换两位,使数字变为最小,不能有前导0. 看到题目以后,先想到的找规律,发现要 ...
- Topcoder srm 632 div2
脑洞太大,简单东西就是想复杂,活该一直DIV2; A:水,基本判断A[I]<=A[I-1],ANS++; B:不知道别人怎么做的,我的是100*N*N;没办法想的太多了,忘记是连续的数列 我们枚 ...
- SRM 638 Div2
2333... 因为TC过少的参与者.加上不断fst 我掉了div2该. 幸运的是完成的背div1该.. 250 水的问题 500 水的问题.. 直接bfs扩展即可了 注意判重. 我还用康托展开了真 ...
- SRM 592 DIV2 报告
昨天下午查看邮箱,看到了topcoder的SRM比赛通知和cf的比赛通知,当时什么也不想做,心里空荡荡的,忽然就想参加一下,试试看.吃完晚饭回来一看,就剩十几分钟了,匆忙把平台下了,就开始等待比赛开始 ...
随机推荐
- Django 中ORM 的使用
一:Django 中 orm 的使用 1:手动新建一个数据库 2 :告诉Django连接哪个数据库 settings.py里配置数据库连接信息: #数据库相关的配置项 DATABASES ={ 'de ...
- Gym - 100851A Adjustment Office(O(1)求行列和)
Adjustment Office Gym - 100851A 2 3 4 3 4 5 4 5 6 n<=10^6,q&l ...
- pgpool-ii 安装手册 基于Centos7.3
http://www.bkjia.com/jQuery/1173582.html地址被占用pgpool启动失败 Nov 15 02:33:56 node3 pgpool: 2016-11-15 02: ...
- Nginx在Linux里安装 以及nginx实现负载均衡
Nginx 一.在Linux里安装软件 1. rpm命令 rpm: redhat package manager,红帽软件包管理套件 常用命令: 安装:rpm -ivh 软件包 i :安装模式 v : ...
- mySQL多表查询与事务
一.范式 1. 什么是范式 1.1 什么是范式 范式:设置一个科学的.规范的数据库,需要满足的一些规则 1.2 有哪些范式 共有:6大范式 第1范式:1NF 满足最基本的要求 第2范式:2NF 在1N ...
- Redis和springboot 整合redisUtil类
一.引入依赖 <dependency> <groupId>org.springframework.boot</groupId> <artifactId> ...
- Javascript中常用方法简介
Array数组常用方法 先创建一个数组var abc = [1,2,3,4,5,6,7,8,9]; (1)pop(); 这个方法会删除数组的最后一项并返回删除掉的值. 比如:console ...
- 6.计算字段 ---SQL
提示:客户端与服务器的格式在SQL语句内可完成的许多转换和格式化工作都可以直接在客户端应用程序内完成.但一般来说,在数据库服务器上完成这些操作比在客户端中完成要快得多. 一.拼接字段 拼接(conca ...
- Python文件内容修改
''' 吃的文件内容: 过油肉菜 尖椒菜 娃娃菜 ''' import os with open("吃的", mode="r", encoding=" ...
- 数组Array的相关操作。
一 数组的对象(元素): 1. 数字, 2 .字符串 3 变量 4. 函数 .... 二 数组的创建 1 var arrayObj = new Array(); var a =new Array(si ...