ECJTUACM16 Winter vacation training #5 题解&源码
A-------------------------------------------------------------------------------------------
题目链接:http://codeforces.com/problemset/problem/714/A
解题思路:
【题意】
Sonya每天只有[l1,r1]时间段内空闲,且在k时刻,她要打扮而不能够见Filya
Filya每天[l2,r2]时间段内空闲
问他们俩每天有多少时间能够在一起
【类型】 区间交 【分析】
显然,要求他们俩每天有多少时间在一起
其实就是求两区间的交集
那无外乎就是对两区间的位置关系进行分析
,。当然还有几个图这里就不一一列举了,主要就是找到两个的
相交区间,然后判断k是否在这个区间中,在的话减一;
这道题要用long long,否则会超!
下面给出AC代码:
1 #include <bits/stdc++.h>
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<<endl;
15 continue;
16 }
17 if(k>=maxn&&k<=minn)
18 ans--;
19 cout<<ans<<endl;
20 }
21 return 0;
22 }
B-------------------------------------------------------------------------------------
题目链接:http://codeforces.com/problemset/problem/716/A
题目大意:
给你一个N(N<=100000)个字母敲击的时间a[i](a[i]<=109),如果在M时间内没有敲击那么屏幕就清零,否则屏幕上就多一个字母,问最后屏幕剩下几个字母。
打下下一个字母的时候,如果和之前字母打下的时间不超过k的话,则保留前面的继续打,如果超过了,则前面的字母全部消失,只留下这一个字母。
下面给出AC代码:
1 #include <bits/stdc++.h>
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<n;i++)
10 scanf("%d",&a[i]);
11 int ans=1;
12 for(int i=0;i<n-1;i++)
13 {
14 if(a[i+1]-a[i]<=t)
15 ans++;
16 else ans=1;
17 }
18 printf("%dn",ans);
19 }
20 return 0;
21 }
C----------------------------------------------------------------------------------------------
题目链接:http://codeforces.com/problemset/problem/719/A
分析:当时这题还懵了一阵子,之前好像比赛写过,之前直接去取最后两项去比较,WA...心酸!后来看了下题目才发现,得看到临界点0,15,发现这题目很简单!直接做就是了!
下面给出AC代码:
1 #include <bits/stdc++.h>
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<<endl;
13 else if(a[n]==15)
14 cout<<"DOWN"<<endl;
15 else if(a[n]==0)
16 cout<<"UP"<<endl;
17 else if(a[n]<15&&a[n]>a[n-1])
18 cout<<"UP"<<endl;
19 else if(a[n]<15&&a[n]<a[n-1])
20 cout<<"DOWN"<<endl;
21 }
22 return 0;
23 }
D-------------------------------------------------------------------------------------------
题目链接:http://codeforces.com/problemset/problem/719/B
分析:细想只有两种模式,一种brbrbr... 另一种rbrbrb... 只需要统计这两种模式下,需要的两种操作数中最小的一个,即是答案。
下面给出AC代码:
1 #include <bits/stdc++.h>
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<n; i++)
16 {
17 if(i%2==0)
18 {
19 if(a[i]=='r')
20 m++;
21 if(a[i]=='b')
22 t++;
23 }
24 else
25 {
26 if(a[i]=='r')
27 u++;
28 if(a[i]=='b')
29 v++;
30 }
31 }
32 int x=max(t,u);
33 int y=max(m,v);
34 int z=min(x,y);
35 printf("%dn",z);
36 }
37 return 0;
38 }
E-------------------------------------------------------------------------------------------
题目链接:http://poj.org/problem?id=1067
分析:
威佐夫博弈
威佐夫博弈(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 <iostream>
2 #include <cmath>
3 #include <stdio.h>
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("0n");
23 else printf("1n");
24 }
25 return 0;
26 }
- CSS魔法堂:再次认识font
- 浅谈ASP.NET客户端回调
- Hadoop(一)之初识大数据与Hadoop
- 来玩Play框架02 响应
- 来玩Play框架01 简介
- spring cloud:config-server中@RefreshScope的"陷阱"
- JavaWeb(六)之MVC与三层架构设计
- 纸上谈兵: 最短路径与贪婪
- Java魔法堂:枚举类型详解
- 机器学习笔记(5):多类逻辑回归-手动添加隐藏层
- JavaWeb(五)之JSTL标签库
- spring cloud:Edgware.RELEASE版本中zuul回退方法的变化
- js中几种实用的跨域方法原理详解
- spring cloud:Edgware.RELEASE版本hystrix超时新坑
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法