链接:https://www.nowcoder.com/acm/contest/115/A
来源:牛客网
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld
题目描述
怎么可能嘛!当我是傻子吗!#?%!“”@……
于是我就去玩了,然后我果然成功证明,我是正确的,这破游戏,真的很无聊.
0 给出两个100以内的正整数做加法
1 给出一个字符串问有多少个字符(字符串长度不超过100000)
输入描述:
第一行输入一个整数T(表示样例个数)
接下来T组样例
每组样例先输入一个整数N(0或者1)
若N为0,则输入两个整数a,b(0<=a,b<=100)
若N为1,则输入一个字符串s
输出描述:
输出T行
每行输出一个样例对应的结果
输入
2 0 1 1 1 aa
输出
2 2
签到题,就不多说了。
1 #include <iostream> 2 #include <string> 3 4 using namespace std; 5 6 int main(){ 7 int n; 8 cin>>n; 9 while(n--){ 10 int m; 11 cin>>m; 12 if(m==0){ 13 int x,y; 14 cin>>x>>y; 15 cout<<x+y<<endl; 16 }else{ 17 string s; 18 cin>>s; 19 cout<<s.length()<<endl; 20 } 21 } 22 23 return 0; 24 }
链接:https://www.nowcoder.com/acm/contest/115/B
来源:牛客网
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld
题目描述
问:从出生那一天开始起,到今天2018-04-21为止(包括出生日期和今天),有多少天,年月日都不包含数字4?
输入描述:
第一行输入一个整数T(表示样例个数)
接下来T组样例
每个样例一行,包含一个字符串“yyyy-mm-dd”(1990<=yyyy<=2018)
题目保证测试数据的正确性
输出描述:
输出题意要求的天数
输入
1 1999-09-09
输出
5020
这道题,做起来其实并不难,要的是细心,要不然会出现各种bug。
所以这题三层for就可以解决,只是条件一定要想好。
不然条理不清晰,就很难做。
1 #include <iostream> 2 3 using namespace std; 4 5 int vis[29]={365,365,366,365,365,365,366,365,365,365,366,365,365,365,366,365,365,365,366,365,365,365,366,365,365,365,366,365,365}; 6 int month1[12]={31,29,31,30,31,30,31,31,30,31,30,31}; 7 int month2[12]={31,28,31,30,31,30,31,31,30,31,30,31}; 8 int n; 9 int main(){ 10 cin>>n; 11 while(n--){ 12 int sum =0,ans = 0,cnt=0; 13 int x,y,z; 14 char a,b; 15 cin>>x>>a>>y>>b>>z; 16 for(int i=x;i<=2018;i++){ 17 if(i%10==4) 18 continue; 19 bool prime = false; 20 if(vis[i-1990]==366){ 21 prime = true; 22 } 23 for(int j=(i==x?y:1);j<=(i==2018?4:12);j++){ 24 if(j==4) continue; 25 for(int k=(i==x&&j==y?z:1);k<=(prime?month1[j-1]:month2[j-1]);k++){ 26 if(k==4||k==14||k==24){ 27 continue; 28 }else{ 29 sum++; 30 } 31 } 32 } 33 } 34 cout<<sum<<endl; 35 } 36 return 0; 37 }
链接:https://www.nowcoder.com/acm/contest/115/C
来源:牛客网
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld
题目描述
输入描述:
第一行输入一个整数T(表示样例个数)
接下来T组样例
每个样例一行,包括三个浮点数 L V1 V2(0<L,V1,V2<=10000)
输出描述:
输出T行
每个测试用例输出一行对应的结果
L1 L2(一个空格隔开,结果保留6位小数)
输入
1 100 1000 10
输出
0.049000 1.000000
这就纯粹是个物理题目了,先求出时间,然后就都出来了,
就是注意精度问题就行。
1 #include <iostream> 2 using namespace std; 3 int T; 4 int main(){ 5 cin>>T; 6 while(T--){ 7 double L,v1,v2; 8 cin>>L>>v1>>v2; 9 double t = L/v1; 10 double x = 0.5*9.8*t*t; 11 double XX = v2*t; 12 printf("%.6f %.6f ",x,XX); 13 } 14 return 0; 15 }
链接:https://www.nowcoder.com/acm/contest/115/D
来源:牛客网
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld
题目描述
有这么一天双休日的中午。
我刚把我衣服扔进了洗衣机,然后拿了个小板凳坐在旁边发呆。
然后突然想到这么无聊干脆玩会阴阳师好了,于是从斗篷帽子里掏出我的手机登录了阴阳师。
看着更新公告里写着的新SSR式神一目连感叹了一下:我要是能有个一目连该多好啊
看了一眼我家帅气的扛把子咕咕,正准备肝困难的时候发现庭院里那一串灯笼里的调查问卷有蝴蝶在绕,于是点进去填了一波在最结尾写上了我当时的愿望:我想要一目连。
然后奖励了一个符,顺手就抽了。本来以为又是R卡,没想到手机震动了一下。
握草!!!一目连!!!!
当时我就激动的站了起来使劲看了一眼然后仰天大笑以及截图装逼。
输入描述:
第一行输入一个整数T(表示样例个数)
接下来T组样例
每个样例一行,包含三个连续的大写字母(A - S)
输出描述:
每个样例输出一行
升级到SSR所需的次数
输入
3 SSR SRR AAA
输出
0 19 6857
备注:
SRR升级到SSR的过程:
SRR -> SRS -> SSA ->SSB -> SSC -> ……->SSR 共19次
这就相当于十九进制的转换,最高只有S,然后把两个字符串转化成十进制的数,
在求差就行了。
1 #include <iostream> 2 #include <string> 3 4 using namespace std; 5 6 int main(){ 7 int n; 8 cin>>n; 9 while(n--){ 10 char a,b,c; 11 cin>>a>>b>>c; 12 int x = 'S'-a; 13 int y = 'S'-b; 14 int z = 'R'-c; 15 if(z<0){ 16 y--; 17 z+=19; 18 } 19 if(y<0){ 20 x--; 21 y+=19; 22 } 23 int sum = x*19*19+y*19+z; 24 cout<<sum<<endl; 25 } 26 return 0; 27 }
链接:https://www.nowcoder.com/acm/contest/115/E
来源:牛客网
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld
题目描述
根据用户的需求,有以下几个功能,需要你来实现:
(1)recv:收到一条好友消息,对于手动置顶好友的消息,将在“手动置顶好友列表”里置顶;对于其他好友的消息,将在“手动置顶好友列表”之下的消息列表里置顶,同时都需要显示该好友的消息总数。
(2)view:查看好友消息,将使该好友消息数变为0。
(3)up:手动置顶好友。
(4)down:取消手动置顶。
(5)delete:删除好友消息,这个操作将使该好友从消息列表中删除,同时取消对该好友的手动置顶(如果存在的话)。
假设初始消息列表为空,经过了一系列好友消息的操作之后,最终的消息列表将是怎么样的呢?
输入描述:
第一行输入一个整数T(表示样例个数)
接下来T组样例。
每组样例
第一行输入一个整数M,表示操作数(1≤M≤1000000);
接下来M行,
每行输入一个操作,由一个操作类型和一个好友id构成,之间以空格分开,操作类型如上面5个英文单词表示,
例如:“recv 123456”表示接收到id为123456的好友的一条消息,“delete 123456”表示在消息列表中删除 id 为123456的好友的消息记录。
为了简化问题,一开始消息列表为空并假设好友名字id由六位数字“唯一”标识(000000≤id≤999999),
题目保证输入数据的一致性。
输出描述:
每组样例,
输出最后的消息列表,自顶向下,每行输出一个:“好友id 消息数”。
每组样例后空一行。
输入
1 13 recv 000001 recv 000002 up 000002 view 000001 recv 000002 recv 000004 up 000004 up 000001 recv 000004 recv 000003 view 000001 view 000004 down 000002
输出
000004 0 000001 0 000003 1 000002 2
我本身感觉这题不难,但是比赛的时候看都没看这题,
以为很少人过就没看,结果补题的时候才发现,其实挺简单的。
就是判断好条件,剩下的用个结构体就行,然后加个CMP sort排序,
因为内存没那么大,所以可以选择直接用10000000的内存,或者自己自动分配,
我选择自动分配内存。
1 #include <bits/stdc++.h> 2 #define N 1000009 3 #define mem(a) memset(a,0,sizeof(a)) 4 using namespace std; 5 struct Node{ 6 int index; 7 int top; 8 int mess; 9 int uup; 10 bool is; 11 }; 12 Node node[N]; 13 bool cmp(Node a,Node b){ 14 if(a.top==b.top){ 15 return a.uup>b.uup; 16 } 17 return a.top>b.top; 18 } 19 int vis[N]; 20 int t,n; 21 int main(){ 22 cin>>t; 23 while(t--){ 24 mem(node); 25 memset(vis,-1,sizeof(vis)); 26 cin>>n; 27 int j=0; 28 for(int i=1;i<=n;i++){ 29 string s; 30 int m; 31 cin>>s>>m; 32 if(s=="recv"){ 33 if(vis[m]>=0){ 34 node[vis[m]].mess++; 35 node[vis[m]].uup = i; 36 }else{ 37 node[j].index = m; 38 node[j].uup = i; 39 node[j].mess++; 40 node[j].top = 0; 41 node[j].is = true; 42 vis[m] = j; 43 j++; 44 } 45 }else if(s=="view"){ 46 node[vis[m]].mess = 0; 47 }else if(s=="up"){ 48 node[vis[m]].top = 1; 49 }else if(s=="down"){ 50 node[vis[m]].top = 0; 51 }else{ 52 node[vis[m]].top = 0; 53 node[vis[m]].mess = 0; 54 node[vis[m]].uup = 0; 55 node[vis[m]].is = false; 56 vis[m] = -1; 57 } 58 } 59 sort(node,node+j,cmp); 60 for(int i=0;i<j;i++){ 61 if(node[i].is){ 62 printf("%06d ",node[i].index); 63 printf("%d ",node[i].mess); 64 } 65 } 66 cout<<endl; 67 } 68 return 0; 69 }
链接:https://www.nowcoder.com/acm/contest/115/F
来源:牛客网
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld
题目描述
告诉你Y的值,你能找出方程在0~100之间的解吗?
输入描述:
第一行输入一个正整数T(表示样例个数)
接下来T组样例
每组样例一行,输入一个实数Y
输出描述:
一行输出一个样例对应的结果,
输出方程在0~100之间的解,保留小数点后4位小数;如果不存在,输出 -1
输入
2 1 20180421
输出
-1 9.9993
这题其实一开始我想用二分做,但是我感觉精度为0.0001有点小,怕等下出bug就尴尬了,所以就
先在100个整数中找到了是不是在哪两个整数之间,然后再细分,也就100*1000,所以不会超时。
1 #include <iostream> 2 #define Max (double)201805052114 3 using namespace std; 4 5 double mat(double x){ 6 return 2018.00*x*x*x*x+21.0*x+5.0*x*x*x+5.0*x*x+14.0; 7 } 8 int main(){ 9 int t; 10 cin>>t; 11 while(t--){ 12 double n; 13 cin>>n; 14 if(n>Max||n<14){ 15 cout<<"-1"<<endl; 16 }else{ 17 bool prime = false; 18 for(double i=0;i<=100;i++){ 19 if(mat(i)>n){ 20 for(double k=i-1;k<i;k+=0.0001){ 21 if(mat(k)>n){ 22 double a=k-0.0001; 23 if(n-mat(a)>mat(k)-n) 24 printf("%.4f ",k); 25 else 26 printf("%.4f ",a); 27 28 prime = true; 29 break; 30 } 31 } 32 }else if(mat(i)==n){ 33 printf("%.4f ",i); 34 prime = true; 35 } 36 if(prime) 37 break; 38 } 39 } 40 41 42 43 } 44 45 return 0; 46 }
链接:https://www.nowcoder.com/acm/contest/115/G
来源:牛客网
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld
题目描述
输入描述:
第一行输入一个整数T(表示样例个数)
接下来T组样例
每组样例第一行输入一个整数N(表示有几项活动)
接下来N行,每行输入s,e,h,p 4个整数,分别代表一个活动的开始时间、结束时间、Happy值以及绩点数
0<=s<e<=24,1<=h,p<=100,1<=T,N<=20
输出描述:
输出T行
一行输出一个样例对应的结果
小Q在一天内所能获得的最大 Happy值 与 绩点数
输入
1 4 1 3 1 1 2 5 2 1 3 7 2 1 5 8 1 2
输出
3 3
说明
有两种方案
1)选择 第1、3两个活动,可以获得 Happy值 3 和 绩点数 2;
2)选择 第2、4两个活动,可以获得 Happy值 3 和 绩点数 3.
这题就是一路贪心,从开始时间最早的开始往后面走,
然后判断幸福值,幸福值相同的时候,就判断绩点值。
1 #include <iostream> 2 #include <algorithm> 3 #include <cstring> 4 #define mem(a) memset(a,0,sizeof(a)) 5 using namespace std; 6 7 struct Node{ 8 int st,en,ha,point; 9 }; 10 Node node[30]; 11 bool cmp(Node a, Node b){ 12 return a.st<b.st; 13 } 14 int happy[25],points[25]; 15 int main(){ 16 int t; 17 cin>>t; 18 while(t--){ 19 mem(happy); 20 mem(points); 21 int n; 22 cin>>n; 23 for(int i=0;i<n;i++){ 24 cin>>node[i].st>>node[i].en>>node[i].ha>>node[i].point; 25 } 26 sort(node,node+n,cmp); 27 for(int i=0;i<n;i++){ 28 for(int j=node[i].en;j<=24;j++){ 29 if(happy[j]<happy[node[i].st]+node[i].ha){ 30 happy[j] = happy[node[i].st]+node[i].ha; 31 points[j] = points[node[i].st]+node[i].point; 32 }else if(happy[j]==happy[node[i].st]+node[i].ha){ 33 points[j]=max(points[j],points[node[i].st]+node[i].point); 34 } 35 } 36 } 37 cout<<happy[24]<<" "<<points[24]<<endl; 38 } 39 return 0; 40 }
链接:https://www.nowcoder.com/acm/contest/115/H
来源:牛客网
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld
题目描述
输入描述:
第一行输入一个整数T(表示样例个数)
接下来T组样例
每组样例一行,输入一个整数N(0<=N<=1000000000)
输出描述:
输出T行
每一行输出N的阶乘 N!(由于这个数比较大,所以只要输出其对1000000007取膜的结果即可)
输入
2 0 1000000000
输出
1 698611116
这里用到的是分块打表,要不然肯定超限。
1 #include <iostream> 2 #include <vector> 3 #define mod 1000000007 4 #define ll long long int 5 using namespace std; 6 int T; 7 ll a[110]={1,682498929,491101308,76479948,723816384,67347853,27368307, 8 625544428,199888908,888050723,927880474,281863274,661224977,623534362, 9 970055531,261384175,195888993,66404266,547665832,109838563,933245637, 10 724691727,368925948,268838846,136026497,112390913,135498044,217544623, 11 419363534,500780548,668123525,128487469,30977140,522049725,309058615, 12 386027524,189239124,148528617,940567523,917084264,429277690,996164327, 13 358655417,568392357,780072518,462639908,275105629,909210595,99199382, 14 703397904,733333339,97830135,608823837,256141983,141827977,696628828, 15 637939935,811575797,848924691,131772368,724464507,272814771,326159309, 16 456152084,903466878,92255682,769795511,373745190,606241871,825871994, 17 957939114,435887178,852304035,663307737,375297772,217598709,624148346, 18 671734977,624500515,748510389,203191898,423951674,629786193,672850561, 19 814362881,823845496,116667533,256473217,627655552,245795606,586445753, 20 172114298,193781724,778983779,83868974,315103615,965785236,492741665, 21 377329025,847549272,698611116}; 22 int main(){ 23 cin>>T; 24 while(T--){ 25 ll x; 26 cin>>x; 27 ll w=x/10000000; 28 ll ans = a[w]; 29 for(int i=w*10000000+1;i<=x;i++) 30 ans=(ans*i)%mod; 31 cout<<ans%mod<<endl; 32 } 33 return 0; 34 }
链接:https://www.nowcoder.com/acm/contest/115/I
来源:牛客网
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld
题目描述
输入描述:
第一行输入一个整数T(表示样例个数)
接下来T组样例
每组样例一行,输入两个正整数a,b(0<a,b<=1e9)
输出描述:
输出T行
一行输出一个样例对应的结果
若结果可信,输出 Yes
否则,输出 No
输入
6 2 4 75 45 8 8 16 16 247 994 1000000000 1000000
输出
Yes Yes Yes No No Yes
备注:
每回合的K可能不同
这里一开始完全没有思路,之后发现可以同时开三次方,然后判断是否是整数来判断。
但是我个人觉得还是有问题的,
比如 1 8;
开三次方是可以达到2,但是好像完全达不到1 8这个时候。
1 #include <bits/stdc++.h> 2 #define ll long long int 3 using namespace std; 4 5 int main(){ 6 int t; 7 cin>>t; 8 while(t--){ 9 ll a,b; 10 cin>>a>>b; 11 ll sum = a*b; 12 float ans = pow(sum,1/3.0); 13 if(ans==(int)ans){ 14 cout<<"Yes"<<endl; 15 }else{ 16 cout<<"No"<<endl; 17 } 18 } 19 20 21 return 0; 22 }