JXUFE_上海邀请赛选拔赛

总的说一下这次的情况,这次的状态不太好,期间各种小错误卡好久,freopen()不能用,也是醉了,A题题目描述有问题,就不说了,B题少考虑一种情况,G题把Yes输成YES,I题思路一直有啊,但当时一直混混沌沌的,代码写不出来,J题少写了个break,这么多低级错误,害我卡了好久,还好最后一小时的时候感觉渐渐回来了,一个个的BUG调出来了

比赛的时候卡水题真的是巨影响心情的

链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=76940#overview

HUST 1583:长度单位

A题太坑爹了,必须先转化为英寸,再转化为英尺才行

#include<stdio.h>
#include<math.h>
const double eps=1e-6;
int main(){
	int n;
	/*#ifndef ONLINE_JUDGE
	freopen("in.txt","r",stdin);
	#endif */
	while(scanf("%d",&n)!=EOF){
		double a=n;
		int b=n/3;
		if((n%3)>1) b++;
		printf("%d %d\n",b/12,b%12);
	}
}

HUST 1584 :摆放餐桌

求出每一个小圆要占大圆多少圆心角,连接两圆圆心,过大圆心作小圆切线,求出角度*2即为每个小圆占的角度,然后特判一下r>R的情况

#include<stdio.h>
#include<math.h>
const double PI=acos(-1.0);
const double eps=1e-8;
int main(){
	//freopen("in.txt","r",stdin);
	int n;
	double R,r;
	while(scanf("%d%lf%lf",&n,&R,&r)!=EOF){
		double c=R-r;
		double b=r;

		int num;
		if(r>R) num=0;
		else if(2*r>R) num=1;
		else if(fabs(2*r-R)<eps) num=2;
		else{
			double q=asin(b/c)*2.0;
			num=floor(2.0*PI/q+eps);
			//printf("%f %f\n",2*PI,q);
		}
		if(n<=num) printf("YES\n");
		else printf("NO\n");
	}
	return 0;
}

HUST 1583:排队

画下图,即可知求b+1和n-a的较小值

#include<stdio.h>
#include<algorithm>
using namespace std;
int main(){
	/*#ifndef ONLINE_JUDGE
	freopen("in.txt","r",stdin);
	#endif*/
	int n,a,b;
	while(scanf("%d%d%d",&n,&a,&b)!=EOF){
		printf("%d\n",min(b+1,n-a));
	}
	return 0;
}

SCU 4424 :Permutations

一开始使劲在按原理求,都没想到直接在找规律,规律很简单的,a[i]=i*a[i-1]+i

然后用long long求模就行了

#include<stdio.h>
#define mod 1000000007
typedef long long ll;
long long a[8000005];
int main(){
	a[0]=0;
	for(int i=1;i<=8000000;i++){
		a[i]=((ll)i*(a[i-1]+1))%mod;
	}
	int t,n;
	scanf("%d",&t);
	while(t--){
		scanf("%d",&n);
		printf("%lld\n",a[n]%mod);
	}
}

HUST 1622:小明的三角形

任意两边大于第三边,然后判断一下是不是在一条直线上

#include<stdio.h>
#include<math.h>
#include<algorithm>
using namespace std;
const double PI=acos(-1.0);
const double eps=1e-8;
struct Point {
	double x,y;
	Point(){
	}
	Point(double xx,double yy){
		x=xx;y=yy;
	}
	Point operator-(Point b){
		return Point(x-b.x,y-b.y);
	}
	double operator^(Point b){
		return x*b.y-y*b.x;
	}
};
double dist(double x1,double y1,double x2,double y2){
	return sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
}
int main(){
	//freopen("in.txt","r",stdin);
	double x1,x2,x3,y1,y2,y3;
	double R,r;
	int T;
	scanf("%d",&T);
	while(T--){

		scanf("%lf%lf%lf%lf%lf%lf",&x1,&y1,&x2,&y2,&x3,&y3);
		Point p=Point(x1,y1);
		Point q=Point(x2,y2);
		Point r=Point(x3,y3);
		double a=dist(x1,y1,x2,y2);
		double b=dist(x1,y1,x3,y3);
		double c=dist(x2,y2,x3,y3);
		if( fabs((p-q)^(r-q))<eps) printf("No\n");
		else{
			if(a+b-eps>c||a+c-eps>b||b+c-eps>a) printf("Yes\n");
			else printf("No\n");
		}
	}
}

HUST 1646:

这里求的是绝对值的最大值,即转化为求最大值和最小值,如果是求绝对值的最小值那就没办法了。。

dp[i]:表示以i结尾的区域的最大值或最小值,则

dp[i]=max(dp[i-1]+a[i],a[i])

dp[i]=main(dp[i-1]+a[i],a[i])

最后从头到尾扫描一遍

#include<stdio.h>
#include<algorithm>
#include<stdlib.h>
//dp[i]:选中第i个数时的最大值
using namespace std;
struct Node{
	int ma,mi;
}dp[100005];
int a[100005],s[100005];
int main(){
	//freopen("in.txt","r",stdin);
	int n;
	while(scanf("%d",&n)!=EOF){
		for(int i=1;i<=n;i++) scanf("%d",&a[i]);
		for(int i=1;i<=n;i++) s[i]+=s[i-1];
		dp[1].ma=a[1];
		dp[1].mi=a[1];
		for(int i=2;i<=n;i++) {
			dp[i].ma=max(dp[i-1].ma+a[i],a[i]);
			dp[i].mi=min(dp[i-1].mi+a[i],a[i]);
			//printf("%d ",dp[i].mi);
		}
		int ans=0;
		for(int i=1;i<=n;i++){
			ans=max(ans,abs(dp[i].ma));
			ans=max(ans,abs(dp[i].mi));
		}
		printf("%d\n",ans);
	}
	return 0;
}

SCU 4416:Happy hkw

按价格从小到大排个序,则第i个价格必经前面的都大,这时只需要比较第i个的质量是否比前面质量的最大值小即可

#include<stdio.h>
#include<algorithm>
using namespace std;
struct Node{
	int p,q;
}a[100005];
int cmp(Node a,Node b){
	return a.p<b.p;
}
int main(){
	//freopen("in.txt","r",stdin);
	int n;
	while(scanf("%d",&n)!=EOF){
		for(int i=0;i<n;i++) scanf("%d%d",&a[i].p,&a[i].q);
		sort(a,a+n,cmp);
		int ma=a[0].q,flag=1;
		for(int i=1;i<n;i++){
			if(a[i].q<ma) {
				flag=0;
				printf("Happy xkw\n");
				break;
			}
			ma=max(ma,a[i].q);
		}
		if(flag) printf("Poor xkw\n");
	}
	return 0;
}
时间: 2024-10-28 22:59:15

JXUFE_上海邀请赛选拔赛的相关文章

上海邀请赛之热身赛2_2013成都邀请赛

先写总结. 感觉这次跟scf和sjc组队有种瞬间碉堡了的感觉,虽然是临时组建的队伍凑齐准备去上海参加邀请赛,从这次比赛磨练配合. 今天比赛难度比前天那次的难度低,感觉更适合我们来练习. 话说好像比赛提早了5分钟,我们三个人都不知道,五分钟后一看A题学长已经A了,一想肯定特水...我就没看题,sjc和scf两个看了题,scf就开始敲了,我刚开始负责翻译题,虽然我英语是个渣渣...没办法,没翻译他们几乎做不出题...我就没做题,翻译了B和G.scf敲了貌似好久才完成(赛后重做,特水,基本3分钟就可以

[POI 2001+2014acm上海邀请赛]Gold Mine/Beam Cannon 线段树+扫描线

Description Byteman, one of the most deserving employee of The Goldmine of Byteland, is about to retire by the end of the year. The Goldmine management would like to reward him in acknowledgment of his conscientious work. As a reward Byteman may rece

A Computer Graphics Problem 4176 2013上海邀请赛

A Computer Graphics Problem Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 968    Accepted Submission(s): 688 Problem Description In this problem we talk about the study of Computer Graphics.

2015上海邀请赛

这次上海邀请赛差一点就能拿到牌子了,好可惜..... Game回来写了下,刚开始把重链写成了最大权子树,无限WA,然后一直在调..... 发现我一旦提交上去错了就始终在找程序BUG,从来没想过是不是思路哪里错掉了....其实这种交上去WA之后应该先去找思路上的错误,而不是怀疑题目有陷阱什么的... #include<stdio.h> #include<string.h> #include<vector> #include<list> #include<

HDU 5093Battle ships(2014上海邀请赛)

题目: Battle ships Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Total Submission(s): 477    Accepted Submission(s): 197 Problem Description Dear contestant, now you are an excellent navy commander, who is responsi

HDOJ Page Rank 5097【2014上海邀请赛H题-简单矩阵】

Page Rank Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 100000/100000 K (Java/Others) Total Submission(s): 282    Accepted Submission(s): 77 Problem Description Evaluation and rank of web pages is a hot topic for many internet companies and

hdu5242 上海邀请赛 优先队列+贪心

题意是给你一棵树    n个点 n-1条边   起点是1   每个点都有权值 每次能从根节点走到叶子节点   经行k次游戏 每次都是从1开始    拿过的点的权值不能拿第二次   问最大权值和: 开始看到题时也没想到什么方法  就按照常规的来  结果超时了   试着优化了好多次  最后过了   百度题解说是树链剖分    醉了    还没学!!! 说说我的做法吧    map[i]=a表示i节点的跟节点为a节点   从所有叶子节点开始入队(有点队列里有三个变量  分别是节点编号  权值  深度

[java线段树]2015上海邀请赛 D Doom

题意:n个数 m个询问 每个询问[l, r]的和, 再把[l, r]之间所有的数变为平方(模为9223372034707292160LL) 很明显的线段树 看到这个模(LLONG_MAX为9223372036854775807) 很明显平方时会爆LL 很容易发现所有数平方模了几次之后值就不再改变了 而且这个“几次”相当小 因此直接暴力搞就好了 public static void main(String[] args) { Scanner in = new Scanner(System.in);

为了上海邀请赛的ubuntu+codeblocks我也是蛮拼的

写给我这种新手的,安装了一天多还要求助大神的也是醉了,需要加油学习Linux 1.安装虚拟机中的ubuntu. 经过我的渣渣电脑测试,virtualbox带不动,要用vmware,然后再下载一个ubuntu的iso.然后跟着跟着看就好了,这就是windows底下装软件的好处 2.在ubuntu中下载codeblocks 出现的各种各样的错:failed to download repository information,在apt-get中出现各种网页404not found 解决方案网上有很多