本渣清明节 闲里偷忙 做了一下codejam

水平不出意外的在投稿之后一落千丈

后两题的hidden test竟然都挂了

A. Foregone Solution

水题,稍微判断一下特殊情况(比如1000, 5000这种)就好了

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstdlib>
  4. #include <cmath>
  5. #include <climits>
  6. #include <cstring>
  7. #include <vector>
  8. #include <list>
  9. #include <queue>
  10. #include <stack>
  11. #include <map>
  12. #include <set>
  13. #include <bitset>
  14. #include <algorithm>
  15. #include <functional>
  16. // #include <assert.h>
  17. #include <iomanip>
  18. using namespace std;
  19. const int N = 7005;
  20. const int M = 2e5 + 5;
  21. const int INF = 0x3f3f3f3f;
  22. const int MOD = 1000000007;
  23. typedef long long ll;
  24. char num[105];
  25. char a[105];
  26. char b[105];
  27. int main() {
  28. int _;
  29. scanf("%d", &_);
  30. for(int cas = 1; cas <= _; ++cas) {
  31. scanf("%s", num);
  32. bool flag = true;
  33. for(int i = 0, len = strlen(num); i < len; ++i) {
  34. if(num[i] == '4') {
  35. a[i] = '2';
  36. b[i] = '2';
  37. flag = false;
  38. } else {
  39. a[i] = num[i];
  40. b[i] = '0';
  41. }
  42. }
  43. if(flag == true) {
  44. int pos = -1;
  45. for(int i = strlen(num) - 1; i >= 0; --i) {
  46. if(num[i] != '0') {
  47. pos = i;
  48. // if(num[i] == '1') {
  49. // hasOne = true;
  50. // }
  51. break;
  52. }
  53. }
  54. int hasOne = false;
  55. for(int i = 0, len = strlen(num); i < len; ++i) {
  56. if(i < pos) {
  57. a[i] = num[i];
  58. b[i] = '0';
  59. } else if(i == pos) {
  60. if(num[i] == '5') {
  61. a[i] = '3';
  62. b[i] = '2';
  63. } else if(num[i] == '1' && i != strlen(num) - 1) {
  64. a[i] = '0';
  65. b[i] = '0';
  66. hasOne = true;
  67. } else {
  68. a[i] = num[i] - 1;
  69. b[i] = '1';
  70. }
  71. } else {
  72. if(hasOne) {
  73. a[i] = '9';
  74. b[i] = (i == strlen(num) - 1) ? '1' :'0';
  75. } else {
  76. a[i] = num[i];
  77. b[i] = '0';
  78. }
  79. }
  80. }
  81. }
  82. printf("Case #%d: ", cas);
  83. for(int i = 0, len = strlen(num), flag = true; i < len; ++i) {
  84. if(a[i] == '0' && flag) {
  85. } else {
  86. flag = false;
  87. printf("%c", a[i]);
  88. }
  89. }
  90. printf(" ");
  91. for(int i = 0, len = strlen(num), flag = true; i < len; ++i) {
  92. if(b[i] == '0' && flag) {
  93. } else {
  94. flag = false;
  95. printf("%c", b[i]);
  96. }
  97. }
  98. printf("\n");
  99. }
  100. return 0;
  101. }

B. You Can Go Your Own Way

水题,直接和她反着来就好了

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstdlib>
  4. #include <cmath>
  5. #include <climits>
  6. #include <cstring>
  7. #include <vector>
  8. #include <list>
  9. #include <queue>
  10. #include <stack>
  11. #include <map>
  12. #include <set>
  13. #include <bitset>
  14. #include <algorithm>
  15. #include <functional>
  16. // #include <assert.h>
  17. #include <iomanip>
  18. using namespace std;
  19. const int N = 7005;
  20. const int M = 2e5 + 5;
  21. const int INF = 0x3f3f3f3f;
  22. const int MOD = 1000000007;
  23. typedef long long ll;
  24. char seq[100005];
  25. char result[100005];
  26. int main() {
  27. int _;
  28. scanf("%d", &_);
  29. for(int cas = 1; cas <= _; ++cas) {
  30. int n;
  31. scanf("%d %s", &n, seq);
  32. for(int i = 0, len = strlen(seq); i < len; ++i) {
  33. if(seq[i] == 'S')
  34. result[i] = 'E';
  35. else
  36. result[i] = 'S';
  37. }
  38. printf("Case #%d: ", cas);
  39. for(int i = 0, len = strlen(seq); i < len; ++i) {
  40. printf("%c", result[i]);
  41. }
  42. printf("\n");
  43. }
  44. return 0;
  45. }

C. Cryptopangrams

大家都知道求下相邻的数的gcd,然后去重,排序

有个小坑就是,序列当中可能相邻的数是相同的,也就意味着有原始密码有a,b,a这种。需要找到一个相邻的数不相同的,然后反推其他的所有

其次就是大数,c++模版不好找,不如写java, python

  1. import java.io.*;
  2. import java.util.*;
  3. import java.math.*;
  4. public class Solution {
  5. Scanner in = new Scanner(new BufferedInputStream(System.in));
  6. PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));
  7. BigInteger seq[] = new BigInteger[105];
  8. BigInteger prime[] = new BigInteger[105];
  9. // BigInteger num[] = new BigInteger[105];
  10. int lower_bound(BigInteger[] nums, int begin, int end, BigInteger value) {
  11. while (begin < end) {
  12. int mid = begin + (end - begin) / 2;
  13. if (nums[mid].compareTo(value) == -1) {
  14. begin = mid + 1;
  15. } else {
  16. end = mid;
  17. }
  18. }
  19. return begin;
  20. }
  21. void solve() {
  22. int casNum;
  23. casNum = in.nextInt();
  24. for(int cas = 1; cas <= casNum; ++cas) {
  25. BigInteger n;
  26. int l;
  27. n = in.nextBigInteger(); l = in.nextInt();
  28. for(int i = 0; i < l; ++i) {
  29. seq[i] = in.nextBigInteger();
  30. }
  31. int pos = -1;
  32. for(int i = 1; i < l; ++i) {
  33. if(seq[i].equals(seq[i-1]) == false) {
  34. prime[i] = seq[i].gcd(seq[i-1]);
  35. pos = i;
  36. break;
  37. }
  38. }
  39. for(int i = pos - 1; i >= 0; --i) {
  40. prime[i] = seq[i].divide(prime[i + 1]);
  41. }
  42. for(int i = pos + 1; i <= l; ++i) {
  43. prime[i] = seq[i-1].divide(prime[i-1]);
  44. }
  45. List<BigInteger> num=new ArrayList<>();
  46. for(int i = 0; i <= l; ++i) {
  47. num.add(prime[i]);
  48. }
  49. Set<BigInteger> uniqueGas = new HashSet<BigInteger>(num);
  50. // out.println(uniqueGas.size());
  51. // for(BigInteger i : uniqueGas) {
  52. // out.println(i);
  53. // }
  54. BigInteger[] result = uniqueGas.toArray(new BigInteger[0]);
  55. Arrays.sort(result, 0, uniqueGas.size());
  56. assert(uniqueGas.size() == 26);
  57. // printf("%d\n", (int)num.size());
  58. // for(int i = 0, len = num.size(); i < len; ++i) printf("%lld ", num[i]); printf("\n");
  59. out.printf("Case #%d: ", cas);
  60. for(int i = 0; i <= l; ++i) {
  61. int tt = lower_bound(result,0, uniqueGas.size(), prime[i]);
  62. out.printf("%c", tt + 'A');
  63. }
  64. out.printf("\n");
  65. }
  66. out.flush();
  67. }
  68. public static void main(String args[]) {
  69. new Solution ().solve();
  70. }
  71. }

D. Dat Bae

如果B没有小于等于15的限制的话,本渣觉得需要10次查询,这也是本渣的解法

不断二分01查询,比如0011, 0101这样查,就能最后判断出来每个位置在不在

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstdlib>
  4. #include <cmath>
  5. #include <climits>
  6. #include <cstring>
  7. #include <vector>
  8. #include <list>
  9. #include <queue>
  10. #include <stack>
  11. #include <map>
  12. #include <set>
  13. #include <bitset>
  14. #include <algorithm>
  15. #include <functional>
  16. #include <assert.h>
  17. #include <iomanip>
  18. using namespace std;
  19. const int N = 7005;
  20. const int M = 2e5 + 5;
  21. const int INF = 0x3f3f3f3f;
  22. const int MOD = 1000000007;
  23. typedef long long ll;
  24. vector<pair<int, int> > prepare;
  25. vector<pair<int, int> > solve;
  26. vector<int> preClip;
  27. vector<int> solveClip;
  28. int result[2005];
  29. char answer[2005];
  30. int main() {
  31. int _;
  32. scanf("%d", &_);
  33. for(int cas = 1; cas <= _; ++cas) {
  34. int n, b, f;
  35. scanf("%d %d %d", &n, &b, &f);
  36. prepare.clear();
  37. preClip.clear();
  38. prepare.push_back(make_pair(1, n));
  39. preClip.push_back(n - b);
  40. while(1) {
  41. solveClip.clear();
  42. solve.clear();
  43. int flag = false;
  44. int maxx = -1;
  45. for(int i = 0, len = prepare.size(); i < len; ++i) {
  46. int start = prepare[i].first; int end = prepare[i].second;
  47. // if(end == start) {
  48. // solve.push_back(make_pair(start, end));
  49. // } else {
  50. int mid = (start + end) / 2;
  51. solve.push_back(make_pair(start, mid));
  52. solve.push_back(make_pair(mid + 1, end));
  53. // }
  54. maxx = max(maxx, end - start);
  55. }
  56. if(maxx == 1) flag = true;
  57. for(int i = 0, len = solve.size(); i < len; ++i) {
  58. int start = solve[i].first; int end = solve[i].second;
  59. for(int j = start; j <= end; ++j) {
  60. printf("%d", (i % 2 == 0) ? 0 : 1);
  61. }
  62. }
  63. printf("\n");
  64. fflush(stdout);
  65. scanf("%s", answer);
  66. for(int i = 0, len = preClip.size(), pre = 0; i < len; ++i) {
  67. int pos = pre + preClip[i];
  68. for(int j = pre, endJ = pre + preClip[i]; j < endJ; ++j) {
  69. if(answer[j] == '1') {
  70. pos = j;
  71. break;
  72. }
  73. }
  74. solveClip.push_back(pos - pre);
  75. solveClip.push_back(preClip[i] - pos + pre);
  76. pre += preClip[i];
  77. }
  78. if(flag == true) break;
  79. // assert(solve.size() == solveClip.size());
  80. // for(int i = 0, len = solve.size(); i < len; ++i) {
  81. // int start = solve[i].first; int end = solve[i].second; int val = solveClip[i];
  82. // printf("%d %d %d: ", start, end, val);
  83. // } printf("\n");
  84. prepare.swap(solve);
  85. preClip.swap(solveClip);
  86. }
  87. assert(solve.size() == solveClip.size());
  88. for(int i = 0, len = solve.size(); i < len; ++i) {
  89. int start = solve[i].first; int end = solve[i].second; int val = solveClip[i];
  90. if(start == end) {
  91. if(val == 1) {
  92. result[start] = 1;
  93. } else {
  94. result[start] = 0;
  95. }
  96. }
  97. }
  98. for(int i = 1, fir = true; i <= n; ++i) {
  99. if(result[i] == 0) {
  100. if(fir) fir = false;
  101. else printf(" ");
  102. printf("%d", i - 1);
  103. }
  104. }
  105. printf("\n");
  106. fflush(stdout);
  107. int basa;
  108. scanf("%d", &basa);
  109. }
  110. return 0;
  111. }
  112. /*
  113. 1000
  114. 5 2 10
  115. answer(0 3)
  116. 2 1 10
  117. answer(0)
  118. */

但是如果只是5次查询,这样不行。反过来通过1,2,4,8为界的查询方式,判断一个16个数的组的borken情况。

如下所示

0101010101010101

0011001100110011

0000111100001111

0000000011111111

可以每16个数一个组,因为我们知道最多15个broken,每组必会有数保留,那么我们就可以判断出每个数是在哪个组当中的。贴下别人的代码

  1. #include <iostream>
  2. #include <cstdio>
  3. #include <cstdlib>
  4. #include <cmath>
  5. #include <climits>
  6. #include <cstring>
  7. #include <vector>
  8. #include <list>
  9. #include <queue>
  10. #include <stack>
  11. #include <map>
  12. #include <set>
  13. #include <bitset>
  14. #include <algorithm>
  15. #include <functional>
  16. #include <assert.h>
  17. #include <iomanip>
  18. using namespace std;
  19. const int N = 7005;
  20. const int M = 2e5 + 5;
  21. const int INF = 0x3f3f3f3f;
  22. const int MOD = 1000000007;
  23. typedef long long ll;
  24. void solve(){
  25. int F = 4;
  26. int n, b, fake_f;
  27. cin >> n >> b >> fake_f;
  28. // assert(fake_f >= F);
  29. for(int f = 0; f < F; f++){
  30. string g;
  31. for(int i = 0; i < n; i++){
  32. g += (char)('0' + ((i >> f) & 1));
  33. }
  34. cout << g << '\n' << flush;
  35. }
  36. vector<int> answers(n-b);
  37. for(int f = 0; f < F; f++){
  38. string res;
  39. cin >> res;
  40. for(int i = 0; i < n-b; i++){
  41. answers[i] ^= (res[i] - '0') << f;
  42. }
  43. // for(int i = 0; i < n - b; ++i) {
  44. // printf("%d ", answers[i]);
  45. // } printf("\n");
  46. }
  47. vector<int> broken;
  48. int z = 0;
  49. for(int i = 0; i < n-b; i++){
  50. while((z & 15) != answers[i]){
  51. cout << z << ' ';
  52. z++;
  53. }
  54. z++;
  55. }
  56. while(z < n){
  57. cout << z << ' ';
  58. z++;
  59. }
  60. cout << '\n';
  61. cout << flush;
  62. int res;
  63. cin >> res;
  64. }
  65. int main(){
  66. int T;
  67. cin >> T;
  68. for(int t = 1; t <= T; t++){
  69. solve();
  70. }
  71. }
  72. /*
  73. 1000
  74. 5 2 10
  75. 01010
  76. 00110
  77. 00001
  78. 00000
  79. 00000
  80. 100
  81. 010
  82. 001
  83. 000
  84. 000
  85. answer(0 3)
  86. 000
  87. 010
  88. 001
  89. 000
  90. 000
  91. answer(0 3)
  92. 2 1 10
  93. answer(0)
  94. */

Codejam Qualification Round 2019的更多相关文章

  1. Google Code Jam Africa 2010 Qualification Round Problem B. Reverse Words

    Google Code Jam Africa 2010 Qualification Round Problem B. Reverse Words https://code.google.com/cod ...

  2. Google Code Jam Africa 2010 Qualification Round Problem A. Store Credit

    Google Code Jam Qualification Round Africa 2010 Problem A. Store Credit https://code.google.com/code ...

  3. Facebook Hacker Cup 2014 Qualification Round 竞赛试题 Square Detector 解题报告

    Facebook Hacker Cup 2014 Qualification Round比赛Square Detector题的解题报告.单击这里打开题目链接(国内访问需要那个,你懂的). 原题如下: ...

  4. DP VK Cup 2012 Qualification Round D. Palindrome pairs

    题目地址:http://blog.csdn.net/shiyuankongbu/article/details/10004443 /* 题意:在i前面找回文子串,在i后面找回文子串相互配对,问有几对 ...

  5. Facebook Hacker Cup 2014 Qualification Round

    2014 Qualification Round Solutions 2013年11月25日下午 1:34 ...最简单的一题又有bug...自以为是真是很厉害! 1. Square Detector ...

  6. [C++]Store Credit——Google Code Jam Qualification Round Africa 2010

    Google Code Jam Qualification Round Africa 2010 的第一题,很简单. Problem You receive a credit C at a local ...

  7. dp - Google Code jam Qualification Round 2015 --- Problem B. Infinite House of Pancakes

    Problem B. Infinite House of Pancakes Problem's Link:   https://code.google.com/codejam/contest/6224 ...

  8. Google Code jam Qualification Round 2015 --- Problem A. Standing Ovation

    Problem A. Standing Ovation Problem's Link:   https://code.google.com/codejam/contest/6224486/dashbo ...

  9. Google Code Jam 2009 Qualification Round Problem C. Welcome to Code Jam

    本题的 Large dataset 本人尚未解决. https://code.google.com/codejam/contest/90101/dashboard#s=p2 Problem So yo ...

随机推荐

  1. 模拟prompt

    <!DOCTYPE html"> <meta http-equiv="Content-Type" content="text/html; ch ...

  2. [翻译] 提升树算法的介绍(Introduction to Boosted Trees)

    [翻译] 提升树算法的介绍(Introduction to Boosted Trees) 1. 有监督学习的要素 XGBoost 适用于有监督学习问题.在此类问题中,我们使用多特征的训练数据集 \(x ...

  3. 元素视差方向移动jQuery插件-类似github 404页面效果

    原文地址:http://www.xuanfengge.com/shake.html 前言: 视差滚动,大家也许并不陌生.但是对于视差方向移动,你是否有见过效果呢?看官请进来瞧瞧~ demo : 轩枫阁 ...

  4. IIS7.5全站301跳转,内页+带参数url,这才是真正的全站跳转

    说好的转型安全领域,可是我还是忍不住要给大家分享这个教程.因为这个问题很常见,大部分人都遇到了(可能你没注意),困扰了我很久,相信这是一篇真正适合你的IIS301跳转教程. 背景 说到301跳转,作为 ...

  5. day4-课堂代码

    # ---------------------------------------------------------------------- # def my_function1(name, ad ...

  6. DFT scan chain

    现代集成电路的制造工艺越来越先进,但是在生产过程中的制造缺陷也越来越难以控制,甚至一颗小小的PM2.5就可能导致芯片报废,为了能有效的检测出生产中出现的废片,需要用到扫描链测试(scan chain) ...

  7. 理解javascript观察者模式(订阅者与发布者)

    什么是观察者模式? 观察者模式又叫做发布订阅模式,它定义了一种一对多的关系,让多个观察者对象同时监听某一个主题对象,这个主题对象的状态发生改变时就会通知所有观察着对象.它是由两类对象组成,主题和观察者 ...

  8. JBOSS安装与配置搭建本地项目环境(方便前端开发调式)

    JBOSS安装与配置搭建本地项目环境  什么是JBOSS? JBOSS是EJB的服务器,就像Tomcat是JSP服务器一样,就是服务器的一种. 环境搭建如下: 一:首先安装JDK,配置环境变量(PAT ...

  9. Android 使用正则表达式验证身份证号是否符合规则

    我国当前的身份证号分为三种: 一.15位身份证号 二.18位身份证号(前17位位数字,最后一位为字母x) 三.18为身份证号(18位都是数字) 具体验证请参考下面代码: /** * 验证身份证号是否符 ...

  10. odoo明细表汇总数据

    一.在主表中#改动地方 总结算金额 求和:def _get_subtotal2(self, cr, uid, ids, field_name, arg, context=None): # 初始化 re ...