牛客网NOIP赛前集训营-普及组

 第一场:

A-绩点

题目描述

小A刚考完大学考试。现在已经出了n门课的成绩,他想自己先算一下这些课的绩点是多少。设第i门课的他拿到的绩点是gpai,而这门课的学分是sci,那么他的总绩点用下面的公式计算:
牛客网NOIP赛前集训营-普及组,
换言之,设S为sci的和,T为gpai与sci的乘积的和。那么小A的绩点就是T除以S的值。

输入描述:

第一行一个整数n。
接下来n行,每行两个数gpai和sci。

输出描述:

输出一行一个实数,表示小A的绩点。输出四舍五入保留1位小数。
示例1

输入

3
3.7 2
4.0 2
3.7 5

输出

3.8

备注:

总共有5个数据点:
第1个数据点,满足所有学科得到的gpa都相同。
第2个数据点,满足n=3。
第3个数据点,满足所有学科的sc值都相同。
对于所有数据点,都满足n<=50, gpai等于3.3, 3.7或4.0。sci为不超过5,不小于1的整数。
解题思路:简单套公式即可。
AC代码:
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int main(){
 4     int n;double gpa,sc,m1,m2;
 5     while(cin>>n){
 6         m1=m2=0;
 7         while(n--){
 8             cin>>gpa>>sc;
 9             m1+=gpa*sc;
10             m2+=sc;
11         }
12         printf("%.1f
",m1/m2);
13     }
14     return 0;
15 }

B-巨大的棋盘

题目描述

小A站在一个巨大的棋盘上。这个棋盘可以看成是一个网格图。这个网格图的大小为n*m。左上角坐标为(1,1),右下角坐标为(n,m)。这个棋盘很特别,他每行每列都是一个环。具体来说,当小A站在第一行,他往上走的时候,他会走到第n行,站在第n行往下走会走到第一行。对于第一列和第m列类似。小A在棋盘上可以上下左右走,假设他站在位置(i,j),向上走,会走到(i-1,j),向下回到(i+1,j),向左到(i,j-1),向右到(i,j+1)。注意由于棋盘是循环的,他不会走出这个棋盘。
现在小A有一个固定的行走序列S,代表他每一步走的方向,U代表向上,D代表向下,L代表向左,R代表向右。比如小A一开始在(1,1),棋盘大小为3*4。行走序列为UULRD。那么他会依次经过(3,1),(2,1),(2,4),(2,1),(3,1)。但小A觉得只走一遍S太无聊,因此他会重复走这个序列T次。比如上面的例子,当T=2时,真正的行走序列为UULRDUULRD。
小A有q个备选的起点位置。他一开始先给定你棋盘大小与行走序列,对于每个起点位置,他想知道,他沿着序列走,最终会走到哪个位置停下。

输入描述:

第一行三个整数n,m,T。
接下来一行一个字符串S,代表行走序列。注意行走序列在真实走的时候要重复T次。
接下来一个整数q。
接下来q行,每行两个整数x,y,代表小A的一个备选起点。

输出描述:

输出q行,每行两个整数,输出对于这个起点,最后的终点是哪里。
示例1

输入

3 6 4
DUUUDLLLLR
3
3 2
2 5
1 4

输出

2 2
1 5
3 4

备注:

20%: |S| * T <= 10^6, q = 1
40%: |S| * T <= 10^6, q <= 10^5
60%: |S|, T <= 10^5, q <= 10^5
100%: 1 <= T,n,m <= 10^9, 1 <= x <= n, 1 <= y <= m. 1<= q, |S| <= 10^5
其中|S|代表S的长度。
解题思路:简单模拟一下即可推出答案!!!
AC代码:
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 const int maxn=1e5+5;char str[maxn];
 4 int main(){
 5     long long n,m,t,q,x,y,_x,_y;
 6     while(cin>>n>>m>>t){
 7         cin>>str>>q;_x=_y=0;
 8         for(int i=0;str[i]!='