[关闭]
@994495jj 2017-05-31T11:47:17.000000Z 字数 8199 阅读 1142

FZU周练-0529新队员场题解

(ACM)数学----博弈论 (ACM)贪心 (ACM)构造



题目链接

A. CodeForces 787C Berzerk(博弈论)

题意

题解

代码

  1. #include<cstdio>
  2. #include<queue>
  3. #include<cstring>
  4. using namespace std;
  5. #define mp make_pair
  6. const int N=7005;
  7. queue<pair<int,int> > q;
  8. int k[2],a[2][N],f[2][N],deg[2][N];
  9. void print(int x) {
  10. if(x==1) printf("Win ");
  11. else if(x==0) printf("Lose ");
  12. else printf("Loop ");
  13. }
  14. int main() {
  15. int n;
  16. while(~scanf("%d",&n)) {
  17. ///init
  18. memset(f,-1,sizeof(f));
  19. int tt=q.size();
  20. while(tt--) q.pop();
  21. ///read
  22. scanf("%d",&k[0]);
  23. for(int i=1;i<=k[0];++i) scanf("%d",&a[0][i]);
  24. scanf("%d",&k[1]);
  25. for(int i=1;i<=k[1];++i) scanf("%d",&a[1][i]);
  26. ///get deg
  27. for(int i=0;i<n;++i) deg[0][i]=k[0];
  28. for(int i=0;i<n;++i) deg[1][i]=k[1];
  29. ///bfs
  30. f[0][n-1]=f[1][n-1]=0;
  31. q.push(mp(0,n-1));
  32. q.push(mp(1,n-1));
  33. while(!q.empty()) {
  34. int now=q.front().first;
  35. int pos=q.front().second;
  36. q.pop();
  37. int prn=1-now;
  38. for(int i=1;i<=k[prn];++i) {
  39. int prp=(pos-a[prn][i]+n)%n;
  40. if(f[prn][prp]!=-1) continue;
  41. if(f[now][pos]) {
  42. --deg[prn][prp];
  43. if(deg[prn][prp]==0) {
  44. f[prn][prp]=0;
  45. q.push(mp(prn,prp));
  46. }
  47. } else {
  48. f[prn][prp]=1;
  49. q.push(mp(prn,prp));
  50. }
  51. }
  52. }
  53. ///print
  54. for(int i=0;i<=1;++i) {
  55. for(int j=0;j<n-1;++j) {
  56. print(f[i][j]);
  57. }
  58. puts("");
  59. }
  60. }
  61. return 0;
  62. }

B. CodeForces 794C Naming Company(贪心)

题意

题解

代码

  1. #include<cstdio>
  2. #include<cmath>
  3. #include<cstring>
  4. #include<algorithm>
  5. using namespace std;
  6. const int N=300005;
  7. char s1[N],s2[N],s[N];
  8. int main() {
  9. int n,h;
  10. while(~scanf("%s%s",s1,s2)) {
  11. int n=strlen(s1);
  12. sort(s1,s1+n);
  13. sort(s2,s2+n);
  14. ///zeng
  15. int n2=n/2,n1=n-n2;
  16. s1[n1]='\0';
  17. ///jian
  18. for(int i=0;i<n2;++i) s2[i]=s2[n-i-1];
  19. s2[n2]='\0';
  20. int p=0,p1=0,p2=0;
  21. for(;p<n;++p) {
  22. if(s1[p1]>=s2[p2]) break;
  23. if(p&1) {
  24. s[p]=s2[p2++];
  25. } else {
  26. s[p]=s1[p1++];
  27. }
  28. }
  29. int q=n-1,q1=n1-1,q2=n2-1;
  30. for(;p<n;++p) {
  31. if(p&1) {
  32. s[q--]=s2[q2--];
  33. } else {
  34. s[q--]=s1[q1--];
  35. }
  36. }
  37. s[n]='\0';
  38. printf("%s\n",s);
  39. }
  40. return 0;
  41. }

C. CodeForces 798A Mike and palindrome(水题)

题意

题解

注意

代码

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<vector>
  4. #include<map>
  5. #include<iostream>
  6. #include<cstring>
  7. #include<queue>
  8. using namespace std;
  9. #define mp make_pair
  10. #define fi first
  11. #define se second
  12. int main() {
  13. string s;
  14. while(cin>>s) {
  15. int len=s.length();
  16. int cnt=0;
  17. for(int i=0;;++i) {
  18. int j=len-1-i;
  19. if(i>=j) break;
  20. if(s[i]!=s[j]) ++cnt;
  21. }
  22. if(cnt==1||(cnt==0&&(len&1))) puts("YES");
  23. else puts("NO");
  24. }
  25. return 0;
  26. }

D. CodeForces 798B Mike and strings(水题)

题意

题解

注意

代码

  1. #include<cstdio>
  2. #include<algorithm>
  3. #include<string>
  4. #include<iostream>
  5. using namespace std;
  6. const int N=55;
  7. string s[N],tmp[N][N];
  8. int n,len;
  9. void gettmp(int t) {
  10. tmp[t][0]=s[t];
  11. for(int i=1;i<len;++i) {
  12. tmp[t][i]="";
  13. for(int j=i;j<len;++j) tmp[t][i]=tmp[t][i]+s[t][j];
  14. for(int j=0;j<i;++j) tmp[t][i]=tmp[t][i]+s[t][j];
  15. }
  16. }
  17. int solve() {
  18. int ans=n*len;
  19. for(int i=0;i<len;++i) {
  20. int res=0;
  21. for(int j=1;j<=n;++j) {
  22. int k;
  23. for(k=0;k<len;++k) {
  24. if(tmp[j][k]==tmp[1][i]) break;
  25. }
  26. if(k==len) return -1;
  27. res=res+k;
  28. }
  29. ans=min(ans,res);
  30. }
  31. return ans;
  32. }
  33. int main() {
  34. while(~scanf("%d",&n)) {
  35. ///read
  36. for(int i=1;i<=n;++i) cin>>s[i];
  37. ///get len
  38. len=s[1].length();
  39. ///get tmp
  40. for(int i=1;i<=n;++i) gettmp(i);
  41. ///print
  42. printf("%d\n",solve());
  43. }
  44. return 0;
  45. }

E. CodeForces 798C Mike and gcd problem

题意

题解

代码

  1. #include<cstdio>
  2. const int N=100005;
  3. int a[N];
  4. int gcd(int a,int b) {
  5. if(b==0) return a;
  6. return gcd(b,a%b);
  7. }
  8. int main() {
  9. int n;
  10. while(~scanf("%d",&n)) {
  11. ///read
  12. for(int i=1;i<=n;++i) scanf("%d",a+i);
  13. ///get d
  14. int d=a[1];
  15. for(int i=2;i<=n;++i) {
  16. d=gcd(d,a[i]);
  17. }
  18. ///
  19. if(d>1) {
  20. puts("YES\n0");
  21. continue;
  22. }
  23. ///solve
  24. int ans=0,now=0;
  25. for(int i=1;i<=n+1;++i) {
  26. if( a[i]%2 && a[i-1]%2 ) {
  27. ++now;
  28. } else if( a[i]%2 && a[i-1]%2==0 ) {
  29. now=1;
  30. } else if( a[i]%2==0 && a[i-1]%2 ) {
  31. ans=ans+now/2;
  32. if(now&1) ans+=2;
  33. }
  34. }
  35. ///print
  36. printf("YES\n%d\n",ans);
  37. }
  38. return 0;
  39. }

F. CodeForces 798D Mike and distribution(构造)

题意

题解

代码

  1. #include<cstdio>
  2. #include<algorithm>
  3. using namespace std;
  4. struct Node {
  5. int a,b,i;
  6. bool operator < (const Node &tmp) const {
  7. if(a==tmp.a) return i<tmp.i;
  8. return a>tmp.a;
  9. }
  10. }a[100005];
  11. int main() {
  12. ///
  13. int n;scanf("%d",&n);
  14. ///init
  15. for(int i=1;i<=n;++i) a[i].i=i;
  16. ///read
  17. for(int i=1;i<=n;++i) scanf("%d",&a[i].a);
  18. for(int i=1;i<=n;++i) scanf("%d",&a[i].b);
  19. ///solve
  20. sort(a+1,a+1+n);
  21. printf("%d\n%d",n/2+1,a[1].i);
  22. if(n%2==0) printf(" %d",a[n].i);
  23. for(int i=2;i+1<=n;i+=2) {
  24. printf(" %d",(a[i].b>a[i+1].b)?a[i].i:a[i+1].i);
  25. }
  26. puts("");
  27. return 0;
  28. }

G. CodeForces 765A Neverending competitions(水题)

题意

题解

代码

  1. #include <algorithm>
  2. #include <iostream>
  3. #include <cstring>
  4. #include <vector>
  5. #include <cstdio>
  6. #include <string>
  7. #include <cmath>
  8. #include <queue>
  9. #include <set>
  10. #include <map>
  11. using namespace std;
  12. typedef long long ll;
  13. typedef unsigned long long ull;
  14. typedef pair<int,int> pii;
  15. typedef pair<ll,ll> pll;
  16. #define mp make_pair
  17. #define pb push_back
  18. #define fi first
  19. #define se second
  20. #define lson l,m,rt<<1
  21. #define rson m+1,r,rt<<1|1
  22. #define de(x) cout << #x << "=" << x << endl
  23. int main() {
  24. int n;string s;scanf("%d",&n);
  25. for(int i=0;i<=n;++i) cin>>s;
  26. if(n&1) puts("contest");
  27. else puts("home");
  28. return 0;
  29. }

H. CodeForces 765B Code obfuscation(水题)

题意

题解

代码

  1. #include <algorithm>
  2. #include <iostream>
  3. #include <cstring>
  4. #include <vector>
  5. #include <cstdio>
  6. #include <string>
  7. #include <cmath>
  8. #include <queue>
  9. #include <set>
  10. #include <map>
  11. using namespace std;
  12. typedef long long ll;
  13. typedef unsigned long long ull;
  14. typedef pair<int,int> pii;
  15. typedef pair<ll,ll> pll;
  16. #define mp make_pair
  17. #define pb push_back
  18. #define fi first
  19. #define se second
  20. #define lson l,m,rt<<1
  21. #define rson m+1,r,rt<<1|1
  22. #define de(x) cout << #x << "=" << x << endl
  23. const int N=505;
  24. char s[N];
  25. int main() {
  26. scanf("%s",s);
  27. int n=strlen(s);
  28. int now='a';//现在要找的是now
  29. bool ans=1;
  30. for(int i=0;i<n;++i) {
  31. if(s[i]>now) {
  32. ans=0;
  33. break;
  34. }
  35. if(s[i]==now) ++now;
  36. }
  37. if(ans) puts("YES");
  38. else puts("NO");
  39. return 0;
  40. }

I. CodeForces 765C Table Tennis Game 2(水题)

题意

题解

代码

  1. #include <algorithm>
  2. #include <iostream>
  3. #include <cstring>
  4. #include <vector>
  5. #include <cstdio>
  6. #include <string>
  7. #include <cmath>
  8. #include <queue>
  9. #include <set>
  10. #include <map>
  11. using namespace std;
  12. typedef long long ll;
  13. typedef unsigned long long ull;
  14. typedef pair<int,int> pii;
  15. typedef pair<ll,ll> pll;
  16. #define mp make_pair
  17. #define pb push_back
  18. #define fi first
  19. #define se second
  20. #define lson l,m,rt<<1
  21. #define rson m+1,r,rt<<1|1
  22. #define de(x) cout << #x << "=" << x << endl
  23. int main() {
  24. int k,a,b;
  25. cin>>k>>a>>b;
  26. int ansa=a/k,ansb=b/k;
  27. if(a%k&&!ansb||b%k&&!ansa) {
  28. puts("-1");
  29. return 0;
  30. } else {
  31. printf("%d\n",ansa+ansb);
  32. }
  33. return 0;
  34. }

J. CodeForces 794B Cutting Carrot(水题)

题意

题解

注意

代码

  1. #include<cstdio>
  2. #include<cmath>
  3. int main() {
  4. int n,h;
  5. while(~scanf("%d%d",&n,&h)) {
  6. for(int i=1;i<n;++i) {
  7. printf("%.12lf%c",sqrt(i*1.0/n)*h,(i==n-1)?'\n':' ');
  8. }
  9. }
  10. return 0;
  11. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注