今天大家配合的非常好 一度取得第一名
虽然最后只拿了第三
但是和大一学弟一起配合让我似乎找回了点久违的东西
yes,I do
【nyist】TeamContest - 3 第A题---卡路里
一道水体。很简单,相信大家大一的时候做过很多这种题。题目大意就是告诉你N个数,然后让你求N个数的和是否大于1500,如果大于就输出“NO”,否则输出“YES”。
直接贴代码
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int main()
{
int n,s,x;
while (~scanf("%d",&n)){
s=0;
while (n--){
scanf("%d",&x);
s+=x;
}
if (s>1500) printf("NO\n");
else printf("YES\n");
}
return 0;
}
【nyist】TeamContest - 3 第B题---阿基米德螺线
这道题就是一道简单的数学题,由给出的极坐标方程可以求出弧度制,然后再由区间可以看出一个区间是2*pi;即可得出所在的是第几个区间;
附代码:
#include<stdio.h>
int main()
{
int test;
scanf("%d",&test);
while(test--)
{
double r,a,oo;
int kk;
scanf("%lf%lf",&r,&a);
oo=r/a;
kk=oo/(2.0*3.1415926);
printf("%d\n",kk+1);
}
}
【nyist】TeamContest - 3 第C题---Serious
这题也是这次比赛众多水题中的一个了,就是一道简单的模拟。
题意大致是告诉你四个点,前两个点是哥哥弟弟的位置,后两个点是墙的两头,并且告诉你这堵墙和哥哥弟弟间的连线肯定有交点,让你求哥哥到弟弟的最短路(弟弟到哥哥?)。
OK。思路很简单。如果是在纸上的话大家都会求。用哥哥弟弟两点和墙的两边连线,求出两条连线的距离,比较大小。首先计算哥哥弟弟两点和某一边连线,记录为dz和dzz,然后计算哥哥弟弟两点和另一边连线,记录为dy和dyy,比较dz+dzz和dy+dyy大小,求最小的,也就是哥哥和弟弟之间的最短路。
依然是帖代码:
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<math.h>
using namespace std;
struct point
{
double x,y;
};
double dis(point a,point b)
{
return (a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y);
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
point a,b,c,d;//dd gg z y
scanf("%lf%lf%lf%lf",&a.x,&a.y,&b.x,&b.y);
scanf("%lf%lf%lf%lf",&c.x,&c.y,&d.x,&d.y);
/*zuo*/
double dz=dis(a,c); dz=sqrt(dz);
double dzz=dis(b,c); dzz=sqrt(dzz);
double dy=dis(a,d); dy=sqrt(dy);
double dyy=dis(b,d); dyy=sqrt(dyy);
double ans=min(dz+dzz,dy+dyy);
printf("%.3lf\n",ans);
}
}
【nyist】TeamContest - 3 第D题-- Number theory!
看到这个题,首先想到的会是先将9进制转换为10进制,但是看一下数据范围就可以看出这题不是让我们去算,然后又可以想到oj上9的余数问题(虽然现在好不懂为啥),然后就大胆的去写代码,写完代码又测了一组自己数据就过了,
附代码:
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
const int M=1e7+5;
char a[M];
int main()
{
int d=1;
while(~scanf("%s",a))
{
if(strcmp(a,"0")==0)
break;
int len=strlen(a);
int sum=0;
for(int i=0;i<len;i++)
{
sum+=a[i]-'0';
}
printf("Case %d: %d\n",d++,sum%8);
}
}
【nyist】TeamContest - 3 第E题---干了这桶冰红茶!
这道题也算是一道简单的动态。
题意大概是有一桶N升的“超级冰红茶”,每次能喝1L,2L或3L,问喝完有几种喝法。
很简单,将0L赋值为一种喝法,之后的第i升可以用i-1,i-2,i-3的和来求,也就是“喝1L之前的方案数”加“喝2L之前的方案数”加“喝3L之前的方案数”就是第i升的方案数。一个循环求出1~30升的方案数,然后输出需要的。
依旧照例贴代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
long long a[50];
int main()
{
int n,s,x;
memset(a,0,sizeof(0));
a[0]=1;
for (int i=1; i<=30; i++)
{
if (i>=1) a[i]=a[i]+a[i-1];
if (i>=2) a[i]=a[i]+a[i-2];
if (i>=3) a[i]=a[i]+a[i-3];
}
scanf("%d",&n);
while (n--)
{
scanf("%d",&x);
printf("%lld\n",a[x]);
}
return 0;
}
【nyist】TeamContest - 3 第F题---Araleii & Bill的冠名权争夺战
先理解题意--题意大致如此 给你一个n 从1~n随机选两堆石子 取石子问后手赢的概率
分析:1 (1,1)后手 1/1
2 (1,2)先手 (2,1)先手 (2,2)后手1/2
3 (1,3)先 (2,3)先 (3,3)后 (2,3)先 (3,1)先 3/9 1/3
4(1,4)先 (2,4)先 (3,4)先 (4,1)先 (4,2)先 (4,3) 先 (4,4)先 4/16 1/4
(根据变动一次之前的状态 是后手赢 那么这次先手就能胜利,例如3,4可以从地儿堆取一,使后手的状态为另一人必胜)一开始推理了很久最后大家一起推 发现之前判先后手赢的情况出了错误
最后ac 感觉很棒。
每次输出 1/n
代码自写吧。
【nyist】TeamContest - 3 第H题---Pair
先解题意---题意大致如此。给你一个数N,让你从1~N中任意选取两个数,并求出他们的和为pair的值,问你最多有多少对pair。其中要求1.pair的值不能重复。2.选取的数不能重复。
思路:开始用了一种方法,选取1和n-1组合,选取2和n-3组合,以此类推。Wrong几次。
然后采用了第二种方法,选取n/2和n/2-1组合,n/2+1和n/2-3组合,以此类推,最后使n/2-2和n/2-4等等这些再组合。又被队友找到反例。
结果队友找到8这个反例14,26,35.
怒打表,找规律,打表代码:
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
bool b[1000],c[1000];
int s,n;
int fun(int r,int x){
if (x>s) s=x;
for (int i=r; i<n; i++){
for (int j=i+1; j<n; j++){
if (i+j<=n && c[i+j]==0 && b[i]==0 && b[j]==0){
b[i]=1;b[j]=1;c[i+j]=1;
fun(i+1,x+1);
b[i]=0;b[j]=0;c[i+j]=0;
}
}
}
}
int main()
{
int t;
memset(b,0,sizeof(b));
//while (~scanf("%d",&n)){
for (n=0; n<100; n++){
s=0;
fun(1,0);
printf("%d=%d\n",n,s);
}
return 0;
}
找出规律并总结出数学规律(想看规律自己运行代码),总结以下代码:
#include<iostream>
#include<stdio.h>
using namespace std;
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
int n;
scanf("%d",&n);
if(n<3) printf("0\n");
else
{
int id,s;
if(n%5==0)
id=n/5;
else
id=n/5+1;
if (n%5==1 || n%5==2)
s=id*2-2;
else s=id*2-1;
printf("%d\n",s);
}
}
}
OK 。。。AC
【nyist】TeamContest - 3 第I题---nonodog!
这题题意是一个人附近有n个冷气团,冷气团与自身的寒冷程度公式又给出了,直接算出每天的感受之和即可,如过程度大于界定值就停止。注意,不要误认为是求所有天的和;
附代码:
#include<iostream>
#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int dis(int x,int y)
{
return (x*x+y*y);
}
double gs(double ci,double ri)//寒冷度
{
return ci/ri;
}
int main()
{
int n;
double t;
int x[1005],y[1005],vx[1005],vy[1005];
double ci[1005];
while(~scanf("%d%lf",&n,&t))
{
double sum=0.0;
bool flag=0;
for(int i=1; i<=n; i++)
{
scanf("%d%d%d%d%lf",&x[i],&y[i],&vx[i],&vy[i],&ci[i]);
}
for(int j=1; j<=1000; j++)
{sum=0.0;
for(int i=1; i<=n; i++)
{
double di=dis(x[i]+vx[i]*j,y[i]+vy[i]*j);
sum+=gs(ci[i],di);
// printf("%lf\n",sum);
if(sum>t)
{
printf("%d\n",j);
flag=1;
goto th;
}
}
}
th:
if(!flag)
printf("Nono/Stay Panda\n");
}
}