COCI 2015、2016 1st round 题解(官方)










官方代码:

code-KARTE:

#include <cstdio>
#include <iostream>
#include <cstring>

using namespace std;

const int MAXB = 5;
const int MAXN = 20;

bool bio[MAXB][MAXN];

int getColor(char chr) {
  if (chr == 'P') return 0;
  if (chr == 'K') return 1;
  if (chr == 'H') return 2;
  if (chr == 'T') return 3;
}

int main(void) {
  string s;
  cin >> s;
  for (int i = 0; i < s.size(); i += 3) {
    int b = getColor(s[i]);
    int x = (s[i + 1] - '0') * 10 + s[i + 2] - '0';
    if (bio[b][x]) {
      printf("GRESKA\n");
      return 0;
    }
    bio[b][x] = true;
  }

  for (int i = 0; i < 4; ++i) {
    int cnt = 0;
    for (int j = 1; j <= 13; ++j)
      if (bio[i][j])
    ++cnt;
    printf("%d ",13 - cnt);
  }
  printf("\n");

  return 0;
}

code-AKCIJA:

#include <cstdio>
#include <algorithm>
using namespace std;

#define MAXN 100000
typedef long long llint;

int C[MAXN];

bool cmp(int a, int b) {
  return a > b;
}

int main(void) {
  int n; scanf ("%d", &n);
  for (int i = 0; i < n; i++) {
    scanf ("%d", &C[i]);
  }

  sort(C, C+n, cmp);

  llint sol = 0;
  for (int i = 0; i < n; i++) {
    if (i % 3 == 2) {
      continue;
    }
    sol += C[i];
  }

  printf ("%lld\n", sol);

  return 0;
}

code-BALONI:

#include <cstdio>
#include <algorithm>
#include <cstring>
#include <set>

using namespace std;

const int MAXN = 1 << 20;

int n;

set <int> S[MAXN];
int find (int pos, int v) {
  set<int>::iterator it = S[v].lower_bound(pos);
  if (it == S[v].end()) return -1;
  return *it;
}

int v[MAXN];

int main (void){
  scanf("%d", &n);
  for (int i = 0; i < n; ++i) {
    scanf("%d", &v[i]);
    S[v[i]].insert(i);
  }

  int ans = 0;
  for (int i = 0; i < n; ++i) {
   if (S[v[i]].count(i) == 0) continue;
   int pos = i;
   ++ans;
   while (pos >= 0) {
      S[v[pos]].erase(pos);
      pos = find(pos, v[pos] - 1);
   }
  }

  printf("%d\n", ans);

  return 0;
}

code-TOPOVI:

#include <cstdio>
#include <iostream>
#include <map>

using namespace std;

int n, k, q;
long long sol;
map <int, int> rcnt, ccnt;
map <int, int> rxor, cxor;
map <pair<int, int>, int> rook;

void moveRook(int r, int c, int val) {
  sol -= n - ccnt[rxor[r]];
  sol -= n - rcnt[cxor[c]];
  if (rxor[r] != cxor[c])
    sol += 1;

  --rcnt[rxor[r]];
  rxor[r] ^= val;
  ++rcnt[rxor[r]];

  --ccnt[cxor[c]];
  cxor[c] ^= val;
  ++ccnt[cxor[c]];

  sol += n - ccnt[rxor[r]];
  sol += n - rcnt[cxor[c]];
  if (rxor[r] != cxor[c])
    sol -= 1;

  rook[make_pair(r, c)] ^= val;
}

void init(void) {
  scanf("%d %d %d",&n,&k,&q);
  rcnt[0] = ccnt[0] = n;
  for (int i = 0; i < k; ++i) {
    int r, c, val;
    scanf("%d %d %d",&r,&c,&val);
    --r;
    --c;
    moveRook(r, c, val);
  }
}

void solve(void) {
  while (q-- > 0) {
    int r1, c1, r2, c2;
    scanf("%d %d %d %d",&r1,&c1,&r2,&c2);
    --r1; --c1;
    --r2; --c2;
    int rookValue = rook[make_pair(r1, c1)];
    moveRook(r1, c1, rookValue);
    moveRook(r2, c2, rookValue);
    printf("%lld\n",sol);
  }
}

int main(void) {
  init();
  solve();
  return 0;
}

code-RELATIVNOST:

#include <cstdio>
#include <cstring>
#include <vector>
#include <algorithm>

using namespace std;

typedef unsigned int uint;

const int MAXN = 100005;
const int MAXC = 21;
const int mod = 10007;

int n, c, q;
int a[MAXN];
int b[MAXN];
int T[2 * MAXN][MAXC];

void update(int x) {
  for (int i = 0; i <= c; ++i) T[x][i] = 0;

  for (int i = 0; i <= c; ++i)
    for (int j = 0; j <= c; ++j)
      T[x][min(i + j, c)] += (T[x * 2][i] * T[x * 2 + 1][j]) % mod;

  for (int i = 0; i <= c; ++i) T[x][i] %= mod;
}

void change(int x) {
  x += n;
  memset(T[x], 0, sizeof T[x]);
  T[x][1] = a[x - n] % mod;
  T[x][0] = b[x - n] % mod;

  for (x /= 2; x > 0; x /= 2) update(x);
}

int main(void) {
  scanf("%d%d", &n, &c);
  for (int i = 0; i < n; ++i) scanf("%d", &a[i]);
  for (int i = 0; i < n; ++i) scanf("%d", &b[i]);
  for (int i = 0; i < n; ++i) {
    T[i + n][0] = b[i] % mod;
    T[i + n][1] = a[i] % mod;
  }

  for (int i = n-1; i >= 1; --i)
    update(i);

  scanf("%d", &q);
  for (int i = 0; i < q; ++i) {
    int p;
    scanf("%d", &p); --p;
    scanf("%d%d", &a[p], &b[p]);
    change(p);
    printf("%d\n", T[1][c]);
  }

  return 0;
}

code-UZASTOPNI:

#include <cstdio>
#include <iostream>
#include <cstring>
#include <bitset>
#include <vector>

#define lo first
#define hi second

using namespace std;

using interval = pair<int, int>;

const int MAXN = 10010;
const int MAXK = 110;

int n, v[MAXN];
vector<int> e[MAXN];

vector<interval> s[MAXN];
vector<int> q[MAXK];
bitset<MAXK> flag[MAXN][MAXK];

void dfs(int x) {
  for (auto y : e[x])
    dfs(y);

  for (int i = 0; i < MAXK; ++i)
    q[i].clear();
  for (auto y : e[x]) {
    for (auto it : s[y])
      q[it.lo].push_back(it.hi);
  }

  for (int lo = MAXK - 1; lo >= 1; --lo) {
    if (lo == v[x]) {
      flag[x][lo] |= flag[x][lo + 1];
      flag[x][lo].set(lo);
    } else {
      for (auto hi : q[lo]) {
        if (hi < v[x] || lo > v[x]) {
          flag[x][lo] |= flag[x][hi + 1];
          flag[x][lo].set(hi);
        }
      }
    }

    for (int hi = MAXK - 1; hi >= lo; --hi)
      if (flag[x][lo].test(hi) && v[x] >= lo && v[x] <= hi) {
        s[x].emplace_back(lo, hi);
      }
  }
}

void init(void) {
  scanf("%d",&n);
  for (int i = 0; i < n; ++i)
    scanf("%d",&v[i]);
  for (int i = 0; i < n - 1; ++i) {
    int a, b;
    scanf("%d %d",&a,&b);
    --a;
    --b;
    e[a].push_back(b);
  }
}

void solve(void) {
  dfs(0);
  printf("%d\n",s[0].size());
}

int main(void) {
  init();
  solve();
  return 0;
}

原文地址:https://www.cnblogs.com/nth-element/p/11746270.html

时间: 2024-10-19 23:04:05

COCI 2015、2016 1st round 题解(官方)的相关文章

20145225《Java程序设计》 2015—2016年学期课程总结

20145225<Java程序设计> 2015—2016年学期课程总结 读书笔记链接汇总 1.2016年2月25日 <Java程序设计>课程准备之问卷调查 摘要: 一.你对自己的未来有什么规划?做了哪些准备? 答:未来就是找个好工作,在保证自己与父母生活条件良好的基础上,进一步的提高精神上的需求...... 2.2016年3月6日 <Java程序设计>第1周学习总结——小试牛刀 摘要: 教材学习内容总结 1.java语言概述:一门高级编程语言. 2.java语言的三种技

HeyWeGo小组《Java程序设计》 2015—2016年学期团队项目总结

HeyWeGo小组<Java程序设计> 2015—2016年学期团队项目总结 题目简介 一个简单的扫雷小游戏,在12*12的方格盘上,首先可以设定雷的个数,然后点击开始程序就会随机布雷,开始游戏后如果点到雷就会显示游戏结束,如果没有,会出现数字表示周围一圈雷的个数,以此推理当扫出所有雷将显示游戏胜利. 游戏项目规划: 确定游戏中方块格子的个数 确定游戏中地雷的个数(初始10个),完成布雷 计算每个方块周围的雷数,在方块周围本身没有地雷的情况下,统计周围地雷的个数 若周围没有地雷则翻开周围的空白

Dynamics XRM Tools 2015 2016

Download Link: Dynamics XRM Tools 2015/2016 Overview Dynamics XRM Tools brings you a quality range of applications that provide a useful set of features to enhance your experience while using and developing against Microsoft Dynamics CRM. You simply

字符串(AC自动机):COCI 2015 round 5 divljak

题目点这里,最后一题 不用bit的话最大数据2.8s,超时,有些遗憾,代码如下: 1 #include <algorithm> 2 #include <iostream> 3 #include <cstring> 4 #include <cstdio> 5 #include <queue> 6 using namespace std; 7 const int N=2000010; 8 int n,Q,cnt,len,x,tp,top,st[N],

@COCI 2016/2017 Round [email&#160;protected] Meksikanac

目录 @[email protected] @[email protected] @accepted [email protected] @[email protected] @[email protected] 在平面直角坐标系中,给定一个左下角为 (0, 0),右上角为 (Xp, Yp) 的矩形,并给定矩形内的 N 个点. 已知坐标系内有一个 K 边形,现将这个 K 边形平移. 问有多少种方案使最后 K 边形落入给定的矩形,定点在整数点上,且不包含 N 个点中的任意一个(与 K 边形的边.顶

2015,2016

一直想写一点这种东西,排解一下自己的苦闷,让有见识的朋友替我开解一下,二来,跟我有相同经历的朋友可以在这其中获得一点借鉴. 自从告别了懵懂但却热血的中学阶段,到如今算来,也很长时间了,而正是这段时间,让我有太多不解.当然,这是胡思乱想,所以才会这样.曾经有很长时间在想,到底要做什么,什么是对的,什么是错的,或者说为什么大多数人认为对的就是对的. 整天停留在这些空想当中,也曾经一度钻牛角尖,不明所以.毕竟处在这样一个越发多元化的社会中,接触的人和事,都是异乎寻常的. 在这些所谓的奇思妙想的杂想中,

2015~2016学年第1学期《软件架构与设计模式》学生博客列表

序号 学生 1 郭风顺(134171711) 2 陈维静(134173302) 3 梅红忆(134173321) 4 邱姣妮(134173324) 5 戎一波(134173328) 6 闻利浙(134173339) 7 包存斌(134173601) 8 杨林希(134173643) 9 毛衎煜(134173726) 10 陈怡蓉(134173303) 2015年11月12日,截止序号10.

Dynamics CRM 2015/2016/365 Web API:批处理任务

Web API为我们提供的批量任务执行功能,我们可以在一个请求中混合多个不相干的创建查询请求,并且其还提供了事务功能,如果在事务中如果有脚本出现了错误,则其提供回滚功能. 如下是批处理的请求报文,在报文里面我们需要设置批处理任务的编号,因为我们需要用它来划分任务的开始和结束边界.另外,我们还可以通过changeset标记来划分事务,在同一个changeset中,如果有处理失败了,那么整个changeset都会被回滚. POST https://crmhomedev06.api.crm6.dyna

Dynamics CRM 2015/2016 Web API:基于视图的数据查询

Dynamics CRM 2016 Web API支持基于视图来查询数据,博主初看到该Feature,着实让我眼前一亮,这个功能太给力了,完全颠覆了之前复杂繁琐的取数方式了,现在的视图真正到了定义一次,处处复用的地步了!使用方法也很简单,只需要加个参数并指定需要调用的View ID就好了.接下来我给大家演示3个比较常用的场景:调用公共视图,调用私有视图,调用SubGrid视图. 公共视图 什么是公共视图?就是大家都有权限访问的视图,比如客户实体上的我的可用客户视图,我们一般在UI上面这么调用它们