[关闭]
@994495jj 2017-05-31T11:45:42.000000Z 字数 3952 阅读 1440

codeforces contest 255

(ACM)动态规划 (ACM)数学----博弈论 (ACM)二分 (ACM)推公式



255C Almost Arithmetical Progression(dp)

题意

题解

代码

  1. ///solve 1
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<algorithm>
  5. using namespace std;
  6. const int N=4005;
  7. int a[N],d[N][N];
  8. int main() {
  9. int n;
  10. while(~scanf("%d",&n)) {
  11. ///init
  12. memset(d,0,sizeof(d));
  13. ///solve
  14. int ans=1;
  15. for(int i=1;i<=n;++i) {
  16. scanf("%d",a+i);
  17. for(int j=0,last=0;j<i;++j) {
  18. d[i][j]=max(d[i][j],d[j][last]+1);
  19. if(a[j]==a[i]) last=j;
  20. ans=max(ans,d[i][j]);
  21. }
  22. }
  23. ///print
  24. printf("%d\n",ans);
  25. }
  26. return 0;
  27. }
  1. ///solve 2
  2. #include <algorithm>
  3. #include <iostream>
  4. #include <cstring>
  5. #include <vector>
  6. #include <cstdio>
  7. #include <string>
  8. #include <cmath>
  9. #include <queue>
  10. #include <set>
  11. #include <map>
  12. using namespace std;
  13. typedef long long ll;
  14. typedef unsigned long long ull;
  15. typedef pair<int,int> pii;
  16. typedef pair<ll,ll> pll;
  17. #define mp make_pair
  18. #define pb push_back
  19. #define fi first
  20. #define se second
  21. #define lson l,m,rt<<1
  22. #define rson m+1,r,rt<<1|1
  23. #define de(x) cout << #x << "=" << x << endl
  24. const int N=4005;
  25. int a[N],b[N],res[N][N][2];
  26. int main() {
  27. int n;
  28. while(~scanf("%d",&n)) {
  29. ///init
  30. memset(res,0,sizeof(res));
  31. ///read
  32. for(int i=1;i<=n;++i) {
  33. scanf("%d",a+i);
  34. b[i]=a[i];
  35. }
  36. ///sort
  37. sort(a+1,a+1+n);
  38. ///
  39. int ans=1;
  40. a[n+1]=a[n]+1;a[0]=a[1];
  41. int now=0;
  42. for(int i=1;i<=n+1;++i) {
  43. if(a[i]==a[i-1]) ++now;
  44. else {
  45. ans=max(ans,now);
  46. now=1;
  47. }
  48. }
  49. ///get a
  50. int m=0;a[++m]=a[1];
  51. for(int i=2;i<=n;++i) {
  52. if(a[i]!=a[i-1]) a[++m]=a[i];
  53. }
  54. ///solve
  55. for(int i=1;i<=n;++i) {
  56. int p=lower_bound(a+1,a+1+m,b[i])-a;
  57. for(int j=1;j<=m;++j) {
  58. if(j==p) continue;
  59. if(res[p][j][0]==res[p][j][1]) ++res[p][j][0];
  60. if(res[j][p][1]==res[j][p][0]-1) ++res[j][p][1];
  61. }
  62. }
  63. ///print
  64. for(int i=1;i<=m;++i) {
  65. for(int j=1;j<=m;++j) {
  66. ans=max(ans,res[i][j][0]+res[i][j][1]);
  67. }
  68. }
  69. printf("%d\n",ans);
  70. }
  71. return 0;
  72. }

255D Furlo and Rublo and Game(二分+推公式)

题意

题解

代码

  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. ll n,x,y,c;
  24. ll ca(ll x,ll y,ll mid) {
  25. ll t=mid-x+1;if(t<0) t=0;
  26. ll ans=-t*t;
  27. t=mid-n-x+y;if(t<0) t=0;
  28. ans=ans+(1+t)*t/2;
  29. return ans;
  30. }
  31. ll calc(ll mid) {
  32. ll ans=1+mid*(1+mid)*2;
  33. ans=ans+ca(x,y,mid);
  34. ans=ans+ca(y,n+1-x,mid);
  35. ans=ans+ca(n+1-y,x,mid);
  36. ans=ans+ca(n+1-x,n+1-y,mid);
  37. return ans;
  38. }
  39. bool check(ll mid) {
  40. return calc(mid)>=c;
  41. }
  42. int main() {
  43. while(~scanf("%I64d%I64d%I64d%I64d",&n,&x,&y,&c)) {
  44. ll l=0,r=3e9,ans=0;
  45. while(l<=r) {
  46. ll mid=(l+r)>>1;
  47. if(check(mid)) {
  48. ans=mid;
  49. r=mid-1;
  50. } else {
  51. l=mid+1;
  52. }
  53. }
  54. printf("%I64d\n",ans);
  55. }
  56. return 0;
  57. }

255E Furlo and Rublo and Game(博弈论)

题意

题解

代码

  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 sg(ll x) {
  24. if(0<=x&&x<=3) return 0;
  25. if(4<=x&&x<=15) return 1;
  26. if(16<=x&&x<=81) return 2;
  27. if(82<=x&&x<=6723) return 0;
  28. if(6724<=x&&x<=50625) return 3;
  29. if(50626<=x&&x<=2562991875) return 1;
  30. return 2;
  31. }
  32. int main() {
  33. int n;
  34. while(~scanf("%d",&n)) {
  35. ll ans=0;
  36. for(int i=1;i<=n;++i) {
  37. ll x;scanf("%I64d",&x);
  38. ans^=sg(x);
  39. }
  40. if(ans) puts("Furlo");
  41. else puts("Rublo");
  42. }
  43. return 0;
  44. }
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注