T1:卡片(card)

【题目描述】

lrb喜欢玩卡牌。他手上现在有张牌,每张牌的颜色为红绿蓝中的一种。现在他有两种操作。一是可以将两张任意位置的不同色的牌换成一张第三种颜色的牌;二是可以将任意位置的两张相同颜色的牌换成一张该颜色的牌。两个操作后都可以将生成的牌放到任意位置。现在他想知道,最后一张牌可能是什么颜色的。

【输入描述】

第一行输入一个,表示卡牌数量。

第二行输入一个由’B’,’G’,’R’组成的长度为的字符串,分别表示卡牌的颜色为蓝色、绿色、红色中的一种。

【输出描述】

输出’B’,’G’,’R’中的若干个字母,按字典序输出。代表可能的最后一张牌的颜色。

【样例】

输入1

输出1

2

RB

G

输入2

输出2

3

GRG

BR

输入3

输出3

4

BBBB

B

【数据范围】

对于100%的数据,n<=200

——————————————————我是分割线————————————————————

这是一道简单分析题。(入门难度。。不要吐槽)

很显然我们发现如果3张牌都超过一张,三种情况都会出现(BGR)

那么如果有2张牌都超过2张,同上

剩下3种情况:

1,1,0(数字表示牌的数量)那么答案就是牌数是0的那张

2,1,0(2表示2张以上)那么答案就是牌数为1和0的两张

1,0,0(1表示一张以上)那么答案就是牌数为1的那一张

然后。。。做完了

下面贴上代码

#include<cstdio>
using namespace std;
int a[4],n;
int er,yi,sa;
char ch;
char ans[3]={'B','G','R'};
void swap(int &a,int &b){a^=b;b^=a;a^=b;}
int main(){freopen("card.in","r",stdin);freopen("card.out","w",stdout);scanf("%d",&n);for(int i=1;i<=n;i++){ch=getchar();while(ch<'A'||ch>'Z')ch=getchar();if(ch=='B')a[1]++;else if(ch=='G')a[2]++;else if(ch=='R')a[3]++;}for(int i=1;i<=3;i++)if(a[i]>=2)er++;for(int i=1;i<=3;i++)if(a[i]>=1)yi++;    if(er>=2||yi==3)puts("BGR");else if(er==1&&yi==2){int x,y;for(int i=1;i<=3;i++)if(a[i]==0)x=i;else if(a[i]==1)y=i;if(x>y)swap(x,y);printf("%c%c\n",ans[x-1],ans[y-1]);}else if(yi==2){int x;for(int i=1;i<=3;i++)if(!a[i])x=i;printf("%c\n",ans[x-1]);}else if(yi==1){int x;for(int i=1;i<=3;i++)if(a[i])x=i;printf("%c\n",ans[x-1]);}fclose(stdin);fclose(stdout);
}

————————————————我是分割线——————————————————

T2:取数(win)

【题目描述】

lrb目前有个数字,他想知道这个数中选出若干个数,平均数减中位数的最大值是多少。可以证明,对于一个递增数列,如果是平均数减中位数最大时的中位数,表示在两边分别取相邻数字的数量,表示以为中位数,在两侧各取相邻个数时平均数减中位数的值,那么为关于的单峰函数。

【输入描述】

第一行为,为数字个数。

第二行有个数,分别代表个数字。

【输出描述】

输出一个数,为平均数减中位数的最大值,保留两位小数。

【样例】

输入

输出

4

1 2 3 4

0.33

【数据范围】

对于60%的数据,n<=21

对于75%的数据,n<=1000

对于100%的数据,n<=10^5,0<=ai<=10^6

——————————————————我是分割线————————————————————

这题首先我们要想到的就是枚举中位数。

那么假设我们已知某一个数是中位数,那么我们怎么求最优的答案呢?

对于一个已经排序过的数列,

显然我们要在这个中位数的左边和右边同时取相同数量的数。

对于中位数的左边,显然越靠近中位数的数越优,

对于中位数的右边,越远离中位数的数越优。

所以对于第i个数作为中位数的情况,我们左边从第i-1位开始向左取数,右边从第n位开始向左取数。而取数的个数自然就是三分啦!(三分的过程用前缀和O(1)求平均数)

至于为什么偶数个数的数列不是最优解,这个我留个坑以后来填。

下面贴代码(当然我写了偶数版本)

#include<cstdio>
#include<algorithm>
#define MN 100005
using namespace std;
int a[MN],n;
long long sum[MN];
double ans=-100000000;
int main(){freopen("win.in","r",stdin);freopen("win.out","w",stdout);scanf("%d",&n);for(int i=1;i<=n;i++)scanf("%d",&a[i]);sort(a+1,a+n+1);int l=0,r=0,lm=0,rm=0,le=0;double la=a[1],ra=a[1];for(int i=1;i<=n;i++)sum[i]=sum[i-1]+a[i];for(int i=1;i<=n;i++){le=min(i-1,n-i);le=max(le,0);l=0,r=le;while(l<r-1){lm=l+(r-l)/3,rm=r-(r-l)/3;la=(double)(sum[i-1]-sum[i-1-lm]+sum[n]-sum[n-lm]+a[i])/(double)(2*lm+1);ra=(double)(sum[i-1]-sum[i-1-rm]+sum[n]-sum[n-rm]+a[i])/(double)(2*rm+1);if(la<ra)l=lm+1;else r=rm-1;}la=(double)(sum[i-1]-sum[i-1-l]+sum[n]-sum[n-l]+a[i])/(double)(2*l+1);ra=(double)(sum[i-1]-sum[i-1-r]+sum[n]-sum[n-r]+a[i])/(double)(2*r+1);if(la<ra)ans=max(ans,ra-(double)a[i]);else ans=max(ans,la-(double)a[i]);}la=ra=(double)(a[1]+a[2])/2.0;for(int i=1;i<n;i++){le=min(i-1,n-i-1);le=max(le,0);l=0,r=le;while(l<r-1){lm=l+(r-l)/3,rm=r-(r-l)/3;la=(double)(sum[i-1]-sum[i-1-lm]+sum[n]-sum[n-lm]+a[i]+a[i+1])/(double)(2*lm+2);ra=(double)(sum[i-1]-sum[i-1-rm]+sum[n]-sum[n-rm]+a[i]+a[i+1])/(double)(2*rm+2);if(la<ra)l=lm+1;else r=rm-1;}la=(double)(sum[i-1]-sum[i-1-l]+sum[n]-sum[n-l]+a[i]+a[i+1])/(double)(2*l+2);ra=(double)(sum[i-1]-sum[i-1-r]+sum[n]-sum[n-r]+a[i]+a[i+1])/(double)(2*r+2);if(la<ra)ans=max(ans,ra-(double)((double)(a[i]+a[i+1])/(double)2));else ans=max(ans,la-(double)((double)(a[i]+a[i+1])/(double)2));}printf("%.2lf\n",ans);fclose(stdin);fclose(stdout);
}

————————————————我是分割线————————————————

T3:密码(key)

【题目描述】

lrb去柜员机取钱,并输入了他的四位密码。但是这一切都被一个黑帮拍摄了下来。幸好,这一次他的银行卡里并没有剩余任何钱。lrb知道了他的账户被异常登录后十分害怕,然后修改了他的密码。从此以后他为了不被看出密码,他开始“徐晃”。但这一切还是被拍摄了下来,拍摄多次以后,这个黑帮找到了你,希望你在一秒内帮他算出lrb的可能使用的密码数量。

【输入描述】

第一行输入一个,为lrb被拍摄的动作次数。

接下来行,每行第一个数为,表示lrb接下来的手指移动次数,接下来为一个长度为的数字串,表示lrb手指经过的轨迹。lrb手指经过的位置,可能没有按,也有可能按了多次。

【输出描述】

输出一行,为可能的密码数量。

【样例】

输入

输出

2

3 123

3 234

5

解释

lrb可能用的是2222,2223,2233,2333,3333五种密码

【数据范围】

设所有轨迹串的总长度为。

对于35%的数据,L<5000

对于100%的数据,1<=n<=1000,1<=t<=10^4,L<=10^6

——————————————————我是分割线——————————————————

这道题有一个简单思路(想不到的都是脑子抽了,比如我)

我们只要枚举所有的密码就好了

然后就是如何在O(n)时间内check一个密码

我们只要开一个数组记录从每一位开始,后面的第一个0-9分别在第几位,如果都能够找到,那么密码合法。

下面贴代码

#include<cstdio>
#define MN 1005
#define M 1000005
#define F(x,l,r) for(int x=l;x<=r;x++)
using namespace std;
char e[M];int f[M][10],ans,n,t[MN];
int main(){freopen("key.in","r",stdin);freopen("key.out","w",stdout);scanf("%d",&n); for(int i=1;i<=n;i++)scanf("%d%s",&t[i],e+t[i-1]),t[i]+=t[i-1];for(int i=0;i<=9;i++)f[t[n]][i]=t[n];for(int i=t[n]-1;i>=0;i--){for(int j=0;j<=9;j++)f[i][j]=f[i+1][j];f[i][e[i]-'0']=i;}F(a,0,9)F(b,0,9)F(c,0,9)F(d,0,9){int tot=0;F(i,0,n-1)if(f[f[f[f[t[i]][a]][b]][c]][d]<t[i+1])tot++;ans+=tot==n;}printf("%d\n",ans);
}

转载于:https://www.cnblogs.com/ghostfly233/p/7473367.html

校内集训(20170903)相关推荐

  1. 校内集训11.1小结

    校内集训11.1小结 T1:腿部挂件 T2:走夜路 T3:宝石专家 前言:这次做了一套提高难度的题,总分反而比上次高了.这次考试除了第二题没想出单调栈有些可惜外,也没有什么遗憾了.为了增强本人的考场思 ...

  2. 校内集训安全责任书模板

    这是本人拟定的我校校内集训的安全责任书模板,仅供友校老师参考使用.假期集训是竞赛生提高水平的最快方式,一般也叫"第三学期",管理一定要做到位,一是提高学生学习效率,第二个也是降低安 ...

  3. 2017-2018-2 165X 『Java程序设计』课程 助教总结

    2017-2018-2 165X 『Java程序设计』课程 助教总结 本学期完成的助教工作主要包括: 编写300道左右测试题,用于蓝墨云课下测试: 发布博客三篇:<2017-2018-2 165 ...

  4. 洛谷 P5594 【XR-4】模拟赛 视频讲解(二维数组、模拟)

    洛谷 P5594 [XR-4]模拟赛(需要 二维数组) 题目描述 X 校正在进行 CSP 前的校内集训. 一共有 nn 名 OIer 参与这次集训,教练为他们精心准备了 mm 套模拟赛题. 然而,每名 ...

  5. P5594 【XR-4】模拟赛

    题目描述 X 校正在进行 CSP 前的校内集训. 一共有 nn 名 OIer 参与这次集训,教练为他们精心准备了 mm 套模拟赛题. 然而,每名 OIer 都有各自的时间安排,巧合的是,他们在接下来的 ...

  6. 洛谷:P5594 【XR-4】模拟赛

    [XR-4]模拟赛 题目描述 X 校正在进行 CSP 前的校内集训. 一共有 nnn 名 OIer 参与这次集训,教练为他们精心准备了 mmm 套模拟赛题. 然而,每名 OIer 都有各自的时间安排, ...

  7. 洛谷P5594-【XR-4】模拟赛(模拟)

    题目描述: X 校正在进行 CSP 前的校内集训. 一共有 nnn 名 OIer 参与这次集训,教练为他们精心准备了 mmm 套模拟赛题. 然而,每名 OIer 都有各自的时间安排,巧合的是,他们在接 ...

  8. 洛谷P5594-【XR-4】模拟赛

    题目描述 X 校正在进行 CSP 前的校内集训. 一共有 nn 名 OIer 参与这次集训,教练为他们精心准备了 mm 套模拟赛题. 然而,每名 OIer 都有各自的时间安排,巧合的是,他们在接下来的 ...

  9. 用vis数组保证只入队一次P5594 【XR-4】模拟赛

    文章目录 [XR-4]模拟赛 题目描述 输入格式 输出格式 样例 #1 样例输入 #1 样例输出 #1 样例 #2 样例输入 #2 样例输出 #2 样例 #3 样例输入 #3 样例输出 #3 提示 小 ...

最新文章

  1. TextView使用实例
  2. 操作系统:生产者与消费者问题
  3. 敢问北极熊,路在何方?
  4. windows纯手工安装php和Apache以及连接mysql
  5. [BZOJ3297][USACO2011 Open]forgot
  6. jQuery实现title提示效果
  7. linux 没有network服务,求助,network起不来
  8. 计算机学硕研究计划,博士研究生学习计划和研究计划
  9. 计算机程序设计艺术读书感悟
  10. 达梦数据库ZYJ实例安装初始化
  11. iOS模拟器iOS Simulator详细图文使用教程
  12. Alpine-Linux:仅5MB的Linux
  13. 领奖啦!第二期博客征文《从HelloWorld启航——说说那些年我们一起写过的代码》获奖名单揭晓
  14. 一键更新盘古权限系统
  15. 2022-2027年中国非标自动化设备行业市场深度分析及投资战略规划报告
  16. Linux 之父自传《just for fun》读书笔记
  17. 解决浩方显示no ping的问题,罪魁祸首在NOD32的设置上
  18. 2007年图灵奖--克拉克、埃默生、希法凯斯简介
  19. 半个月学习的it内容
  20. 营改增,营业税与增值税的区别

热门文章

  1. Django开发社交类网站必备的10个第三方应用
  2. Codeforces 864E - Fire(dp)
  3. 条款20:为指针的关联容器指定比较类型
  4. 《嵌入式Linux软硬件开发详解——基于S5PV210处理器》——2.2 DDR2 SDRAM芯片
  5. 【Linux】debian jessie版本安装1.9 svn
  6. Mongodb副本集配置
  7. 安装ORACLE RAC时,用到的一些小命令1.弹出CD,2:配置时间同步,3.查看磁盘信息UUID
  8. 将数据归一化到任意区间范围的方法
  9. Java有序表查找:折半查找、二分查找、差值查找和斐波那契查找
  10. 学习笔记之-Activiti7工作流引擎,概述,环境搭建,类关系图,使用Activiti BPMN visualizer,流程变量,组任务 网关,Activiti整合Spring SpringBoot