2019 年百度之星·程序设计大赛 - 初赛二

1001 度度熊与数字

#pragma comment(linker, "/STACK:36777216")

#include <bits/stdc++.h>

#define REP(i,n) for(int i=0;i<int(n);++i)
#define FOR(i,a,b) for(int i=int(a);i<int(b);++i)
#define DWN(i,b,a) for(int i=int(b);i>=int(a);--i)

/// type define
typedef double DB;
typedef long long LL;
typedef std::vector<int>VI;
typedef std::vector<LL>VLL;
typedef std::pair<int, int>PII;
typedef std::pair<LL, LL>PLL;
typedef std::vector<PII >VPII;

/// const
static const double eps = 1e-8;
static const double pi = acos(-1.0);
static const int inf = 0x3f3f3f3f;
static const LL INF = 0x3f3f3f3f3f3f3f3f;

/// common statement
#define PB push_back
#define MP std::make_pair
#define fi first
#define se second

/****************************************************************/

const int maxn = 2e6 + 7;
const LL MOD = 1e9 + 7;

bool chk(LL x, LL n) {
  int s = 0;
  while(n) {
    s += n % 10;
    n /= 10;
  }
  return s % x == 0;
}

void solve() {
  /*********** start your code here. ************/
  LL n;
  std::cin >> n;
  VI ans;
  for(LL x = 1; x * x <= n; ++x) {
    if(n % x)
      continue;
    if(chk(x, n))
      ans.PB(x);
    if(chk(n / x, n) && x != n / x)
      ans.PB(n / x);
  }
  std::cout << ans.size() << "\n";
  std::sort(ans.begin(),ans.end());
  for(int i = 0, sz = ans.size(); i < sz; ++i)
    std::cout << ans[i] << (i == sz - 1 ? "\n" : " ");
}

void init() {

}

int main() {
  //std::ios::sync_with_stdio(false);
  //std::cin.tie(0);
  //init();
  int T;
  std::cin >> T;
  while(T--)
    solve();
  return 0;
}

1002 度度熊与排列

#pragma comment(linker, "/STACK:36777216")

#include <bits/stdc++.h>

#define REP(i,n) for(int i=0;i<int(n);++i)
#define FOR(i,a,b) for(int i=int(a);i<int(b);++i)
#define DWN(i,b,a) for(int i=int(b);i>=int(a);--i)

/// type define
typedef double DB;
typedef long long LL;
typedef std::vector<int>VI;
typedef std::vector<LL>VLL;
typedef std::pair<int, int>PII;
typedef std::pair<LL, LL>PLL;
typedef std::vector<PII >VPII;

/// const
static const double eps = 1e-8;
static const double pi = acos(-1.0);
static const int inf = 0x3f3f3f3f;
static const LL INF = 0x3f3f3f3f3f3f3f3f;

/// common statement
#define PB push_back
#define MP std::make_pair
#define fi first
#define se second

/****************************************************************/

const int maxn = 1e3 + 7;
const LL MOD = 1e9 + 7;

int mat[maxn][maxn];
void parse(std::string is, std::string os) {
  int sz = is.length();
  REP(i, sz)REP(j, sz)if(is[i] == os[j])
    mat[i][j]++;
}

std::vector<int>edges[maxn];
bool vis[maxn];
int boy[maxn];
int gril[maxn];

bool dfs(int v) {
  int len = edges[v].size();
  for(int i = 0; i < len; i++) {
    int end = edges[v][i];
    if(!vis[end]) {
      vis[end] = 1;
      if(boy[end] == 0 || dfs(boy[end])) {
        boy[end] = v;
        gril[v] = end;
        return 1;
      }
    }
  }
  return 0;
}

void solve() {
  /*********** start your code here. ************/
  int n, m;
  std::cin >> n >> m;
  std::cin.get();
  REP(i, maxn)REP(j, maxn) mat[i][j] = 0;
  for(int i = 0; i < n; ++i) {
    std::string is, os;
    getline(std::cin, is);
    getline(std::cin, os);
    parse(is, os);
  }

  REP(i,m) edges[i].clear();
  REP(i, m)REP(j, m) {
    mat[i][j] = mat[i][j] == n ? n : 0;
    if(mat[i][j])
      edges[i].PB(j);
  }
  //REP(i,m) REP(j,m) std::cout << mat[i][j] << (j == m-1 ? "\n" : " ");

  int ans = 0;
  memset(boy,0,sizeof(boy));
  for(int i = m - 1; i >= 0; i--) {
    memset(vis, 0, sizeof(vis));
    if(dfs(i)) {
      ans++;
    }
  }

  if(ans != m) {
    std::cout << "-1\n";
  } else {
    REP(i,m)std::cout << gril[i]+1 << (i == m-1 ? "\n" : " ");
  }
}

void init() {

}

int main() {
  //std::ios::sync_with_stdio(false);
  //std::cin.tie(0);
  //init();
  int T;
  std::cin >> T;
  while(T--)
    solve();
  return 0;
}

1003 度度熊与运算式 1

#pragma comment(linker, "/STACK:36777216")

#include <bits/stdc++.h>

#define REP(i,n) for(int i=0;i<int(n);++i)
#define FOR(i,a,b) for(int i=int(a);i<int(b);++i)
#define DWN(i,b,a) for(int i=int(b);i>=int(a);--i)

/// type define
typedef double DB;
typedef long long LL;
typedef std::vector<int>VI;
typedef std::vector<LL>VLL;
typedef std::pair<int, int>PII;
typedef std::pair<LL, LL>PLL;
typedef std::vector<PII >VPII;

/// const
static const double eps = 1e-8;
static const double pi = acos(-1.0);
static const int inf = 0x3f3f3f3f;
static const LL INF = 0x3f3f3f3f3f3f3f3f;

/// common statement
#define PB push_back
#define MP std::make_pair
#define fi first
#define se second

/****************************************************************/

const int maxn = 1e6 + 7;
const LL MOD = 1e9 + 7;

VI ans(maxn);
int cal(const char *str) {
  int t, cur = 0;
  ans.clear();
  ans.PB(1);
  for(int i = 0, sz = strlen(str); i < sz; i++) {
    switch(str[i]) {
    case '?':
      ans[cur]++;
      break;
    case '^':
      ans.PB(1);
      cur++;
      break;
    }
  }
  int ret(0);
  //for(auto i : ans) std::cout << i << " ";
  //std::cout << "\n";
  int b[32] = {0};
  memset(b, 0, sizeof(b));
  for(auto i : ans) {
    for(int j = 30; j > 0; --j)
      if(i & (1 << j))
        b[j]++;
  }
  for(int i = 30; i > 0; --i) {
    if(b[i] ) {
      b[i - 1] += (b[i] - 1)*2;
      b[i] = 1, ret |= (1 << i);
    }
  }
  ret |= ((strlen(str) + 1 & 1) ? 1 : 0);
  return ret;
}

void solve() {
  /*********** start your code here. ************/
  std::string str, fs;
  getline(std::cin, str);
  std::cout << cal(str.c_str()) << "\n";
}

void init() {

}

int main() {
  std::ios::sync_with_stdio(false);
  std::cin.tie(0);
  //init();
  int T;
  std::cin >> T;
  std::cin.get();
  while(T--)
    solve();
  return 0;
}

原文地址:https://www.cnblogs.com/Forgenvueory/p/11379432.html

时间: 2024-11-01 21:27:28

2019 年百度之星·程序设计大赛 - 初赛二的相关文章

2019 年百度之星&#183;程序设计大赛 - 初赛三

P.S:关于初赛二,在高铁上打代码真是奇怪的体验!!! 1003,1004的题解很不错,学习了! =========================================== 一开场把所有的题目看了一遍,这题面风格,感觉凉凉.还好,往下做时,题目不是太坑. 1002 floyd转dijkstra+堆优化,感觉是套路题了 1 #include <cstdio> 2 #include <cstdlib> 3 #include <cmath> 4 #include

2019年百度之星&#183;程序设计大赛 初赛一 题解

1001 Polynomial:若第一个多项式的次数大于第二个,就是1/0,若小于就是0/1,若等于就是第一个多项式最高次项系数/第二个多项式最高次项系数. 1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 #define rep(i,l,r) for (int i=(l); i<=(r); i++) 5 typedef long long ll; 6 using namespace st

2019 年百度之星&#183;程序设计大赛 - 初赛三 1003

题意: 求\(\sum_{i=1}^n\sum_{j=1}^m \mu({lcm(i,j)})\). 思路: 首先\(lcm(i,j)=\frac{ij}{gcd(i,j)}\),不妨有\(lcm(i,j)\)无平方因子,那么就有\(gcd(\frac{i}{gcd(i,j)},j)\)互质,所以\(\mu(lcm(i,j))=\mu(i)\mu(j)\mu(gcd(i,j))\):如果\(lcm(i,j)\)有平方因子的话,不影响答案. 注意\(mu\)的值和质因子个数有关,所以我们可以直接将

2014年百度之星程序设计大赛 - 初赛(第一轮) hdu Grids (卡特兰数 大数除法取余 扩展gcd)

题目链接 分析:打表以后就能发现时卡特兰数, 但是有除法取余. f[i] = f[i-1]*(4*i - 2)/(i+1); 看了一下网上的题解,照着题解写了下面的代码,不过还是不明白,为什么用扩展gcd, 不是用逆元吗.. 网上还有别人的解释,没看懂,贴一下: (a / b) % m = ( a % (m*b)) / b 笔者注:鉴于ACM题目特别喜欢M=1000000007,为质数: 当gcd(b,m) = 1, 有性质: (a/b)%m = (a*b^-1)%m, 其中b^-1是b模m的逆

2014年百度之星程序设计大赛 - 初赛(第二轮)

1001 暴力 #include <cstdio> #include <algorithm> #include <cstring> using namespace std; const int maxn = 100100; int ll[maxn], rr[maxn]; struct node { int x, y, bj; }e[maxn]; int main() { int cas = 1; int T; scanf("%d", &T);

2014年百度之星程序设计大赛 - 初赛(第二轮)Chess

题目描述:小度和小良最近又迷上了下棋.棋盘一共有N行M列,我们可以把左上角的格子定为(1,1),右下角的格子定为(N,M).在他们的规则中,"王"在棋盘上的走法遵循十字路线.也就是说,如果"王"当前在(x,y)点,小度在下一步可以移动到(x+1, y), (x-1, y), (x, y+1), (x, y-1), (x+2, y), (x-2, y), (x, y+2), (x, y-2) 这八个点中的任意一个. 小度觉得每次都是小良赢,没意思.为了难倒小良,他想出

2017&quot;百度之星&quot;程序设计大赛 - 初赛(A)

2017"百度之星"程序设计大赛 - 初赛(A) hdu6108    求出 n-1 的因子个数即可 #include<bits/stdc++.h> using namespace std; #pragma comment(linker, "/STACK:102400000,102400000") #define rep(i,a,b) for (int i=a; i<=b; ++i) #define per(i,b,a) for (int i=b;

HDU 6114 Chess 【组合数】(2017&quot;百度之星&quot;程序设计大赛 - 初赛(B))

Chess Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 513    Accepted Submission(s): 319 Problem Description 車是中国象棋中的一种棋子,它能攻击同一行或同一列中没有其他棋子阻隔的棋子.一天,小度在棋盘上摆起了许多車--他想知道,在一共N×M个点的矩形棋盘中摆最多个数的車使其互不攻

HDU 6119 小小粉丝度度熊 【预处理+尺取法】(2017&quot;百度之星&quot;程序设计大赛 - 初赛(B))

小小粉丝度度熊 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1572    Accepted Submission(s): 513 Problem Description 度度熊喜欢着喵哈哈村的大明星--星星小姐. 为什么度度熊会喜欢星星小姐呢? 首先星星小姐笑起来非常动人,其次星星小姐唱歌也非常好听. 但这都不是最重要的,最重要的是