设为首页 加入收藏

TOP

Codeforces Round #268 (Div. 2)
2015-07-20 17:37:40 来源: 作者: 【 】 浏览:3
Tags:Codeforces Round #268 Div.

Codeforces Round #268 (Div. 2)

题目链接

A:有的标记掉判断一下即可

B:枚举时间一个个去判断一下即可

C:构造一下,4和5分别手动构造,然后之后每次多2个数字就先相减掉得到1,然后乘上原数字不变,4以下的是绝对构造不出来的

D:贪心,先排序,然后每次twopointer选头尾两个判断能丢进哪个集合,都不行就找一个之前满足的丢进小集合

E:推理,详细见官方题解,大致是推出来后,[x, x + 1e18 - 1]这个区间,每次挪动一个变成[x + 1, x + 1e18],对应的总和就加1,那么只要能求出[1, 1e18]的值,然后在去挪动相应步数得到相应区间即可,计算1-1e18的和推推规律就可以发现了,官方题解上也有公式

代码:

A:

#include 
  
   
#include 
   
     int n, p, q, vis[105]; bool solve() { for (int i = 1; i <= n; i++) if (vis[i] == 0) return false; return true; } int main() { scanf("%d", &n); scanf("%d", &p); int tmp; for (int i = 0; i < p; i++) { scanf("%d", &tmp); vis[tmp] = 1; } scanf("%d", &q); for (int i = 0; i < q; i++) { scanf("%d", &tmp); vis[tmp] = 1; } printf("%s\n", solve() ? "I become the guy." : "Oh, my keyboard!"); return 0; }
   
  

B:

#include 
  
   
#include 
   
     const int N = 55; int p, q, l, r, ans; int vis[10005], c[N], d[N]; bool judge(int t) { for (int i = 0; i < q; i++) { for (int j = c[i]; j <= d[i]; j++) { if (vis[j + t]) return true; } } return false; } int main() { scanf("%d%d%d%d", &p, &q, &l, &r); int a, b; for (int i = 0; i < p; i++) { scanf("%d%d", &a, &b); for (int j = a; j <= b; j++) vis[j] = 1; } for (int i = 0; i < q; i++) scanf("%d%d", &c[i], &d[i]); for (int i = l; i <= r; i++) { if (judge(i)) ans++; } printf("%d\n", ans); return 0; }
   
  

C:

#include 
  
   
#include 
   
     #include 
    
      #include 
     
       using namespace std; int n; void solve(int n) { if (n % 2 == 0) { printf("1 + 2 = 3\n"); printf("3 + 3 = 6\n"); printf("6 * 4 = 24\n"); for (int i = 5; i <= n; i += 2) { printf("%d - %d = 1\n", i + 1, i); printf("24 * 1 = 24\n"); } } else { printf("5 - 3 = 2\n"); printf("1 + 2 = 3\n"); printf("2 * 3 = 6\n"); printf("4 * 6 = 24\n"); for (int i = 6; i <= n; i += 2) { printf("%d - %d = 1\n", i + 1, i); printf("24 * 1 = 24\n"); } } } int main() { scanf("%d", &n); if (n < 4) printf("NO\n"); else { printf("YES\n"); solve(n); } return 0; }
     
    
   
  

D:

#include 
  
   
#include 
   
     #include 
     #include 
     
       using namespace std; const int N = 100005; int n, a, b; map
      
        to; struct Seq { int num, id, to, vis; } s[N]; bool cmp(Seq a, Seq b) { return a.num < b.num; } bool cmpid(Seq a, Seq b) { return a.id < b.id; } int flag = 0; bool solve() { int st = 0, ed = n - 1; while (st <= ed) { if (s[st].vis) { st++; continue; } if (s[ed].vis) { ed--; continue; } if (s[st].num + s[ed].num > b || s[st].num + s[ed].num < a) return false; if (s[st].num + s[ed].num == b) { s[st].vis = 1; s[ed].vis = 1; s[st].to = 1; s[ed].to = 1; st++; ed--; continue; } else if (s[st].num + s[ed].num == a) { s[st].vis = 0; s[ed].vis = 0; s[st].to = 0; s[ed].to = 0; st++; ed--; } else { if (!to.count(a - s[st].num)) return false; int v = to[a - s[st].num]; if (s[v].vis) return false; s[v].to = 0; s[v].vis = 1; s[st].vis = 1; s[st].to = 0; st++; } } sort(s, s + n, cmpid); printf("YES\n"); printf("%d", s[0].to^flag); for (int i = 1; i < n; i++) printf(" %d", s[i].to^flag); printf("\n"); return true; } int main() { scanf("%d%d%d", &n, &a, &b); if (a > b) { swap(a, b); flag = 1; } for (int i = 0; i < n; i++) { scanf("%d", &s[i].num); s[i].id = i; } sort(s, s + n, cmp); for (int i = 0; i < n; i++) to[s[i].num] = i; if (!solve()) printf("NO\n"); return 0; }
      
     
   
  

E:

#include 
  
   
#include 
   
     #include 
    
      using namespace std; typedef long long ll; const ll INF = 1e18; ll a; int main() { scanf("%lld", &a); ll num = INF / 10 % a; num = num * 2 % a; num = num * 9 % a; num = num * 9 % a; num = num * 5 % a; printf("%lld %lld\n", a - num, a - num + INF - 1); return 0; }
    
   
  


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇充分利用C++11特性,Cocos2dx对话.. 下一篇大话设计模式-装饰模式(C++)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·利用python进行数据 (2025-12-25 20:49:22)
·如何使用 python 中 (2025-12-25 20:49:19)
·零基础如何学爬虫技 (2025-12-25 20:49:17)
·Java 并发工具类:提 (2025-12-25 20:25:44)
·Java面试技巧:如何 (2025-12-25 20:25:41)