转送门
Problem A: junior97与The Flash
Time Limit: 1 Sec
Memory Limit: 128 MB
Description
NPS队首席代码手junior97是The Flash的big fan。
每天The Flash都要奔跑在城市中除暴安良(超级英雄真忙= =,还是做一条咸鱼好)。但是,跑步是需要消耗很多能量的,The Flash为了节省时间,想要一次性摄取除暴安良一天需要消耗的能量。在junior97强大的演算能力下,他帮助The Flash推算出了明天城市中哪个地点会出现事件(按照时间顺序给出,假设每个事件的发生时间不重叠),但是junior97懒得算The Flash需要跑的总路程了,他把这个问题抛给了cjcjcjcj和Zorro0302小弱鸡,Zorro0302和cjcjcjcj两脸懵逼,现在小弱鸡向各位大佬求助。
城市可以看作是一个边长为1的正n边形,事件只会发生在正n边形的每个顶点上,顶点编号按顺时针方向为1~n。
The Flash一开始在顶点1。为了节省能量,The Flash跑的是两点之间的最短距离。
(The Flash只要得到他需要跑的距离就能自动脑补出需要补充多少能量了)
Input
第一行一个数T(1<=T<=35),表示有T组数据,接下来T组数据的第一行有两个数n和m (3<=n<=20,1<=m<=1000),第二行有m个数,分别代表事件发生的地点(按时间顺序给出)。
Output
输出一个数,The Flash需要奔跑的最短距离(保留5位小数)
Sample Input
24 32 4 36 21 2
Sample Output
3.414211.00000
HINT
圆周率约等于3.141592653
本题中所有数据精确到小数点后5位即可
样例1:
A题--这题涉及的是余弦定理的应用。
详细可以看代码
#include
#include
#include
#define pi 3.141592653
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
int n,m,i,j,a[1010];
double r,b[22],jiaodu,sum=0;
scanf("%d%d",&n,&m);
for(i=0;i180.0)
{
k=360.0-(double)jiaodu*i;
}
b[i]=r* sqrt(2.0) *(double)sqrt(1.0-(double)cos( ( k/180.0*pi ) ) );
}
b[0]=0;
if(a[0]!=1)
{
if(a[0]==n||a[0]==2)
{
sum+=1.0;
}
else
{
sum+=b[abs(a[0]-1)];
}
}
for(i=1;i
Problem B: 狗哥的肚子
Time Limit: 1 Sec
Memory Limit: 128 MB
Description
在 ACM 集训队中,狗哥的肚子形状多变,令人啧啧称奇,但是大家都有一个疑问,狗哥的肚子在最大的时候,能有多大呢?于是大家通过观察测量,用三种近似形状和相对应的整数数据来描述狗哥的肚子。
但是狗哥的肚子实在太多变化的形状了,大家没有办法找出其中最大的值,于是请求你写一个程序,来计算狗哥的肚子横截面的最大面积。
Input
第一行是一个正整数T,代表有T组输入。
每组输入第一行是一个整数 N ,表示狗哥的肚子形状变化个数。
接下来 N 行,每行开头包括一个大写字母,可能是 T (三角形)、 R (矩形) 、 C (圆形) ,表示狗哥肚子横截面的形状。
在字母后,是一到两个整数,表示形状的尺寸,也就是说T后会跟着两个整数,分别代表着三角形的底和高,,R后会跟着两个整数,代表着矩形的两条邻边的长度,而 C 后会跟着一个整数,代表着半径。
保证 N ≤ 1000 ,尺寸都在[0,100]之间,且定义 π = 3.14159。
Output
对于每一组样例,输出最大的狗哥的肚子横截面积,结果请保留两位小数。
Sample Input
21T 3 24T 3 2R 2 1C 5C 10
Sample Output
3.00314.16
HINT
第二个输入,选择 C 10 ,因为 10 × 10 × 3.14159 = 314.159(保留两位小数) = 314.16 。
B题就是很水的按指令操作问题。
#include
#include
#define pi 3.14159
using namespace std;
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
int i,n;
double ds,hs,dc,hc,r,s[1050],maxz=0.0;
char ch;
scanf("%d",&n);
for(i=0;i
Problem C: 算法的魅力
Time Limit: 1 Sec
Memory Limit: 128 MB
Description
有一天,肥宅又在玩二十四点,他用5、5、7、7又一次成功的凑出了这个点数,他看着这个点数,突然想到,在一到二十四这些整数中,其中为5和7的整倍数的数有5、7、10、14、15、20,21,他们加起来的和为92。
肥宅算出这个和,他内心想到,这个数真是太优美了,但是他突然觉得,算出1到24这个范围内的结果是不够的,还应该算出1到n中为5和7的整倍数的数之和,该怎么求呢?
可是肥宅太懒,他只想赶着吃土豆咖喱牛肉,于是肥宅把这个艰巨的任务委托了给你。你是否能借助算法的魅力,拯救肥宅呢?
Input
第一行一个整数T,代表有T组数据
接下来T行,每一行一个正整数N,代表肥宅想求的范围的上界。
下界为永远为1。
1 <= T <= 100
1 <= N <= 1e9
Output
对于每一组样例,你应该输出一行整数,代表每组数据的所求和的答案。
Sample Input
32410100
Sample Output
92221680
HINT
这题我还真不会做,也是看网上别人的代码写的
#include
typedef long long ll;
ll n;
ll cal(ll x)
{
ll r=n/x*x;
ll res=(x+r)*((r-x)/x+1)/2;
return res;
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
scanf("%lld",&n);
ll ans=cal(5)+cal(7)-cal(35);
printf("%lld\n",ans);
}
return 0;
}
Problem D: Gakki的疑问
Time Limit: 1 Sec
Memory Limit: 128 MB
Description
众所周知,新垣结衣(Gakki)很爱她的老公姚师姐,6月11日是Gakki的生日,姚师姐想送她生日礼物,于是跑去问:“老婆,你最近缺些什么吗?”,可爱的Gakki很傲娇,她拿起笔在纸上写了写,然后羞涩地塞给师姐,说:“这道题,你能在1s里解出来,就给我买钻石项链,解不出来,就买辆兰博基尼吧!”,只见纸上写着:
如果一个数字只含有0和1,那么这个数字我称为漂亮数,比如1, 0, 11, 10111这些数都是漂亮数,而2,3,200,91这些都不是,现在给你一个数字n,你是否能够把它拆成几个漂亮数的和,并且这些漂亮数的个数最少?
姚师姐大为震惊,当然不是因为兰博基尼很贵,他不差钱,而是因为傻白甜的老婆居然会出题考自己,姚师姐成功在1s内解出了这道题目,现在这道题目被媒体扒了出来,你是否有能力达到Gakki老公的水平呢?
Input
第一行输入一个样例数T,表示一共有多少数字需要计算,接下来有T行,每行1个数字n,对于每个数字n,求出组成它的最少数量的漂亮数字。1<=T<=10000, 1<=n<=1e6
Output
对于每个数字n,输出两行答案,第一行是漂亮数的个数,第二行是组成它的漂亮数,按大小从小到大输出,并且在升序情况下,小的数字尽量小。
Sample Input
2932
Sample Output
91 1 1 1 1 1 1 1 1310 11 11
HINT
例如113 = 1 + 11 + 101 = 1 + 1 + 111
你所得到的答案应该是1+1+111。
121 = 10 + 111 = 11 + 110
你所得到的答案应该是10+111。
这题其实我也不太会,看了题解就知道
#include
using namespace std;
int a[13],b[9]={0,1,10,100,1000,10000,100000,100000};
int main()
{
int T,n;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
int cnt=0;
while(n)
{
int x=n,k=0;
for(int i=1;i<=6&&x;i++)
{
int y=x%10;
if(y>0)
{
n-=b[i];
k=k+b[i];
}
x/=10;
}
a[cnt++]=k;
}
sort(a,a+cnt);
printf("%d\n",cnt);
for(int i=0;i
Problem E: Joefery大佬的考核
Time Limit: 1 Sec
Memory Limit: 128 MB
Description
在这一天,Joefery大佬在他的小弟zhangab出题的时候,拿了一道小学生题给zhangab做,Joefery大佬说:“你做我的小弟这么久了,是时候给你加薪升职了。喏,这道小学生水平的题目作为你的考核内容,做出来就给你加薪升职”,但是…zhangab是真的没做出来,所以zhangab向各位dalao求助,zhangab想要加薪啊啊啊啊……考核内容如下:
矩形AGFE跟正方形ABCD重叠,其中点G落在BC边上,D点落在EF边上,给定矩形的边EF和边AE的长度,问正方形ABCD的面积S%10007=?
Input
第一行是一个整数T,代表T个样例,T≤10000
每个样例输入两个整数,a和b,(分别代表矩形的边EF和AE)0
Output
Sample Input
28460 416486 6334
Sample Output
66223589
这题用的是相似三角形 利用的是AED 和三角形 ABG 两个相似你就知道原来 正方形的边长原来是长方形的 长 × 宽
#include
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int a,b;
scanf("%d%d",&a,&b);
printf("%d\n",a*b%10007);
}
return 0;
}
Problem F: 没有题目背景的水题
Time Limit: 1 Sec
Memory Limit: 128 MB
Description
不写题目背景了。。。
一整数数列a1, a2, ... , an,以及另一个整数k,求一个区间i,j,(1 <= i <= j <= n),使得ai + ... + aj = k。
Input
第一行输入T,表示有T组数据
每组第一行两个数n,k (2<=n<=5000,0<=k<=10^8)
第二行有n个数,就是a数列(0<=ai<=10^4)
Output
每组数据两个数,分别是区间的起始和结束位置。如果存在多个,输出i最小的。如果i相等,输出j最小的。
Sample Input
16 101 2 3 4 5 6
Sample Output
1 4
HINT
题解:
居然是纯暴力解决。我一开始也不会做的。
#include
typedef long long ll;
int main()
{
int T;
ll n,k;
scanf("%d",&T);
while(T--)
{
int i,j;
ll a[5050];
scanf("%lld%lld",&n,&k);
for(i=0;i
Problem G: 白色相簿的季节
Time Limit: 1 Sec
Memory Limit: 128 MB
Description
又到了白色相簿的季节。狗哥作为广工最帅气的投递员兼代码手,因为最近突然想到没有女朋友而心情变得低落。那能怎么办?工作还是要继续啊!所以今天他又和往常一样开始了送快递的工作。但他发现他今天送的快递和往常不大一样。只有n封信,竟然是n个男生送给他们各自女朋友的信!!!面对这n对情侣的信(1<=n<=18),狗哥因为难过而失去了理智,他在这时问你,把这n封信全部配送错有多少种方案。并且把这首《届かない恋》送给了你。
Input
第一行一个T,表示样例数
接下来T行,每行一个正整数n(1<=n<=18),表示n封信。
Output
对于每组样例,输出一个数,表示n封信全部配送错的方案数。
Sample Input
223
Sample Output
12
这道题用到的是错排。
#include
typedef long long ll;
int main()
{
ll a[35]={0,0,1,2};
for(int i=4;i<=35;i++)
{
a[i]=(i-1)*(a[i-1]+a[i-2]);
}
int n,t;
scanf("%d",&n);
while(n--)
{
scanf("%d",&t);
printf("%lld\n",a[t]);
}
return 0;
}
Problem H: 最小公倍数
Time Limit: 1 Sec
Memory Limit: 128 MB
Description
最小公倍数指两个或多个整数公有的倍数中最小的一个。现在给出N个整数,取其中至少K个数求出他们的最小公倍数L,问L的最小值是多少?
Input
第一行包含一个整数T(1<=T<=8)表示有T个测试样例,接下来T个测试样例第一行包含两个整数N(2<=N<=100)和K(2<=K<=N),表示有N个数和至少选择其中K个,第二行包含N个正整数X(1<=X<=1000)。
Output
对于每个样例输出其相应的答案,答案范围保证在[1,1000],具体形式见样例。
Sample Input
24 21 2 3 45 36 2 3 3 7
Sample Output
26
HINT
#include
using namespace std;
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
int n,k,a[1000],ans;
scanf("%d%d",&n,&k);
for(int i=0;i=k)
{
ans=i;
break;
}
}
printf("%d\n",ans);
}
return 0;
}
Problem I: 狗哥的日常
Time Limit: 1 Sec
Memory Limit: 128 MB
Description
狗哥超喜欢YYF的,觉得他超勇的,狗哥也学习了YYF的话癖,就是“Rua”。有一天,狗哥在愉快的刷着ICPC final的原题,每过一道,他都会喊出一句”Rua”,杰哥看了一下狗哥的刷题记录,发现他过了N道题,那么聪明的你,知道狗哥说了多少个Rua呢?
Input
首先是一个正整数T,代表数据组数
对于每一组,有一个正整数N(1<=N<=20),代表狗哥过的题数。
Output
对于每一组数据,输出对应行数的“Rua”(不含双引号),然后接一个空行。
Sample Input
3357
Sample Output
RuaRuaRuaRuaRuaRuaRuaRuaRuaRuaRuaRuaRuaRuaRua
HINT
#include
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
int n,i;
scanf("%d",&n);
for(i=0;i
Problem J: csjhl和潮汕煎蚝烙
Time Limit: 1 Sec
Memory Limit: 128 MB
Description
csjhl为什么叫csjhl呢?因为他很喜欢吃潮汕煎蚝烙。可是黄小悦同学一直喜欢和csjhl抢着吃,于是他们决定用24点决一死战。可是他们都很饿,所以一致同意玩简单版的24点。一共有5张牌,牌上数字的范围是1到10,牌的顺序不可以改变,并且只能使用加法和减法。在24点上csjhl单挑无敌,在他看到牌的时候他已经在思考用哪一种方法赢了黄小悦同学。可是csjhl不会数数,所以请你来编写一个程序告诉他一共有多少种方法取得胜利。
Input
输入一个T,表示样例组数。
接下来T行,每行5个整数ai。(0
Output
Sample Input
31 1 5 5 101 1 7 7 107 7 1 1 10
Sample Output
012
HINT
第二组有一种方案 1-1+7+7+10=24
第三组有两种方案 7+7-1+1+10=24 7+7+1-1+10=24
#include
using namespace std;
int a[6],ans;
void dfs(int num,int id)
{
if(id==6)
{
ans += num==24;
return ;
}
dfs(num+a[id],id+1);
dfs(num-a[id],id+1);
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
ans = 0;
for(int i=1; i<=5; ++i) scanf("%d",&a[i]);
dfs(a[1], 2);
printf("%d\n",ans);
}
return 0;
}
Problem K: 这题有点难
Time Limit: 1 Sec
Memory Limit: 128 MB
Description
给你两个正整数a、 b。
现在有Q次询问,每次询问给出一个整数c,问是否存在正整数x,y可以使得
x * a - y * b == c
Input
第一行一个整数,表示样例组数T( 1 <= T <= 20 )
每组样例第一行三个整数 a、 b、 Q,其中(1 <= a,b <= 100, 1 <= Q <= 10000)
接下来 Q行,每行一个整数 c(-100 <= c <= 100)
Output
对于每个若可以满足方程,则输出"Yes"(没有引号),否则输出"No"(没有引号)
Sample Input
12 2 3213034
Sample Output
NoYesYes
HINT
#include
using namespace std;
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
int i,a,b,Q,c;
scanf("%d%d%d",&a,&b,&Q);
int ans= __gcd(a,b) ;
while(Q--)
{
scanf("%d",&c);
printf(c%ans==0?"Yes\n":"No\n");
}
}
return 0;
}