La Salle-Pui Ching Programming Challenge 培正喇沙編程挑戰賽 2017
来源:互联网 发布:淘宝优惠券 文胸 编辑:程序博客网 时间:2024/05/19 22:51
A Ambiguous Dates
贪心,从小到大取日期
#include<bits/stdc++.h> using namespace std;#define For(i,n) for(int i=1;i<=n;i++)#define Fork(i,k,n) for(int i=k;i<=n;i++)#define ForkD(i,k,n) for(int i=n;i>=k;i--)#define Rep(i,n) for(int i=0;i<n;i++)#define ForD(i,n) for(int i=n;i;i--)#define RepD(i,n) for(int i=n;i>=0;i--)#define Forp(x) for(int p=pre[x];p;p=next[p])#define Forpiter(x) for(int &p=iter[x];p;p=next[p]) #define Lson (o<<1)#define Rson ((o<<1)+1)#define MEM(a) memset(a,0,sizeof(a));#define MEMI(a) memset(a,0x3f,sizeof(a));#define MEMi(a) memset(a,128,sizeof(a));#define MEMx(a,b) memset(a,b,sizeof(a));#define INF (0x3f3f3f3f)#define F (1000000007)#define pb push_back#define mp make_pair#define fi first#define se second#define vi vector<int> #define pi pair<int,int>#define SI(a) ((a).size())#define Pr(kcase,ans) printf("Case #%d: %lld\n",kcase,ans);#define PRi(a,n) For(i,n-1) cout<<a[i]<<' '; cout<<a[n]<<endl;#define PRi2D(a,n,m) For(i,n) { \ For(j,m-1) cout<<a[i][j]<<' ';\ cout<<a[i][m]<<endl; \ } #pragma comment(linker, "/STACK:102400000,102400000")#define ALL(x) (x).begin(),(x).end()#define gmax(a,b) a=max(a,b);#define gmin(a,b) a=min(a,b);typedef long long ll;typedef long double ld;typedef unsigned long long ull;ll mul(ll a,ll b){return (a*b)%F;}ll add(ll a,ll b){return (a+b)%F;}ll sub(ll a,ll b){return ((a-b)%F+F)%F;}void upd(ll &a,ll b){a=(a%F+b%F)%F;}inline int read(){ int x=0,f=1; char ch=getchar(); while(!isdigit(ch)) {if (ch=='-') f=-1; ch=getchar();} while(isdigit(ch)) { x=x*10+ch-'0'; ch=getchar();} return x*f;} #define MAXN (123456)ll d[MAXN];ll Abs(ll x){return max(x,-x);}int main(){// freopen("A.in","r",stdin);// freopen(".out","w",stdout); int n=read(); For(i,n) d[i]=read(); ll ans=0; sort(d+1,d+1+n);ll c=0; For(i,n) { ll p=d[i]; if (p>i) { ans+=min((ll)n-i,d[i]-i); } } cout<<2*ans<<endl; return 0;}
B Bacteria Experiment
求树直径
#include<bits/stdc++.h> using namespace std;#define For(i,n) for(int i=1;i<=n;i++)#define Fork(i,k,n) for(int i=k;i<=n;i++)#define ForkD(i,k,n) for(int i=n;i>=k;i--)#define Rep(i,n) for(int i=0;i<n;i++)#define ForD(i,n) for(int i=n;i;i--)#define RepD(i,n) for(int i=n;i>=0;i--)#define Forp(x) for(int p=pre[x];p;p=next[p])#define Forpiter(x) for(int &p=iter[x];p;p=next[p]) #define Lson (o<<1)#define Rson ((o<<1)+1)#define MEM(a) memset(a,0,sizeof(a));#define MEMI(a) memset(a,0x3f,sizeof(a));#define MEMi(a) memset(a,128,sizeof(a));#define MEMx(a,b) memset(a,b,sizeof(a));#define INF (0x3f3f3f3f)#define F (1000000007)#define pb push_back#define mp make_pair#define fi first#define se second#define vi vector<int> #define pi pair<int,int>#define SI(a) ((a).size())#define Pr(kcase,ans) printf("Case #%d: %lld\n",kcase,ans);#define PRi(a,n) For(i,n-1) cout<<a[i]<<' '; cout<<a[n]<<endl;#define PRi2D(a,n,m) For(i,n) { \ For(j,m-1) cout<<a[i][j]<<' ';\ cout<<a[i][m]<<endl; \ } #pragma comment(linker, "/STACK:102400000,102400000")#define ALL(x) (x).begin(),(x).end()#define gmax(a,b) a=max(a,b);#define gmin(a,b) a=min(a,b);typedef long long ll;typedef long double ld;typedef unsigned long long ull;ll mul(ll a,ll b){return (a*b)%F;}ll add(ll a,ll b){return (a+b)%F;}ll sub(ll a,ll b){return ((a-b)%F+F)%F;}void upd(ll &a,ll b){a=(a%F+b%F)%F;}inline int read(){ int x=0,f=1; char ch=getchar(); while(!isdigit(ch)) {if (ch=='-') f=-1; ch=getchar();} while(isdigit(ch)) { x=x*10+ch-'0'; ch=getchar();} return x*f;} #define MAXN (912345)vi e[MAXN];int dep[MAXN]={};void dfs(int x,int fa) { dep[x]=dep[fa]+1; for(auto v:e[x]) { if (v!=fa) dfs(v,x); }}int main(){// freopen("B.in","r",stdin);// freopen(".out","w",stdout); int n=read(); For(i,n-1) { int x=read(),y=read(); e[x].pb(y);e[y].pb(x); } dfs(1,0); int mx=max_element(dep+1,dep+1+n)-dep; MEM(dep); dfs(mx,0); int l=*max_element(dep+1,dep+1+n); int ans=0,dis=1; --l; while(dis<l) ans++,dis<<=1; cout<<ans<<endl; return 0;}
C Cheering
签到
#include<bits/stdc++.h> using namespace std;#define For(i,n) for(int i=1;i<=n;i++)#define Fork(i,k,n) for(int i=k;i<=n;i++)#define ForkD(i,k,n) for(int i=n;i>=k;i--)#define Rep(i,n) for(int i=0;i<n;i++)#define ForD(i,n) for(int i=n;i;i--)#define RepD(i,n) for(int i=n;i>=0;i--)#define Forp(x) for(int p=pre[x];p;p=next[p])#define Forpiter(x) for(int &p=iter[x];p;p=next[p]) #define Lson (o<<1)#define Rson ((o<<1)+1)#define MEM(a) memset(a,0,sizeof(a));#define MEMI(a) memset(a,0x3f,sizeof(a));#define MEMi(a) memset(a,128,sizeof(a));#define MEMx(a,b) memset(a,b,sizeof(a));#define INF (0x3f3f3f3f)#define F (1000000007)#define pb push_back#define mp make_pair#define fi first#define se second#define vi vector<int> #define pi pair<int,int>#define SI(a) ((a).size())#define Pr(kcase,ans) printf("Case #%d: %lld\n",kcase,ans);#define PRi(a,n) For(i,n-1) cout<<a[i]<<' '; cout<<a[n]<<endl;#define PRi2D(a,n,m) For(i,n) { \ For(j,m-1) cout<<a[i][j]<<' ';\ cout<<a[i][m]<<endl; \ } #pragma comment(linker, "/STACK:102400000,102400000")#define ALL(x) (x).begin(),(x).end()#define gmax(a,b) a=max(a,b);#define gmin(a,b) a=min(a,b);typedef long long ll;typedef long double ld;typedef unsigned long long ull;ll mul(ll a,ll b){return (a*b)%F;}ll add(ll a,ll b){return (a+b)%F;}ll sub(ll a,ll b){return ((a-b)%F+F)%F;}void upd(ll &a,ll b){a=(a%F+b%F)%F;}inline int read(){ int x=0,f=1; char ch=getchar(); while(!isdigit(ch)) {if (ch=='-') f=-1; ch=getchar();} while(isdigit(ch)) { x=x*10+ch-'0'; ch=getchar();} return x*f;} char s[12345];int main(){// freopen("E.in","r",stdin);// freopen(".out","w",stdout); cin>>s; int n=strlen(s),p=0; Rep(i,n-2) { if (s[i]=='L'&&s[i+1]=='S'&&s[i+2]=='C') ++p; } Rep(i,n-3) { if (s[i]=='P'&&s[i+1]=='C'&&s[i+2]=='M'&&s[i+3]=='S') --p; } if (!p) puts("Tie");else puts(p>0?"LSC":"PCMS"); return 0;}
H Hit!
给2个圆保证存在不为0的公共部分,求公共部分的任意一个点
分2种情况,内含,内切(此时解取1个圆的圆心),相交圆心连线上的一个点。
#include<bits/stdc++.h>using namespace std;#define For(i,n) for(int i=1;i<=n;i++)#define Fork(i,k,n) for(int i=k;i<=n;i++)#define Rep(i,n) for(int i=0;i<n;i++)#define ForD(i,n) for(int i=n;i;i--)#define ForkD(i,k,n) for(int i=n;i>=k;i--)#define RepD(i,n) for(int i=n;i>=0;i--)#define Forp(x) for(int p=Pre[x];p;p=Next[p])#define Forpiter(x) for(int &p=iter[x];p;p=Next[p]) #define Lson (o<<1)#define Rson ((o<<1)+1)#define MEM(a) memset(a,0,sizeof(a));#define MEMI(a) memset(a,127,sizeof(a));#define MEMi(a) memset(a,128,sizeof(a));#define INF (2139062143)#define F (100000007)#define pb push_back#define mp make_pair #define fi first#define se second#define vi vector<int> #define pi pair<int,int>#define SI(a) ((a).size())#define ALL(x) (x).begin(),(x).end()typedef long long ll;typedef long double ld;typedef unsigned long long ull;ll mul(ll a,ll b){return (a*b)%F;}ll add(ll a,ll b){return (a+b)%F;}ll sub(ll a,ll b){return (a-b+llabs(a-b)/F*F+F)%F;}void upd(ll &a,ll b){a=(a%F+b%F)%F;}int read(){ int x=0,f=1; char ch=getchar(); while(!isdigit(ch)) {if (ch=='-') f=-1; ch=getchar();} while(isdigit(ch)) { x=x*10+ch-'0'; ch=getchar();} return x*f;} ll sqr(ll a){return a*a;}ld sqr(ld a){return a*a;}double sqr(double a){return a*a;}const double eps=1e-10;int dcmp(double x) { if (fabs(x)<eps) return 0; else return x<0 ? -1 : 1; }ld PI = 3.141592653589793238462643383;class P{public: double x,y; P(double x=0,double y=0):x(x),y(y){} friend ld dis2(P A,P B){return sqr(A.x-B.x)+sqr(A.y-B.y); } friend ld Dot(P A,P B) {return A.x*B.x+A.y*B.y; } friend ld Length(P A) {return sqrt(Dot(A,A)); } friend ld Angle(P A,P B) { if (dcmp(Dot(A,A))==0||dcmp(Dot(B,B))==0||dcmp(Dot(A-B,A-B))==0) return 0; return acos(max((ld)-1.0, min((ld)1.0, Dot(A,B) / Length(A) / Length(B) )) ); } friend P operator- (P A,P B) { return P(A.x-B.x,A.y-B.y); } friend P operator+ (P A,P B) { return P(A.x+B.x,A.y+B.y); } friend P operator* (P A,double p) { return P(A.x*p,A.y*p); } friend P operator/ (P A,double p) { return P(A.x/p,A.y/p); } friend bool operator< (const P& a,const P& b) {return dcmp(a.x-b.x)<0 ||(dcmp(a.x-b.x)==0&& dcmp(a.y-b.y)<0 );}}; P read_point() { P a; scanf("%lf%lf",&a.x,&a.y); return a; } bool operator==(const P& a,const P& b) { return dcmp(a.x-b.x)==0 && dcmp(a.y-b.y) == 0;} typedef P V;double Cross(V A,V B) {return A.x*B.y - A.y*B.x;}double DistanceToLine(P p,P A,P B) { V v1 = B-A, v2 = p-A; return fabs(Cross(v1,v2))/Length(v1);}P GetLineProjection(P p,P A,P B) { V v=B-A; return A+v*(Dot(v,p-A)/Dot(v,v));}struct C{ P c; double r,x,y; C(){} C(P c,double r):c(c),r(r),x(c.x),y(c.y){} P point(double a) { return P(c.x+cos(a)*r,c.y+sin(a)*r); }};struct Line{ P p; V v; double ang; Line(){} Line(P p,V v):p(p),v(v) {ang=atan2(v.y,v.x); } bool operator<(const Line & L) const { return ang<L.ang; } P point(double a) { return p+v*a; }};int getLineCircleIntersection(Line L,C cir,double &t1,double &t2,vector<P> & sol) { if (dcmp(DistanceToLine(cir.c,L.p,L.p+L.v)-cir.r)==0) { P A=GetLineProjection(cir.c,L.p,L.p+L.v); sol.pb(A); t1 = (A-L.p).x / L.v.x; return 1; } double a = L.v.x, b = L.p.x - cir.c.x, c = L.v.y, d= L.p.y - cir.c.y; double e = a*a+c*c, f = 2*(a*b + c*d), g = b*b+d*d-cir.r*cir.r; double delta = f*f - 4*e*g; if (dcmp(delta)<0) return 0; else if (dcmp(delta)==0) { t1 = t2 = -f / (2*e); sol.pb(L.point(t1)); return 1; } t1 = (-f - sqrt(delta)) / (2*e); sol.pb(L.point(t1)); t2 = (-f + sqrt(delta)) / (2*e); sol.pb(L.point(t2)); return 2;}double angle(V v) {return atan2(v.y,v.x);}int getCircleCircleIntersection(C C1,C C2,vector<P>& sol) { double d = Length(C1.c-C2.c); if (dcmp(d)==0) { if (dcmp(C1.r - C2.r)==0) return -1; //2圆重合 return 0; } if (dcmp(C1.r+C2.r-d)<0) return 0; if (dcmp(fabs(C1.r-C2.r)-d)>0) return 0; double a = angle(C2.c-C1.c); double da = acos((C1.r*C1.r+d*d - C2.r*C2.r)/ (2*C1.r*d)); P p1 = C1.point(a-da), p2 = C1.point(a+da); sol.pb(p1); if (p1==p2) return 1; sol.pb(p2); return 2; }int main(){// freopen("H.in","r",stdin);// freopen(".out","w",stdout); double x,y,r,a,b,c; cin>>x>>y>>r>>a>>b>>c; P p1=P(x,y),p2=P(a,b); C c0=C(p1,r),c1=C(p2,c); vector<P> sol; if (getCircleCircleIntersection(c0,c1,sol)>=2) { printf("%.10lf %.10lf\n",(sol[0].x+sol[1].x)/2 ,(sol[0].y+sol[1].y)/2 ); } else if (r<c) { printf("%.10lf %.10lf\n",x,y ); } else { printf("%.10lf %.10lf\n",a,b ); } return 0;}
Inverted Signs
显然翻转一段只会影响2端点的贡献
#include<bits/stdc++.h> using namespace std;#define For(i,n) for(int i=1;i<=n;i++)#define Fork(i,k,n) for(int i=k;i<=n;i++)#define ForkD(i,k,n) for(int i=n;i>=k;i--)#define Rep(i,n) for(int i=0;i<n;i++)#define ForD(i,n) for(int i=n;i;i--)#define RepD(i,n) for(int i=n;i>=0;i--)#define Forp(x) for(int p=pre[x];p;p=next[p])#define Forpiter(x) for(int &p=iter[x];p;p=next[p]) #define Lson (o<<1)#define Rson ((o<<1)+1)#define MEM(a) memset(a,0,sizeof(a));#define MEMI(a) memset(a,0x3f,sizeof(a));#define MEMi(a) memset(a,128,sizeof(a));#define MEMx(a,b) memset(a,b,sizeof(a));#define INF (0x3f3f3f3f)#define F (1000000007)#define pb push_back#define mp make_pair#define fi first#define se second#define vi vector<int> #define pi pair<int,int>#define SI(a) ((a).size())#define Pr(kcase,ans) printf("Case #%d: %lld\n",kcase,ans);#define PRi(a,n) For(i,n-1) cout<<a[i]<<' '; cout<<a[n]<<endl;#define PRi2D(a,n,m) For(i,n) { \ For(j,m-1) cout<<a[i][j]<<' ';\ cout<<a[i][m]<<endl; \ } #pragma comment(linker, "/STACK:102400000,102400000")#define ALL(x) (x).begin(),(x).end()#define gmax(a,b) a=max(a,b);#define gmin(a,b) a=min(a,b);typedef long long ll;typedef long double ld;typedef unsigned long long ull;ll mul(ll a,ll b){return (a*b)%F;}ll add(ll a,ll b){return (a+b)%F;}ll sub(ll a,ll b){return ((a-b)%F+F)%F;}void upd(ll &a,ll b){a=(a%F+b%F)%F;}inline int read(){ int x=0,f=1; char ch=getchar(); while(!isdigit(ch)) {if (ch=='-') f=-1; ch=getchar();} while(isdigit(ch)) { x=x*10+ch-'0'; ch=getchar();} return x*f;} #define MAXN (1123456)ll h[MAXN],s[MAXN];ll Abs(ll x){return max(x,-x);}int main(){// freopen("I.in","r",stdin);// freopen(".out","w",stdout); int n=read(); For(i,n) h[i]=read(); ll ans=0; For(i,n-1) ans+=Abs(h[i]-h[i+1]); s[1]=0; Fork(i,2,n) { s[i]=Abs(-h[i]-h[i-1]) - Abs(h[i]-h[i-1]); s[i]=min(s[i],s[i-1]); } ll del=0,pcost=0; ForD(i,n) { ll p; if (i==n) p=0; else p=Abs(-h[i]-h[i+1]) - Abs(h[i]-h[i+1]); pcost=min(p,pcost); del= min (del , pcost+s[i]); } cout<<ans+del<<endl; return 0;}
K Knights
四个角无法在第二阶段被其他Knights影响,只能自己覆盖自己。
覆盖了4个角以后能覆盖原图。
#include<bits/stdc++.h> using namespace std;#define For(i,n) for(int i=1;i<=n;i++)#define Fork(i,k,n) for(int i=k;i<=n;i++)#define ForkD(i,k,n) for(int i=n;i>=k;i--)#define Rep(i,n) for(int i=0;i<n;i++)#define ForD(i,n) for(int i=n;i;i--)#define RepD(i,n) for(int i=n;i>=0;i--)#define Forp(x) for(int p=pre[x];p;p=next[p])#define Forpiter(x) for(int &p=iter[x];p;p=next[p]) #define Lson (o<<1)#define Rson ((o<<1)+1)#define MEM(a) memset(a,0,sizeof(a));#define MEMI(a) memset(a,0x3f,sizeof(a));#define MEMi(a) memset(a,128,sizeof(a));#define MEMx(a,b) memset(a,b,sizeof(a));#define INF (0x3f3f3f3f)#define F (1000000007)#define pb push_back#define mp make_pair#define fi first#define se second#define vi vector<int> #define pi pair<int,int>#define SI(a) ((a).size())#define Pr(kcase,ans) printf("Case #%d: %lld\n",kcase,ans);#define PRi(a,n) For(i,n-1) cout<<a[i]<<' '; cout<<a[n]<<endl;#define PRi2D(a,n,m) For(i,n) { \ For(j,m-1) cout<<a[i][j]<<' ';\ cout<<a[i][m]<<endl; \ } #pragma comment(linker, "/STACK:102400000,102400000")#define ALL(x) (x).begin(),(x).end()#define gmax(a,b) a=max(a,b);#define gmin(a,b) a=min(a,b);typedef long long ll;typedef long double ld;typedef unsigned long long ull;ll mul(ll a,ll b){return (a*b)%F;}ll add(ll a,ll b){return (a+b)%F;}ll sub(ll a,ll b){return ((a-b)%F+F)%F;}void upd(ll &a,ll b){a=(a%F+b%F)%F;}inline int read(){ int x=0,f=1; char ch=getchar(); while(!isdigit(ch)) {if (ch=='-') f=-1; ch=getchar();} while(isdigit(ch)) { x=x*10+ch-'0'; ch=getchar();} return x*f;} #define MAXN (123456)int b[2][2]={};int main(){// freopen("K.in","r",stdin);// freopen(".out","w",stdout); int n=read(),m=read(),k=read(); For(i,k) { int x=read(),y=read(); if ((1<x && x<n) || (1<y&&y<m) ) continue; if(1==x&&1==y) b[0][0]=1; if(1==x&&m==y) b[0][1]=1; if(n==x&&1==y) b[1][0]=1; if(n==x&&m==y) b[1][1]=1; } if (n==1 &&m==1) { puts(b[1][1]?"0":"1"); } else if (n==1) { cout<<2-b[0][0]-b[0][1]<<endl; } else if (m==1) { cout<<2-b[0][0]-b[1][0]<<endl; }else { cout<<4-b[0][0]-b[1][0]-b[0][1]-b[1][1]<<endl; } return 0;}
阅读全文
0 0
- [La Salle-Pui Ching Programming Challenge 培正喇沙編程挑戰賽 2017]Ambiguous Dates
- La Salle-Pui Ching Programming Challenge 培正喇沙編程挑戰賽 2017
- La Salle-Pui Ching Programming Challenge 2017 Gym
- Mujin Programming Challenge 2017A
- Atcoder Mujin Programming Challenge 2017
- programming challenge 1 基础入门....
- programming challenge 1(基础入门2)
- securityoverridehacking challenge 解题思路汇总——Programming
- Codechef April Challenge 2017
- July Challenge 2017 | Calculator
- CodeChef March Challenge 2017 题解
- [Contest]CodeChef October Challenge 2017
- la la la, la la la
- Codechef 2017 March Challenge 简要题解
- The Martian Challenge 2017 E. Secret Passage
- June Challenge 2017 | A Good Set
- June Challenge 2017 | Xenny and Coin Rankings
- June Challenge 2017 | Chef and the Feast
- 2017.11.03【NOIP提高组】冲刺A组 总结
- POJ
- PAT 甲级练习 1002
- Climbing Stairs(算法分析week9)
- 关于myeclipse10与maven整合的问题
- La Salle-Pui Ching Programming Challenge 培正喇沙編程挑戰賽 2017
- awk内置变量之FILENAME、ARGC、ARGV、ENVIRON
- 基于Docker和Golang搭建Web服务器
- 如何保证kafka 的消息机制
- 【NOIP 2016 day1 T1 T3】玩具谜题,换教室——题解
- 微信服务器接入流程
- 查看程序运行的启动参数
- Linux基础——常用命令scp和解压缩
- MBR分区和GPT分区(系统安装注意)简介及互相转换的方法