1. 程式人生 > >1024 - 河南省多校連萌(三)(寫了的題)

1024 - 河南省多校連萌(三)(寫了的題)

std mar esp 字符串 cstring int 記錄 1.0 frame

問題 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)開始繼續移動。

現在給出nm(x1,y1)(x2,y2)v,能否通過編程回答第t秒子彈的坐標?

輸入

多組測試數據,請處理到文件結束。

第一行是兩個正整數nm

第二行是六個正整數x1y1x2y2vt

0<n,m<1000000<n,m<100000

0<x1y1x2y2vt<1000000<x1,y1,x2,y2,v,t<100000

輸出

對於每組測試數據請在一行輸出第t秒子彈的坐標xy,中間用一個空格隔開。

結果四舍五入保留到小數點後一位

樣例輸入

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 的問題嗎?

輸入

第一行一個數 T1T101≤T≤10),表示 T 組測試數據

第二行一個數 n1n1051≤n≤105 ),表示有 n 位選手

接下來 n 行,每行一個數 a1a1081≤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 對玄機的敬佩值都會分別增加 21,QAQ 記錄了自己每天看的動漫名稱 由 A ~ Z 26個字母代替,J :代表 君臨天下,T 代表 : 天行九歌。

技術分享

有一天,ORZ 突發奇想想幫 QAQ 測試一下 L ~ R 天裏 QAQ 對玄機的敬佩值增加了多少,看 QAQ 能否清楚記得?

問題來了 ORZ 怎麽知道 QAQ 回答的對錯呢 ?所以 ORZ 想請你幫忙算出 L ~ R 天裏 QAQ 對玄機的敬佩值增加的正確答案。

輸入

第一行一個 T1T101≤T≤10)代表有 T 組測試數據

第二行兩個數 n ,m (1n,m1051≤n,m≤105),分別代表看了 n 天動漫,和 m 次查詢

接下來 n 行一個 A ~ Z 的字母,表示第 i 天看的動漫名稱

接下來 m 行,每行兩個數 L,R (1LRn1≤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

題目描述

有一個由01組成的字符串,它好長呀--------一望無際

恩,說正題,小ho的數學不太好,雖然是學計算機的但是看見01也是很頭疼的,

現在他的老師想讓他計算出來包含K1的串有多少個-----呀,頭要炸了!!!

小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;
}
 

 

1024 - 河南省多校連萌(三)(寫了的題)