Codeforces Round #277.5 (Div. 2) ABCDF
http://codeforces.com/contest/489
Problems
# | Name | ||
---|---|---|---|
A |
standard input/output
1 s, 256 MB |
x2668 | |
B |
standard input/output
1 s, 256 MB |
x2659 | |
C |
standard input/output
1 s, 256 MB |
x2261 | |
D |
standard input/output
1 s, 256 MB |
x1151 | |
E |
standard input/output
1 s, 256 MB |
x165 | |
F |
standard input/output
1 s, 256 MB |
x427 |
ABCD都是水题,F题有点碉,是个记忆化搜索/DP。
代码:
A:
1 //#pragma comment(linker, "/STACK:102400000,102400000") 2 #include<cstdio> 3 #include<cmath> 4 #include<iostream> 5 #include<cstring> 6 #include<algorithm> 7 #include<cmath> 8 #include<map> 9 #include<set> 10 #include<stack> 11 #include<queue> 12 using namespace std; 13 #define mz(array) memset(array, 0, sizeof(array)) 14 #define mf1(array) memset(array, -1, sizeof(array)) 15 #define minf(array) memset(array, 0x3f, sizeof(array)) 16 #define REP(i,n) for(i=0;i<(n);i++) 17 #define FOR(i,x,n) for(i=(x);i<=(n);i++) 18 #define RD(x) scanf("%d",&x) 19 #define RD2(x,y) scanf("%d%d",&x,&y) 20 #define RD3(x,y,z) scanf("%d%d%d",&x,&y,&z) 21 #define WN(x) printf("%d\n",x); 22 #define RE freopen("D.in","r",stdin) 23 #define WE freopen("huzhi.txt","w",stdout) 24 #define mp make_pair 25 #define pb push_back 26 #define pf push_front 27 #define ppf pop_front 28 #define ppb pop_back 29 typedef long long ll; 30 typedef unsigned long long ull; 31 32 const double pi=acos(-1.0); 33 const double eps=1e-10; 34 35 const int maxn=3333; 36 37 int n; 38 39 int ans; 40 int a[maxn]; 41 int ax[maxn],ay[maxn]; 42 43 ll farm(){ 44 int i,j,k; 45 ll re=0; 46 ans=0; 47 FOR(i,0,n-2){ 48 k=i; 49 FOR(j,i+1,n-1){ 50 if(a[j]<a[k]){ 51 k=j; 52 } 53 } 54 if(k!=i){ 55 ax[ans]=i; 56 ay[ans]=k; 57 ans++; 58 swap(a[k],a[i]); 59 } 60 } 61 return re; 62 } 63 64 int main(){ 65 int i; 66 scanf("%d",&n); 67 REP(i,n)RD(a[i]); 68 farm(); 69 WN(ans); 70 REP(i,ans){ 71 printf("%d %d\n",ax[i],ay[i]); 72 } 73 return 0; 74 }
B:
1 //#pragma comment(linker, "/STACK:102400000,102400000") 2 #include<cstdio> 3 #include<cmath> 4 #include<iostream> 5 #include<cstring> 6 #include<algorithm> 7 #include<cmath> 8 #include<map> 9 #include<set> 10 #include<stack> 11 #include<queue> 12 using namespace std; 13 #define mz(array) memset(array, 0, sizeof(array)) 14 #define mf1(array) memset(array, -1, sizeof(array)) 15 #define minf(array) memset(array, 0x3f, sizeof(array)) 16 #define REP(i,n) for(i=0;i<(n);i++) 17 #define FOR(i,x,n) for(i=(x);i<=(n);i++) 18 #define RD(x) scanf("%d",&x) 19 #define RD2(x,y) scanf("%d%d",&x,&y) 20 #define RD3(x,y,z) scanf("%d%d%d",&x,&y,&z) 21 #define WN(x) printf("%d\n",x); 22 #define RE freopen("D.in","r",stdin) 23 #define WE freopen("huzhi.txt","w",stdout) 24 #define mp make_pair 25 #define pb push_back 26 #define pf push_front 27 #define ppf pop_front 28 #define ppb pop_back 29 typedef long long ll; 30 typedef unsigned long long ull; 31 32 const double pi=acos(-1.0); 33 const double eps=1e-10; 34 35 const int maxn=111; 36 const int maxm=33333; 37 38 int n,m; 39 40 //struct Edge{ 41 // int v,next; 42 //}e[maxm]; 43 //int head[maxn],en; 44 // 45 //inline void add(const int &x,const int &y){ 46 // e[en].v=y; 47 // e[en].next=head[x]; 48 // head[x]=en++; 49 //} 50 51 int a[maxn],b[maxn]; 52 53 int farm(){ 54 sort(a,a+n); 55 sort(b,b+m); 56 int i,j; 57 j=0; 58 int ans=0; 59 REP(i,n){ 60 while(j<m && b[j]<a[i]-1)j++; 61 if(j==m)break; 62 if(abs(a[i]-b[j])<=1){ 63 j++; 64 ans++; 65 } 66 } 67 return ans; 68 } 69 70 int main(){ 71 int i; 72 RD(n); 73 REP(i,n)RD(a[i]); 74 RD(m); 75 REP(i,m)RD(b[i]); 76 WN(farm()); 77 return 0; 78 }
C:
1 //#pragma comment(linker, "/STACK:102400000,102400000") 2 #include<cstdio> 3 #include<cmath> 4 #include<iostream> 5 #include<cstring> 6 #include<algorithm> 7 #include<cmath> 8 #include<map> 9 #include<set> 10 #include<stack> 11 #include<queue> 12 using namespace std; 13 #define mz(array) memset(array, 0, sizeof(array)) 14 #define mf1(array) memset(array, -1, sizeof(array)) 15 #define minf(array) memset(array, 0x3f, sizeof(array)) 16 #define REP(i,n) for(i=0;i<(n);i++) 17 #define FOR(i,x,n) for(i=(x);i<=(n);i++) 18 #define FORD(i,x,y) for(i=(x);i>=(y);i--) 19 #define RD(x) scanf("%d",&x) 20 #define RD2(x,y) scanf("%d%d",&x,&y) 21 #define RD3(x,y,z) scanf("%d%d%d",&x,&y,&z) 22 #define WN(x) printf("%d\n",x); 23 #define RE freopen("D.in","r",stdin) 24 #define WE freopen("huzhi.txt","w",stdout) 25 #define mp make_pair 26 #define pb push_back 27 #define pf push_front 28 #define ppf pop_front 29 #define ppb pop_back 30 typedef long long ll; 31 typedef unsigned long long ull; 32 33 const double pi=acos(-1.0); 34 const double eps=1e-10; 35 36 const int maxn=3333; 37 const int maxm=33333; 38 39 int m,s; 40 41 //struct Edge{ 42 // int v,next; 43 //}e[maxm]; 44 //int head[maxn],en; 45 // 46 //inline void add(const int &x,const int &y){ 47 // e[en].v=y; 48 // e[en].next=head[x]; 49 // head[x]=en++; 50 //} 51 52 char s1[111],s2[111]; 53 54 bool farm(){ 55 if(m>1 && s==0)return 0; 56 if(s > m*9)return 0; 57 if(m==1 && s==0){ 58 strcpy(s1,"0"); 59 strcpy(s2,"0"); 60 return 1; 61 } 62 int t=s; 63 s1[0]='1'; 64 t--; 65 int i; 66 FORD(i,m-1,1){ 67 if(t){ 68 int q=min(9,t); 69 s1[i]='0'+q; 70 t-=q; 71 }else s1[i]='0'; 72 } 73 if(t)s1[0]+=t; 74 75 t=s; 76 FOR(i,0,m-1){ 77 if(t){ 78 int q=min(9,t); 79 s2[i]='0'+q; 80 t-=q; 81 }else s2[i]='0'; 82 } 83 return 1; 84 } 85 86 int main(){ 87 RD2(m,s); 88 if(farm()) 89 printf("%s %s\n",s1,s2); 90 else puts("-1 -1"); 91 return 0; 92 }
D:
1 //#pragma comment(linker, "/STACK:102400000,102400000") 2 #include<cstdio> 3 #include<cmath> 4 #include<iostream> 5 #include<cstring> 6 #include<algorithm> 7 #include<cmath> 8 #include<map> 9 #include<set> 10 #include<stack> 11 #include<queue> 12 using namespace std; 13 #define mz(array) memset(array, 0, sizeof(array)) 14 #define mf1(array) memset(array, -1, sizeof(array)) 15 #define minf(array) memset(array, 0x3f, sizeof(array)) 16 #define REP(i,n) for(i=0;i<(n);i++) 17 #define FOR(i,x,n) for(i=(x);i<=(n);i++) 18 #define RD(x) scanf("%d",&x) 19 #define RD2(x,y) scanf("%d%d",&x,&y) 20 #define RD3(x,y,z) scanf("%d%d%d",&x,&y,&z) 21 #define WN(x) printf("%d\n",x); 22 #define RE freopen("D.in","r",stdin) 23 #define WE freopen("huzhi.txt","w",stdout) 24 #define mp make_pair 25 #define pb push_back 26 #define pf push_front 27 #define ppf pop_front 28 #define ppb pop_back 29 typedef long long ll; 30 typedef unsigned long long ull; 31 32 const double pi=acos(-1.0); 33 const double eps=1e-10; 34 35 const int maxn=3333; 36 const int maxm=33333; 37 38 int n,m; 39 40 struct Edge{ 41 int v,next; 42 }e[maxm]; 43 int head[maxn],en; 44 45 inline void add(const int &x,const int &y){ 46 e[en].v=y; 47 e[en].next=head[x]; 48 head[x]=en++; 49 } 50 51 ll ans; 52 53 int a[maxn][maxn]; 54 int gf; 55 56 57 void dfs(int x,int y){ 58 if(y==0){ 59 a[gf][x]++; 60 return; 61 } 62 int i; 63 for(i=head[x]; i!=-1; i=e[i].next){ 64 if(e[i].v!=gf)dfs(e[i].v, y-1); 65 } 66 } 67 68 void farm(){ 69 int i,j; 70 ans=0; 71 mz(a); 72 FOR(i,1,n){ 73 gf=i; 74 dfs(i,2); 75 } 76 FOR(i,1,n){ 77 FOR(j,1,n){ 78 if(i!=j){ 79 if(a[i][j]>=2){ 80 ans+= a[i][j]*(a[i][j]-1)/2 ; 81 } 82 } 83 } 84 } 85 } 86 87 int main(){ 88 int i,j; 89 int x,y; 90 RD2(n,m); 91 en=0; 92 mf1(head); 93 REP(i,m){ 94 RD2(x,y); 95 add(x,y); 96 } 97 farm(); 98 printf("%I64d",ans); 99 return 0; 100 }
F:
1 //#pragma comment(linker, "/STACK:102400000,102400000") 2 #include<cstdio> 3 #include<cmath> 4 #include<iostream> 5 #include<cstring> 6 #include<algorithm> 7 #include<cmath> 8 #include<map> 9 #include<set> 10 #include<stack> 11 #include<queue> 12 using namespace std; 13 #define mz(array) memset(array, 0, sizeof(array)) 14 #define mf1(array) memset(array, -1, sizeof(array)) 15 #define minf(array) memset(array, 0x3f, sizeof(array)) 16 #define REP(i,n) for(i=0;i<(n);i++) 17 #define FOR(i,x,n) for(i=(x);i<=(n);i++) 18 #define RD(x) scanf("%d",&x) 19 #define RD2(x,y) scanf("%d%d",&x,&y) 20 #define RD3(x,y,z) scanf("%d%d%d",&x,&y,&z) 21 #define WN(x) printf("%d\n",x); 22 #define RE freopen("D.in","r",stdin) 23 #define WE freopen("huzhi.txt","w",stdout) 24 #define mp make_pair 25 #define pb push_back 26 #define pf push_front 27 #define ppf pop_front 28 #define ppb pop_back 29 typedef long long ll; 30 typedef unsigned long long ull; 31 32 const double pi=acos(-1.0); 33 const double eps=1e-10; 34 35 const int maxn=555; 36 37 int n,m,mod; 38 39 int a[maxn][maxn]; 40 41 int r[maxn],c[maxn]; 42 43 ll f[maxn][maxn]; 44 45 inline ll gank(const int &w1, const int &w0){ 46 //printf("%d,%d\n",w1,w0); 47 if(f[w1][w0] != -1)return f[w1][w0]; 48 ll re=0; 49 if(w0>1){ 50 re+=w0*(w0-1)/2 * gank(w1+2,w0-2); 51 re%=mod; 52 } 53 if(w0>0 && w1>0){ 54 re+=w0*w1 * gank(w1,w0-1); 55 re%=mod; 56 } 57 if(w1>1){ 58 re+=w1*(w1-1)/2 * gank(w1-2,w0); 59 re%=mod; 60 } 61 f[w1][w0]=re; 62 return re; 63 } 64 65 ll farm(){ 66 int i,j,k; 67 // REP(i,n){ 68 // REP(j,n)printf("%d ",a[i][j]); 69 // puts(""); 70 // } 71 mz(r); 72 mz(c); 73 REP(i,m)REP(j,n){ 74 if(a[i][j]){ 75 r[i]++; 76 c[j]++; 77 } 78 } 79 REP(i,n){ 80 if(r[i]>2 || c[i]>2)return 0; 81 } 82 REP(i,m) if(r[i]!=2)return 0; 83 int ww[3]={0}; 84 REP(i,n){ 85 ww[c[i]]++; 86 } 87 ll ans=0; 88 mf1(f); 89 f[0][0]=1; 90 ans = gank(ww[1], ww[0]); 91 return ans; 92 } 93 94 int main(){ 95 char c; 96 int i,j; 97 RD3(n,m,mod); 98 mf1(a); 99 REP(i,m){ 100 REP(j,n){ 101 do{c=getchar();}while(c!='0' && c!='1'); 102 a[i][j] = c-'0'; 103 } 104 } 105 printf("%I64d\n",farm()); 106 return 0; 107 }