牛客网NOIP赛前集训营-普及组
第一场:
A-绩点
题目描述
输入描述:
输出描述:
输出一行一个实数,表示小A的绩点。输出四舍五入保留1位小数。
输入例子:
3
3.7 2
4.0 2
3.7 5
输出例子:
3.8
-->
输入
3
3.7 2
4.0 2
3.7 5
输出
3.8
备注:
#include<bits/stdc++.h>
using namespace std;
int main(){
int n;double gpa,sc,m1,m2;
while(cin>>n){
m1=m2=;
while(n--){
cin>>gpa>>sc;
m1+=gpa*sc;
m2+=sc;
}
printf("%.1f\n",m1/m2);
}
return ;
}
B-巨大的棋盘
题目描述
输入描述:
第一行三个整数n,m,T。
接下来一行一个字符串S,代表行走序列。注意行走序列在真实走的时候要重复T次。
接下来一个整数q。
接下来q行,每行两个整数x,y,代表小A的一个备选起点。
输出描述:
输出q行,每行两个整数,输出对于这个起点,最后的终点是哪里。
输入例子:
3 6 4
DUUUDLLLLR
3
3 2
2 5
1 4
输出例子:
2 2
1 5
3 4
-->
输入
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代码:
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+;char str[maxn];
int main(){
long long n,m,t,q,x,y,_x,_y;
while(cin>>n>>m>>t){
cin>>str>>q;_x=_y=;
for(int i=;str[i]!='\0';++i){
if(str[i]=='D')_x++;
else if(str[i]=='U')_x--;
else if(str[i]=='L')_y--;
else _y++;
}
_x*=t,_y*=t;
while(q--){
cin>>x>>y;
x+=_x,y+=_y;
x%=n,y%=m;
while(x<=)x+=n;
while(y<=)y+=m;
cout<<x<<' '<<y<<endl;
}
}
return ;
}
第二场:
A-你好诶加币
题目描述
保证输入的a和b在long long范围之内,即满足
-9223372036854775808 <= a, b <= 9223372036854775807
计算a+b的值,即这两个数字的和。
如果a+b在long long范围之内,即满足
-9223372036854775808 <= a + b <= 9223372036854775807
那么输出一行一个整数表示a+b的结果。
如果a+b不在long long范围之内,即越界了,那么输出"hello, %lld\n",包含引号。
具体可以参见样例。
输入描述:
输入只有一行,包含用空格分开的两个整数,表示a和b。
输出描述:
如果a+b在long long范围之内,输出一行一个整数,表示a+b的结果;否则输出"hello, %lld\n",包含引号。
输入例子:
-9223372036854775808 9223372036854775807
输出例子:
-1
-->
输入
-9223372036854775808 9223372036854775807
输出
-1
输入
9223372036854775807 1
输出
"hello, %lld\n"
备注:
正确计算a+b可以得到50分
正确输出"hello, %lld\n"也可以得到50分
解题思路:java大数简单判断或者C++也可以判断溢出的情况。
AC之java代码:
import java.util.Scanner;
import java.math.BigInteger;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
BigInteger c = new BigInteger("9223372036854775807");
BigInteger d = new BigInteger("-9223372036854775808");
while(scan.hasNext()){
BigInteger a = scan.nextBigInteger();
BigInteger b = scan.nextBigInteger();
a = a.add(b);
if(a.compareTo(d)==-1||a.compareTo(c)==1)
System.out.println("\"hello, %lld\\n\"");
else System.out.println(a);
}
}
}
AC之C++代码:溢出的两种情况:①a>0,b>0,a+b<0(正向最多加到-2即小于0);②a<0,b<0,a+b>=0;(反向最多减到0)
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;LL a,b;
int main(){
while(cin>>a>>b){
if((a>&&b>&&a+b<)||(a<&&b<&&a+b>=))cout<<"\"hello, %lld\\n\""<<endl;
else cout<<(a+b)<<endl;
}
return ;
}
B-最后一次
题目描述
输入一个n,输出小于等于n最大的质数。
输入描述:
输入一个整数n
输出描述:
输出小于等于n的最大的质数
输入例子:
2
输出例子:
2
-->
输入
2
输出
2
输入
100
输出
97
备注:
对于所有数据: 2 <= n <= 1000000000000
30分: n <= 100000
70分: n <= 1000000000
解题思路:找不大于n的最近一个素数,简单暴力一下即可。
AC代码:
#include<iostream>
#include<algorithm>
#include<cstdio>
#include<string.h>
using namespace std;
typedef long long LL;LL n;
bool is_prime(LL n){
for(LL i=;i*i<=n;++i)
if(n%i==)return false;
return true;
}
int main(){
while(~scanf("%lld",&n)){
for(LL i=n;i>;--i)
if(is_prime(i)){printf("%lld\n",i);break;}
}
return ;
}
第三场:
A-十七边形
题目描述
1 <= r <= 10000
输入描述:
输入一行一个整数,表示半径r。
输出描述:
输出一行一个实数,表示最大的内接十七边形的面积。
四舍五入保留6位小数。
输入例子:
10000
输出例子:
307055416.259080
-->
输入
10000
输出
307055416.259080
解题思路:圆内接十七边形得到其最大面积必定为正十七边形的面积,简单套个公式即可。
AC代码:
#include<bits/stdc++.h>
using namespace std;
const double pi=acos(-1.0);
int main(){
double r;
while(~scanf("%lf",&r)){
printf("%.6f\n",0.5*sin(*pi/17.0)*r*r*);
}
return ;
}
第四场:
A.新个税
题目描述
个税计算方法是这样的:
综合所得金额 - 新起征点5000元 = 应纳税所得额
其中 综合所得金额 就是税前收入,(你可以忽略五险一金,专项扣除等我没有提到的东西)
对于 应纳税所得额
1. 不超过3000元的部分,税率3%
2. 超过3000元至12000元的部分,税率10%
3. 超过12000元至25000元的部分,税率20%
4. 超过25000元至35000元的部分,税率25%
5. 超过35000元至55000元的部分,税率30%
6. 超过55000元至80000元的部分,税率35%
7. 超过80000元的部分,税率45%
税前收入 - 个人所得税 = 税后收入
虽然个人所得税法没有写明,但是我相信对于税前收入5000以下的人,是可以不交个人所得税的,当然也不会受到国家的补助。(税不会是负数)
存在7组数据为5000, 8000, 17000, 30000, 40000, 60000, 85000
输入保证 2400 <= 税前收入 <= 240000
输入描述:
输入一行一个整数表示税前收入
输出描述:
输出一行一个整数表示税后收入
输入例子:
20000
输出例子:
18410
-->
输入
20000
输出
18410
说明
应纳税所得额为15000,其中
有3000落在第一部分,有9000落在第二部分,有3000落在第三部分。
个人所得税 = 3000 * 3% + 9000 * 10% + 3000 * 20% = 90 + 900 + 600 = 1590
所以税后收入是18410。
解题思路:水过!
AC代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
int main(){
int n,m,tot;
while(cin>>n){
if(n<=)cout<<n<<endl;//不用缴税
else{
m=n-;tot=m;
if(m<=)tot-=m/*;
else if(m<=)tot-=+(m/-);
else if(m<=)tot-=+(m/-)*;
else if(m<=)tot-=+(m/-)*;
else if(m<=)tot-=+(m/-)*;
else if(m<=)tot-=+(m/-)*;
else tot-=+(m/-)*;
cout<<tot+<<endl;
}
}
return ;
}
B.二分之一
题目描述
输入描述:
输入一行一个整数n。
输出描述:
输出0.5的n次方的精确值。
输入例子:
2
输出例子:
0.25
-->
输入
2
输出
0.25
输入
77
输出
0.00000000000000000000000661744490042422139897126953655970282852649688720703125
说明
精确值
解题思路:java水过!
AC代码:
import java.math.BigDecimal;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
BigDecimal bd = new BigDecimal("0.5");
while(scan.hasNext()){
BigDecimal result = bd.pow(scan.nextInt());
//stripTrailingZeros()的使用方法:返回数值上等于此小数,但从该表示形式移除所有尾部零的 BigDecimal。
//toPlainString()的使用方法:返回不带指数字段的此 BigDecimal的字符串表示形式。
String obj = result.stripTrailingZeros().toPlainString();
System.out.println(obj);
}
}
}
第五场:
A.体积数
题目描述
可怜把所有能被表示成 ad(其中 a,d 都是正整数,d ≥ 2)的正整数定义为体积数。举例来说,小于等于 10 的体积数有 4 个,分别为 1,4,8,9。
现在可怜想让你计算小于等于 n 的体积数有多少个。
输入描述:
输入一行一个整数 n。
对于30%的数据,n ≤ 100。对于60%的数据,n ≤ 10^5。
对于100%的数据,1 ≤ n ≤ 10^7。
输出描述:
输出一行一个整数表示答案。
输入例子:
10
输出例子:
4
-->
输入
10
输出
4
说明
小于等于 10 的体积数有 1,4,8,9。
输入
100
输出
13
说明
小于等于 100 的体积数有 1,4,8,9,16,25,27,32,36,49,64,81,100。
解题思路:简单暴力+前缀和即可。
AC代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const LL maxn=1e7+;
int n,cnt[maxn],ans[maxn];
int main(){
memset(cnt,,sizeof(cnt));cnt[]=;
for(LL i=;i*i<maxn;++i)
for(LL j=i*i;j<maxn;j*=i)
cnt[j]=;
for(LL i=;i<maxn;++i)ans[i]=ans[i-]+cnt[i];
while(cin>>n){cout<<ans[n]<<endl;}
return ;
}
第六场:
A.金币
题目描述
第1天,骑士收到1枚金币;之后4天(第2,3,4,5天),每天收到2枚金币;之后9天(第6-14天),每天收到3枚金币;之后16天(第15-30天),每天收到4枚金币……;这种工资发放模式会一直这样延续下去:当连续N^2天每天收到N枚金币后,骑士会在之后的连续(N+1)^2天里,每天收到N+1枚金币。
请计算在第l到r天里,骑士一共获得了多少金币。
输入描述:
一行两个整数l,r
输出描述:
一行表示答案
输入例子:
4 6
输出例子:
7
-->
输入
4 6
输出
7
说明
2+2+3=7
备注:
全部的输入数据满足:1 ≤ l ≤ r ≤ 10^10。
共10个测试点。对于第i(i=1..10)个测试点,r<=10^i。
解题思路:求前n项的平方和,公式为1+2+...+n=n(n+1)(2n+1)/6,然后简单做个查找即可。
AC代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
LL l,r,answer;vector<LL> vec;
int main(){
vec.clear();
for(LL i=;i<;++i)
vec.push_back(i*(i+)/*(*i+)/);
/*for(LL i=0;i<5;++i)
cout<<i<<' '<<vec[i]<<endl;*/
while(cin>>l>>r){
LL pos1=lower_bound(vec.begin(),vec.end(),l)-vec.begin();
LL pos2=lower_bound(vec.begin(),vec.end(),r)-vec.begin();
//cout<<pos1<<' '<<pos2<<endl;
if(pos1==pos2)answer=(r-l+)*(pos1+);
else {
answer=(vec[pos1]-l+)*(pos1+)+(r-vec[pos2-])*(pos2+);
for(LL i=pos1+;i<=pos2-;++i)answer+=(i+)*(vec[i]-vec[i-]);
}
cout<<answer<<endl;
}
return ;
}
第七场:
A.循环
题目描述
for (i = a; i op b; i += c);
输入描述:
输出描述:
输出一行一个整数代表步骤3执行的次数,如果循环永远不会终止(死循环)则输出-1
输入例子:
0 1 100 2
输出例子:
51
-->
输入
0 1 100 2
输出
51
说明
语句为for (i = 0; i <= 100; i += 2);
输入
0 3 100 3
输出
-1
说明
语句为for (i = 0; i != 100; i += 3), 循环永远不会结束。
解题思路:题目很简单,分情况讨论即可。
AC代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
LL a,op,b,c,answer;
int main(){
while(cin>>a>>op>>b>>c){
if(op==){
if(a<=b){
if(c>)answer=(b-a)/c+;
else answer=-;
}else answer=;
}
else if(op==){
if(a>=b){
if(c<)answer=(b-a)/c+;
else answer=-;
}else answer=;
}
else{
if(a<b){
if(c>)answer=((b-a)%c)?-:((b-a)/c);
else answer=-;
}else if(a==b)answer=;
else{
if(c<)answer=((b-a)%c)?-:((b-a)/c);
else answer=-;
}
}
cout<<answer<<endl;
}
return ;
}
B.供给和需求
题目描述
输入描述:
输入第一行N,M行描述买家的数量和商家的数量
接下来N行描述N个买家,第i行有两个参数a_i和b_i描述第i个买家
接下来M行描述M个商家,第i行有一个参数c_i描述第i个商家
输出描述:
输出一行一个整数代表供给量和需求量差的绝对值最小可能是多少。
输入例子:
2 2
10 1
20 2
2
1
输出例子:
0
-->
输入
2 2
10 1
20 2
2
1
输出
0
解题思路:典型的二分查找,通过查找价格来使供需逐渐达到平衡,同时更新供给量和需求量之差的绝对值的最小值。
AC代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int maxn=1e5+;
LL n,m,ans,l,r,mid,a[maxn],b[maxn],c[maxn];
bool check(LL x){
LL t1=,t2=;
for(LL i=;i<m;++i)t1+=x*c[i];//供
for(LL i=;i<n;++i)t2+=max(0LL,a[i]-x*b[i]);//需
ans=min(ans,abs(t1-t2));
return t1>t2;
}
int main(){
while(cin>>n>>m){
for(LL i=;i<n;++i)cin>>a[i]>>b[i];
for(LL i=;i<m;++i)cin>>c[i];
ans=LONG_LONG_MAX;l=,r=;//区间[1,100000]二分找价格x
while(l<=r){
mid=(l+r)>>;
if(check(mid))r=mid-;//供大于求,x太大-->左边找
else l=mid+;//供不应求,x太小-->右边找
}
cout<<ans<<endl;
}
return ;
}
牛客网NOIP赛前集训营-普及组的更多相关文章
- 牛客网NOIP赛前集训营-普及组(第二场)和 牛客网NOIP赛前集训营-提高组(第二场)解题报告
目录 牛客网NOIP赛前集训营-普及组(第二场) A 你好诶加币 B 最后一次 C 选择颜色 D 合法括号序列 牛客网NOIP赛前集训营-提高组(第二场) A 方差 B 分糖果 C 集合划分 牛客网N ...
- [牛客网NOIP赛前集训营-普及组(第二场)]D-合法括号序列
链接:https://www.nowcoder.com/acm/contest/165/D来源:牛客网 合法括号序列 键盘上有左括号(,右括号),和退格键-,共三个键. 牛牛希望按键n次,使得输入的字 ...
- 牛客网NOIP赛前集训营-普及组(第七场)
链接:C 来源:牛客网 牛牛的同学给牛牛表演了一个读心术:牛牛先任意选定一个非负整数,然后进行N次操作:每次操作前,假设牛牛当前的数是a,那么这个操作可能是a = a + x, 或者a = a * x ...
- 牛客网NOIP赛前集训营-普及组(第一场)
前三题略 T4: 题目描述 小A有n个长度都是L的字符串.这些字符串只包含前8个小写字符,'a'~'h'.但这些字符串非常的混乱,它们几乎长得互不相同.小A想通过一些规则,让它们长得尽可能相同.小A现 ...
- Nowcoder | [题解-N165]牛客网NOIP赛前集训营-普及组(第二场)
啊...表示一大早还没睡醒就开始打比赛(开始前一分钟的我还在桌子上趴着休眠)...表示题目思路清奇(尤其C题)...但是我还是太蒻了...\(D\)题暴力都没打...题解正式开始之前先\(\%\)一下 ...
- 牛客网NOIP赛前集训营-普及组(第一场)C 括号
括号 思路: dp 状态:dp[i][j]表示到i位置为止未匹配的 '(' 个数为j的方案数 状态转移: 如果s[i] == '(' dp[i][j] = dp[i-1][j] + dp[i-1][j ...
- 牛客网NOIP赛前集训营-普及组(第二场)
T1 牛牛刚学习了输入输出,他遇到了一道这样的题目. 输入2个整数a和b 保证输入的a和b在long long范围之内,即满足 -9223372036854775808 <= a, b < ...
- 牛客网 NOIP赛前集训营-普及组(第四场)C--部分和 (高维前缀和)
传送门 解题思路 高维前缀和模板题.首先,求前缀和有两种方式,比如说对于求二维前缀和来说. 第一种 : for(int i=1;i<=n;i++) for(int j=1;j<=n;j++ ...
- 牛客网NOIP赛前集训营-提高组(第四场)游记
牛客网NOIP赛前集训营-提高组(第四场)游记 动态点分治 题目大意: \(T(t\le10000)\)组询问,求\([l,r]\)中\(k(l,r,k<2^{63})\)的非负整数次幂的数的个 ...
随机推荐
- android控件之间事件传递
public boolean dispatchTouchEvent(MotionEvent ev){} 用于事件的分发.Android中全部的事件都必须经过这种方法的分发.然后决定是自身消费当前事件还 ...
- Mac版的idea部分按钮失效的解决方案
问题描述:调整了一下idea中jdk的路径,之后idea就无法打开新项目了,最好发现idea中的顶部菜单全部失效 解决过程: 1.把idea的jdk的路径调回去,无效 2.重启idea,无效 3.重启 ...
- WIFI的通信知识整理
这两天在解决wifi芯片的一个底层问题,看了很多资料,下面做一个简要记录: 1.信号调制的基本原理 链接:http://wenku.baidu.com/link?url=3K6Z5fBIN20lPzB ...
- hihocoder 1015 KMP(找多个位置的 【*模板】)
#1015 : KMP算法 时间限制:1000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho是一对好朋友,出生在信息化社会的他们对编程产生了莫大的兴趣,他们约定好互相帮助,在 ...
- Centos7.2——自定义系统服务
前言 顾明思议,自己创建系统服务,在上一篇博文中写道了,这里就详细写下~ 步骤 我是一段美丽的用户分割的废话~ 进入到系统服务目录 ··· cd /lib/systemd/system ··· 创建服 ...
- maven实战(3)-- dependency <classifier>的使用
Maven 的classifier的作用 转自:http://blog.csdn.net/lovingprince/article/details/5894459 直接看一个例子,maven中要引入j ...
- CollectionView网格布局
说句老实话,UICollectionView真的太强大了,而且要掌握高级部分是相当困难的.至少笔者是这么认为的,如果觉得自己比较厉害,可以轻而易举地掌握UICollectionView的使用的,希望可 ...
- 关于return
return ; 相当于执行完跳转url后停止,return无返回值仅作停止作用,是指停止当前方法,是方法的终点 return null ; 代表引用类型的空值
- Android Studio 1.5.1
Android Studio 1.5.1 December 3rd, 2015: For information on what's new in 1.5.1, see the release ann ...
- mac下载模块时报错OSError: [Errno 13] Permission denied: '/Library/Python/2.7/site-packages/chardet'
原文地址:https://www.cnblogs.com/liangyan-1989/p/8143129.html 安装完pip后,使用pip install selenium报以下错 OSError ...