博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ECJTUACM16 Winter vacation training #5 题解&源码
阅读量:6348 次
发布时间:2019-06-22

本文共 3208 字,大约阅读时间需要 10 分钟。

A-------------------------------------------------------------------------------------------

题目链接:

解题思路:

【题意】

Sonya每天只有[l1,r1]时间段内空闲,且在k时刻,她要打扮而不能够见Filya

Filya每天[l2,r2]时间段内空闲

问他们俩每天有多少时间能够在一起

【类型】

区间交
【分析】

显然,要求他们俩每天有多少时间在一起

其实就是求两区间的交集

那无外乎就是对两区间的位置关系进行分析

,。当然还有几个图这里就不一一列举了,主要就是找到两个的

相交区间,然后判断k是否在这个区间中,在的话减一;

这道题要用long long,否则会超!

下面给出AC代码:

 

1 #include 
2 using namespace std; 3 typedef long long ll; 4 int main() 5 { 6 ll l1,l2,r1,r2,k; 7 while(cin>>l1>>r1>>l2>>r2>>k) 8 { 9 ll minn=min(r1,r2);10 ll maxn=max(l1,l2);11 ll ans=minn-maxn+1;12 if(maxn>minn)13 {14 cout<<0<
=maxn&&k<=minn)18 ans--;19 cout<
<

 

B-------------------------------------------------------------------------------------

题目链接:

题目大意:

  给你一个N(N<=100000)个字母敲击的时间a[i](a[i]<=109),如果在M时间内没有敲击那么屏幕就清零,否则屏幕上就多一个字母,问最后屏幕剩下几个字母。

    打下下一个字母的时候,如果和之前字母打下的时间不超过k的话,则保留前面的继续打,如果超过了,则前面的字母全部消失,只留下这一个字母。

     下面给出AC代码:

 

1 #include 
2 using namespace std; 3 int main() 4 { 5 int a[100005]; 6 int n,t; 7 while(scanf("%d%d",&n,&t)!=EOF) 8 { 9 for(int i=0;i

 

C----------------------------------------------------------------------------------------------

题目链接:

分析:当时这题还懵了一阵子,之前好像比赛写过,之前直接去取最后两项去比较,WA...心酸!后来看了下题目才发现,得看到临界点0,15,发现这题目很简单!直接做就是了!

下面给出AC代码:

1 #include 
2 using namespace std; 3 int main() 4 { 5 int n,i; 6 int a[100]; 7 while(cin>>n) 8 { 9 for(i=1;i<=n;i++)10 cin>>a[i];11 if(n==1&&a[n]!=15&&a[n]!=0)12 cout<<-1<
a[n-1])18 cout<<"UP"<

D-------------------------------------------------------------------------------------------

题目链接:

分析:细想只有两种模式,一种brbrbr... 另一种rbrbrb... 只需要统计这两种模式下,需要的两种操作数中最小的一个,即是答案。

下面给出AC代码:

1 #include 
2 using namespace std; 3 const int MAXN = 100005; 4 char a[MAXN]; 5 int main() 6 { 7 int n; 8 while(cin>>n) 9 {10 scanf("%s",a);11 int m = 0;12 int t=0;13 int u=0;14 int v=0;15 for(int i=0; i

E-------------------------------------------------------------------------------------------

题目链接:
分析:

威佐夫博弈(Wythoff Game):有两堆各若干个物品,两个人轮流从某一堆或同时从两堆中取同样多的物品,规定每次至少取一个,多者不限,最后取光者得胜。

如果甲面对(0,0),那么甲已经输了,这种局势我们称为奇异局势。前几个奇异局势是:(0,0)、(1,2)、(3,5)、(4,7)、(6,10).可以看出,a0=b0=0,ak是未在前面出现过的最小自然数,而 bk=ak+k.

    那么任给一个局势(a,b),怎样判断它是不是奇异局势呢?我们有如下公式:

    ak =[k(1+√5)/2],bk= ak + k  (k=0,1,2,...,n 方括号表示取整函数)

奇妙的是其中出现了黄金分割数(1+√5)/2 = 1。618...,因此,由ak,bk组成的矩形近似为黄金矩形,由于2/(1+√5)=(√5-1)/2,可以先求出j=[a(√5-1)/2],若a=[j(1+√5)/2],那么a = aj,bj = aj + j,若不等于,那么a = aj+1,bj+1 = aj+1+ j + 1,若都不是,那么就不是奇异局势。然后再按照上述法则进行,一定会遇到奇异局势。

下面给出AC代码:

 

1 #include 
2 #include
3 #include
4 using namespace std; 5 int main() 6 { 7 int a,b; 8 int k; 9 int t;10 int a1;11 while(~scanf("%d%d",&a,&b))12 {13 if(a>b)14 {15 t=a;16 a=b;17 b=t;18 }19 k=b-a;20 a1=(int)((double)(sqrt(5.0)+1)/2*k);21 if(a1==a)22 printf("0\n");23 else printf("1\n");24 }25 return 0;26 }

 

 

 

你可能感兴趣的文章
向html当中插入数据
查看>>
python的单元测试unittest(一)
查看>>
ethereumjs/ethereumjs-vm-2-API文档
查看>>
null值作为参数的重载问题
查看>>
layui框架遇到时间控件在搜索之后再次点击出现异常的问题
查看>>
php7安装
查看>>
转:要么滚回家里去,要么就拼
查看>>
iOS边练边学--介绍布局的三种方法
查看>>
hibernate
查看>>
PHP + NGINX 控制视频文件播放,并防止文件下载
查看>>
改变linux终端颜色
查看>>
Spring架构简单描述
查看>>
Static用法
查看>>
vs2008工程配置
查看>>
1082: 敲7(多实例测试)
查看>>
ADMemberShip 尝试
查看>>
数据库实例创建好后,用plsql登录居然提示ora-12526监听程序:所有适用例程都处于受限模式的问题...
查看>>
【BZOJ4025】二分图
查看>>
leetcode-same tree
查看>>
通过AOP自定义注解实现日志管理
查看>>