ACM ICPC 2017 Warmup Contest 1 (NCPC 2016)
来源:互联网 发布:安卓sd卡数据恢复软件 编辑:程序博客网 时间:2024/06/05 17:15
A Artwork
倒跑并查集
#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 (1010)#define MAXQ (10000+10)int n,m,q;class bingchaji{public: int father[MAXN*MAXN],n,cnt; void mem(int _n) { n=cnt=_n; For(i,n) father[i]=i; } int getfather(int x) { if (father[x]==x) return x; return father[x]=getfather(father[x]); } void unite(int x,int y) { x=getfather(x); y=getfather(y); if (x^y) { --cnt; father[x]=y; } } bool same(int x,int y) { return getfather(x)==getfather(y); }}S;pair< pi ,pi > q1[MAXQ];int a[MAXN][MAXN];int dx[4]={1,0,-1,0};int dy[4]={0,1,0,-1};bool inside(int x,int y){return 1<=x&&x<=n&&1<=y&&y<=m;}int an[MAXQ];int id(int x,int y) {return (x-1)*m+y;}int las[MAXN][MAXN];int main(){// freopen("A.in","r",stdin);// freopen(".out","w",stdout); cin>>n>>m>>q; S.mem(n*m); MEM(las) MEM(a) For(i,q) { q1[i].fi.fi=read(); q1[i].fi.se=read(); q1[i].se.fi=read(); q1[i].se.se=read(); Fork(x,q1[i].fi.fi,q1[i].se.fi) Fork(y,q1[i].fi.se,q1[i].se.se) { a[x][y]=1; if (!las[x][y])las[x][y]=i; } } For(x,n) For(y,m) { if (inside(x+1,y)&&!a[x][y]&&!a[x+1][y]) S.unite(id(x+1,y),id(x,y)); if (inside(x,y+1)&&!a[x][y]&&!a[x][y+1]) S.unite(id(x,y+1),id(x,y)); } int ans=0; For(x,n) For(y,m) if (S.getfather(id(x,y))==id(x,y)&&!a[x][y] ) { ++ans; } ForD(i,q) { an[i]=ans; Fork(x,q1[i].fi.fi,q1[i].se.fi) Fork(y,q1[i].fi.se,q1[i].se.se) if (a[x][y]&&las[x][y]==i){ a[x][y]=0; ans++; Rep(di,4) { int x2=x+dx[di],y2=y+dy[di]; if (inside(x2,y2)&&!a[x][y]&&!a[x2][y2]) { if (!S.same(id(x,y),id(x2,y2))) { S.unite(id(x2,y2),id(x,y)); ans--; } } }// cout<<ans<<' '; }// cout<<endl; } For(i,q) printf("%d\n",an[i]); return 0;}
Bless You Autocorrect!
建trie树,二分hashLcp
Card Hand Sorting
暴力
#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 l[100]="23456789TJQKA";char s[100]="shdc";int h1[10000],h2[10000];namespace LIS{ #define MAXN (60) int n,a[MAXN],d[MAXN],f[MAXN],len=0; void LIS() { memset(d,128,sizeof(d)); d[len=0]=INF; ForD(i,n) { int l=0,r=len,ans=0; while (l<=r) { int m=l+r>>1; if (a[i]<d[m]) ans=m,l=m+1; else r=m-1; } f[i]=ans+1;len=max(len,f[i]); d[f[i]]=max(d[f[i]],a[i]); } } }pi p[MAXN];int pe[4]={0,1,2,3};int main(){// freopen("C.in","r",stdin);// freopen(".out","w",stdout); int n=read(); Rep(i,13) h1[l[i]]=i; Rep(i,4) h2[s[i]]=i; For(i,n) { char s[10]; scanf("%s",s); p[i]=mp(s[0],s[1]); } int ans=0; LIS::n=n; do{ Rep(st,1<<4) { For(i,n) { int sp=h2[p[i].se]; if ((st>>sp)&1) LIS::a[i] = h1[p[i].fi] + pe[h2[p[i].se]]*13; else { LIS::a[i] = 12 - h1[p[i].fi] + pe[h2[p[i].se]]*13; } } LIS::LIS(); gmax(ans,LIS::len); } }while(next_permutation(pe,pe+4)); cout<<n-ans<<endl; return 0;}
Daydreaming Stockbroker
E Exponial
扩展欧拉公式
广义欧拉定理
于同余式a^b≡x(mod m),如何求出x?(1<=a,m<=1000000000,1<=b<=10^1000000)
注意到b很大,我们可以先采取一些方法降幂。
若gcd(a,m)=1,那么使用欧拉定理即可:a^b≡a^(b%φ(m))(mod m)
若gcd(a,m)>1,且b>φ(m),则有“求幂大法”——a^b≡a^(b%φ(m)+φ(m))(mod m)
(当b<=φ(m)时直接用快速幂即可)
Keeping the Dogs Apart
2只dog分别在2折线上以相同速度跑,直到其中1只跑到终点(包括端点)的这段时间里2只dog最远距离?
#include<bits/stdc++.h>#include<quadmath.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 __float128 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;}const __float128 eps=1e-10;#define fabsq(x) max(x,-x)int dcmp(__float128 x) { if (fabsq(x)<eps) return 0; else return x<0 ? -1 : 1; }ld PI = 3.141592653589793238462643383;class P{public: __float128 x,y; P(__float128 x=0,__float128 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 (__float128)sqrt((double)Dot(A,A)); } 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,__float128 p) { return P(A.x*p,A.y*p); } friend P operator/ (P A,__float128 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() { double ax,ay; scanf("%lf%lf",&ax,&ay); P a=P(ax,ay); 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;__float128 Cross(V A,V B) {return A.x*B.y - A.y*B.x;}__float128 DistanceToSegment(P p,P A,P B) { if (A==B) return Length(p-A); V v1 = B-A, v2 = p-A, v3 = p - B; if (dcmp(Dot(v1,v2))<0) return Length(v2); else if (dcmp(Dot(v1,v3))>0 ) return Length(v3); else return fabsq(Cross(v1,v2) ) / Length(v1);}int n,m;#define MAXN (120000)P a[MAXN],b[MAXN];__float128 t1[MAXN]={},t2[MAXN]={};int main(){// freopen("K.in","r",stdin);// freopen(".out","w",stdout); n=read(); For(i,n) { a[i]=read_point(); } Fork(i,2,n) { t1[i]=Length(a[i]-a[i-1])+t1[i-1]; } m=read(); For(i,m) { b[i]=read_point(); } Fork(i,2,m) { t2[i]=Length(b[i]-b[i-1])+t2[i-1]; } int l1=1,l2=1; __float128 nowt=0; P A(b[1]-a[1]); __float128 ans=Length(A),t; while(l1<n&&l2<m) { if (t1[l1+1]<t2[l2+1]) { t=t1[l1+1]-nowt; P B=A+ (b[l2+1]-b[l2])*t/Length(b[l2+1]-b[l2])- (a[l1+1]-a[l1])*t/Length(a[l1+1]-a[l1]); ans = min(ans ,DistanceToSegment(P(0,0), A,B ) ); nowt=t1[++l1]; A=B; } else { t=t2[l2+1]-nowt; P B=A+ (b[l2+1]-b[l2])*t/Length(b[l2+1]-b[l2])- (a[l1+1]-a[l1])*t/Length(a[l1+1]-a[l1]); ans = min(ans ,DistanceToSegment(P(0,0), A,B ) ); nowt=t2[++l2]; A=B; } } printf("%.12lf\n",(double)ans); return 0;}
阅读全文
0 0
- ACM ICPC 2017 Warmup Contest 1 (NCPC 2016)
- ACM ICPC 2017 Warmup Contest 1
- ACM ICPC 2017 Warmup Contest 1(Nordic Collegiate Programming Contest 2016)
- ACM ICPC 2017 Warmup Contest 1 F. Fleecing the Raffle
- 计蒜客 ACM ICPC 2017 Warmup Contest 1 G Game Rank
- ACM ICPC 2017 Warmup Contest 5
- ACM ICPC 2017 Warmup Contest 6 G
- 计蒜客 ACM-ICPC 2017 Warmup Contest 12
- ACM ICPC 2017 Warmup Contest 2(ACM Northeastern European Regional Contest,Northern Subregion 2016)
- ACM ICPC 2017 Warmup Contest 7(CTU Open Contest 2016)
- ACM ICPC 2017 Warmup Contest 7(CTU Open Contest 2016)
- 计蒜客 Bridge Automation(ACM ICPC 2017 Warmup Contest 9)
- 计蒜客 Charles in Charge(ACM ICPC 2017 Warmup Contest 9)
- 计蒜客ACM ICPC 2017 Warmup Contest 9--C题
- ACM ICPC 2017 Warmup Contest 4(ACM Northeastern European Regional Contest,Northern Subregion 2015)
- ACM ICPC 2017 Warmup Contest 6(ACM Google Cup 2011 Invitational Programming Contest)
- ACM ICPC 2017 Warmup Contest 8(ACM PolyU International Invitation Contest)
- 【Codeforces】2015-2016 ACM-ICPC Nordic Collegiate Programming Contest (NCPC 2015) E 线段树+离散化
- HYSBZ
- 常用的Oracle的doc命令
- JAVA面试题整理之—基础篇第一部
- poj 2287 田忌赛马
- 剑指Offer------字符串的排列(全排列)
- ACM ICPC 2017 Warmup Contest 1 (NCPC 2016)
- 在IntelliJ IDEA下搭建基于Maven的spring boot框架
- 215[Medium]:Kth Largest Element in an Array
- Gemfire命令集
- JavaScript 数组对象深拷贝与浅拷贝
- JavaWeb笔记(1)
- Spring报错:org.springframework.beans.factory.NoUniqueBeanDefinitionException
- B-number (数位DP)
- hdu1754