1024 - 河南省多校连萌(三)(写了的题)
问题 B: Kick Ass Biu
时间限制: 1 Sec 内存限制: 128 MB提交: 113 解决: 13
题目描述
在玩Kick Ass的时候,可以发现子弹的发射与飞船的移动非常有趣。
假设屏幕是个n×mn×m(竖直为n
,水平为m
)的矩形,以矩形左下角为原点,水平方向为x
轴,向右为正方向,竖直方向为y
轴,像上为正方向,建立平面直角坐标系。你的飞船在(x1,y1)
点,射击目标在(x2,y2)
,你向目标发出了一发子弹,然而由于网页卡顿,这枚子弹并不会触碰到目标。所以,子弹将以每秒v
单位的速度继续前进,若子弹移动到屏幕边缘,将自动传送到另一边并继续移动。如:向右移动到(m,0)
则下一刻从(0,0)
开始继续移动,同理向上移动到(0,n)
则下一刻从(0,0)
开始继续移动。
现在给出n
、m
、(x1,y1)
、(x2,y2)
、v
,能否通过编程回答第t
秒子弹的坐标?
输入
多组测试数据,请处理到文件结束。
第一行是两个正整数n
,m
第二行是六个正整数x1
,y1
,x2
,y2
,v
,t
0<n,m<1000000<n,m<100000
0<x1,y1,x2,y2,v,t<1000000<x1,y1,x2,y2,v,t<100000
输出
对于每组测试数据请在一行输出第t
秒子弹的坐标x
,y
,中间用一个空格隔开。
结果四舍五入保留到小数点后一位
样例输入
3 3
1 1 1 2 1 1
3 3
1 1 1 2 1 2
3 3
1 1 1 2 1 3
样例输出
1.0 2.0
1.0 0.0
1.0 1.0
#include <stdio.h> #include <stdlib.h> #include <cmath> #include <cstring> #include <iostream> #include <algorithm> #include <queue> #include <vector> #include <stack> #include <map> #include <cmath> using namespace std; #define INF 0x3f3f3f3f #define N 100000 #define mid 1e-8 #define LL long long /********************************************************/ int main() { double x, y, x1, x2, y1, y2, v, t, dx, vx, vy, n, m; while(~scanf("%lf%lf", &n, &m)) { scanf("%lf%lf%lf%lf%lf%lf", &x1, &y1, &x2, &y2, &v, &t); dx=sqrt((x2-x1)*(x2-x1)+(y2-y1)*(y2-y1)); vx=(x2-x1)/dx*v; vy=(y2-y1)/dx*v; x=x1+vx*t; y=y1+vy*t; while(x<0.0||fabs(x-0.0)<=mid) { x+=m; } while(y<0.0||fabs(y-0.0)<=mid) { y+=n; } while(x>m||fabs(x-m)<=mid) { x-=m; } while(y>n||fabs(y-n)<=mid) { y-=n; } printf("%.1f %.1f\n", x, y); } return 0; }
问题 D: QAQ & ORZ 的签到题
时间限制: 1 Sec 内存限制: 128 MB提交: 834 解决: 204
题目描述
QAQ 的好朋友 ORZ,最近在做一个选拔节目的评委,对于每位选手 ORZ 想知道在这个选手以及这位选手前面的的选手中,得分最高和最低的选手的序号分别是多少....
ORZ 找了 QAQ 帮忙,但是 QAQ 最近在追火星情报局....所以你可以帮助 QAQ 解决 ORZ 的问题吗?
输入
第一行一个数 T
(1≤T≤101≤T≤10),表示 T
组测试数据
第二行一个数 n
(1≤n≤1051≤n≤105 ),表示有 n
位选手
接下来 n
行,每行一个数 a
(1≤a≤1081≤a≤108),表示第 i
位选手的得分,打分总是从第一位选手开始
输出
输出从 1 ~ n
位选手中 a[i]
,在 1 ~ i
之间的选手中得分最高和得分最低的选手的序号分别是多少
样例输入
1
3
1
2
3
样例输出
1 1 2 1 3 1
#include <stdio.h> #include <stdlib.h> #include <cmath> #include <cstring> #include <iostream> #include <algorithm> #include <queue> #include <vector> #include <stack> #include <map> #include <cmath> using namespace std; #define INF 0x3f3f3f3f #define N 100005 #define mid 1e-8 #define PI 3.1415926535898 #define LL long long /********************************************************/ int a[N], min1, max1, max2, min2; int main() { int T, n; scanf("%d", &T); while(T--) { scanf("%d", &n); for(int i=1;i<=n;i++) { scanf("%d", &a[i]); } min1=a[1]; max1=a[1]; max2=1; min2=1; for(int i=1;i<=n;i++) { if(a[i]>max1) { max1=a[i]; max2=i; } if(a[i]<min1) { min1=a[i]; min2=i; } printf("%d %d\n", max2, min2); } } return 0; }
问题 E: QAQ & 君临天下 || 天行九歌
时间限制: 1 Sec 内存限制: 128 MB提交: 730 解决: 222
题目描述
QAQ~生活之余喜欢看一些动漫,说到国产动漫,QAQ 最喜欢的就属玄机了,玄机出品的动漫都很赞的说,君临天下 和 天行九歌是 QAQ 最喜欢的两部动漫了,每次看完 QAQ 对玄机的敬佩值都会分别增加 2
与 1
,QAQ 记录了自己每天看的动漫名称 由 A ~ Z
26个字母代替,J
:代表 君临天下,T
代表 : 天行九歌。
有一天,ORZ 突发奇想想帮 QAQ 测试一下 L ~ R
天里 QAQ 对玄机的敬佩值增加了多少,看 QAQ 能否清楚记得?
问题来了 ORZ 怎么知道 QAQ 回答的对错呢 ?所以 ORZ 想请你帮忙算出 L ~ R
天里 QAQ 对玄机的敬佩值增加的正确答案。
输入
第一行一个 T
( 1≤T≤101≤T≤10)代表有 T
组测试数据
第二行两个数 n
,m
(1≤n,m≤1051≤n,m≤105),分别代表看了 n
天动漫,和 m
次查询
接下来 n
行一个 A ~ Z
的字母,表示第 i
天看的动漫名称
接下来 m
行,每行两个数 L
,R
(1≤L≤R≤n1≤L≤R≤n)
输出
对于每次查询,输出 L~R
天里,QAQ对玄机的敬佩值增加了多少
样例输入
1
3 3
J
A
T
1 1
1 2
2 3
样例输出
2
2
1
一开始我居然想用线段树、、、
#include <stdio.h> #include <stdlib.h> #include <cmath> #include <cstring> #include <iostream> #include <algorithm> #include <queue> #include <vector> #include <stack> #include <map> #include <cmath> using namespace std; #define INF 0x3f3f3f3f #define N 100000 #define LL long long /********************************************************/ int main() { int a[N], T, x, y, n, m; char ch; scanf("%d", &T); while(T--) { scanf("%d%d", &n, &m); a[0]=0; for(int i=1;i<=n;i++) { getchar(); scanf("%c", &ch); if(ch=='J') a[i]=a[i-1]+2; else if(ch=='T') a[i]=a[i-1]+1; else a[i]=a[i-1]; } for(int i=0;i<m;i++) { scanf("%d%d", &x, &y); printf("%d\n", a[y]-a[x-1]); } } return 0; }
问题 F: 小ho的01串
时间限制: 1 Sec 内存限制: 128 MB提交: 148 解决: 59
题目描述
有一个由0
和1
组成的字符串,它好长呀--------一望无际
恩,说正题,小ho的数学不太好,虽然是学计算机的但是看见0
和1
也是很头疼的,
现在他的老师想让他计算出来包含K
个1
的串有多少个-----呀,头要炸了!!!
小ho知道你的数学棒棒哒,所以来找你帮忙了。
输入
第一行是一个数K
。
第二行是一个字符串str
。
0 < |str| ≤ 106
输出
一个数S
,代表了满足条件的个数。
样例输入
2
101010
样例输出
6
#include <stdio.h> #include <stdlib.h> #include <cmath> #include <cstring> #include <iostream> #include <algorithm> #include <queue> #include <vector> #include <stack> #include <map> #include <cmath> using namespace std; #define INF 0x3f3f3f3f #define N 100000 #define mid 1e-8 #define LL long long /********************************************************/ int main() { int n, i, sum, k, vis[N]; char s[N]; scanf("%d", &k); n=0; scanf("%s", s); memset(vis, 0, sizeof(vis)); for(i=0; i<strlen(s); i++) { if(s[i]=='1') n++; else vis[n]++; } sum=0; for(i=k; i<=n; i++) { sum+=1+vis[i-k]+vis[i]+vis[i-k]*vis[i]; } printf("%d\n", sum); return 0; }