Codeforces Round #182 (Div. 1)题解

A题:Yaroslav and Sequence1

题意:

给你\(2*n+1\)个元素,你每次可以进行无数种操作,每次操作必须选择其中n个元素改变符号,你的目的是使得最后所有数的和尽量大,问你答案是多少

题解:

感觉上就是构造题,手动玩一玩就知道,当n为奇数的时候,你可以通过三次操作,使得只会改变一个负数的符号。同理n为偶数的时候,每次要改变两个负数的符号。

所以答案如下:

当n为奇数的时候,答案为所有数的绝对值和

当n为偶数的时候,负数个数为偶数的时候,答案为所有数的绝对值和,否则就让绝对值最小的那个数取负数就好了。

代码:

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. const int maxn = 105;
  4. int a[maxn],n,sum,tmp=1001,fu;
  5. int main()
  6. {
  7. scanf("%d",&n);
  8. for(int i=0;i<2*n-1;i++){
  9. scanf("%d",&a[i]);
  10. sum+=abs(a[i]);
  11. if(a[i]<0)
  12. fu++;
  13. tmp=min(tmp,abs(a[i]));
  14. }
  15. if(n%2==1){
  16. cout<<sum<<endl;
  17. }else{
  18. if(fu%2==1){
  19. cout<<sum-2*tmp<<endl;
  20. }else{
  21. cout<<sum<<endl;
  22. }
  23. }
  24. }

B题:Yaroslav and Time1

题意:

给你一个二维平面,你要从1走到n去,两点之间的距离等于abs(x[i]-x[j])+abs(y[i]-y[j]),然后你到达j点的时候,可以让时间提前a[i],问你最快到达n点是什么时候。

题解:

明显的傻逼题嘛,floyd一下就好了

代码:

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. const int maxn = 106;
  4. int n,d,a[maxn],mp[maxn][maxn],x[maxn],y[maxn];
  5. int main()
  6. {
  7. scanf("%d%d",&n,&d);
  8. for(int i=2;i<=n-1;i++)
  9. scanf("%d",&a[i]);
  10. for(int i=1;i<=n;i++){
  11. scanf("%d%d",&x[i],&y[i]);
  12. }
  13. for(int i=1;i<=n;i++){
  14. for(int j=1;j<=n;j++){
  15. if(i==j)continue;
  16. mp[i][j]=(abs(x[i]-x[j])+abs(y[i]-y[j]))*d-a[j];
  17. }
  18. }
  19. for(int k=1;k<=n;k++){
  20. for(int i=1;i<=n;i++){
  21. for(int j=1;j<=n;j++){
  22. mp[i][j]=min(mp[i][j],mp[i][k]+mp[k][j]);
  23. }
  24. }
  25. }
  26. cout<<mp[1][n]<<endl;
  27. }

C题:Yaroslav and Algorithm

题意:

让你写一个程序,只能包含数字和问号,以及一个>>符号,或者<>符号。使得数通过这个算法之后,增加1.

具体语法如下:

1.首先读入一个字符串s

2.你的程序包括若干行代码,形式为si>>wi,或者si<>wi,si和wi只能由数字或者问号组成

3.在程序中找到最小的i,使得si是s的子串,然后将第一个出现的si替换成为wi,如果符号为>>的话,重新执行这一步,如果为<>的话,终止程序

4.如果找不到i,那么终止程序。

题解:

加一,其实只用考虑最后一位是什么就好了。

所以先找到最后一位是什么,这个是最关键的。

我们先把问号扔到前面,然后再把问号不断往后传就好了。

代码

  1. #include<stdio.h>
  2. int main()
  3. {
  4. int i;
  5. for (i=0; i<9; i++) printf("%d\?\?<>%d\n",i,i+1);
  6. puts("9\?\?>>\?\?0\n\?\?0<>10");
  7. for (i=0; i<=9; i++) printf("\?%d>>%d\?\n",i,i);
  8. puts("\?>>\?\?\n>>\?");
  9. }

D题:Yaroslav and Divisors

题意:

给你n个数的1-n的排列,Q次询问,每次询问一个区间里面有多少对数满足a[i]%a[j]=0(l<=i,j<=r)

题解:

离线处理,按照L坐标大的排前面排序,预处理E[i][j]表示 a[j] mod a[i] == 0,L倒着枚举,然后

然后不断更新这个值,update(j,1),然后每次答案就是ask(r)。因为r一定是小于等于r的数更新过来的,且现在只更新到L,所以ask(r)就等与[L,r]的值

代码

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. const int maxn = 2e5+7;
  4. vector<int>E[maxn];
  5. struct node{
  6. int l,r,id;
  7. }Q[maxn];
  8. bool cmp(node A,node B){
  9. return A.l>B.l;
  10. }
  11. int n,m,ans[maxn],pos[maxn],d[maxn],a[maxn];
  12. int lowbit(int x){
  13. return x&(-x);
  14. }
  15. void add(int x){
  16. for(int i=x;i<maxn;i+=lowbit(i))
  17. d[i]++;
  18. }
  19. int ask(int x){
  20. int res = 0;
  21. for(int i=x;i;i-=lowbit(i))
  22. res+=d[i];
  23. return res;
  24. }
  25. int main()
  26. {
  27. scanf("%d%d",&n,&m);
  28. for(int i=1;i<=n;i++)
  29. scanf("%d",&a[i]),pos[a[i]]=i;
  30. for(int i=1;i<=m;i++){
  31. scanf("%d%d",&Q[i].l,&Q[i].r);
  32. Q[i].id=i;
  33. }
  34. sort(Q+1,Q+1+m,cmp);
  35. for(int i=1;i<=n;i++){
  36. for(int j=i;j<=n;j+=i){
  37. E[min(pos[i],pos[j])].push_back(max(pos[i],pos[j]));
  38. }
  39. }
  40. int L=n;
  41. for(int i=1;i<=m;i++){
  42. while(L>=Q[i].l){
  43. for(int j=0;j<E[L].size();j++)
  44. add(E[L][j]);
  45. L--;
  46. }
  47. ans[Q[i].id]=ask(Q[i].r);;
  48. }
  49. for(int i=1;i<=m;i++)
  50. cout<<ans[i]<<endl;
  51. }

Codeforces Round #182 (Div. 1)题解【ABCD】的更多相关文章

  1. Codeforces Round #608 (Div. 2) 题解

    目录 Codeforces Round #608 (Div. 2) 题解 前言 A. Suits 题意 做法 程序 B. Blocks 题意 做法 程序 C. Shawarma Tent 题意 做法 ...

  2. Codeforces Round #525 (Div. 2)题解

    Codeforces Round #525 (Div. 2)题解 题解 CF1088A [Ehab and another construction problem] 依据题意枚举即可 # inclu ...

  3. Codeforces Round #528 (Div. 2)题解

    Codeforces Round #528 (Div. 2)题解 A. Right-Left Cipher 很明显这道题按题意逆序解码即可 Code: # include <bits/stdc+ ...

  4. Codeforces Round #466 (Div. 2) 题解940A 940B 940C 940D 940E 940F

    Codeforces Round #466 (Div. 2) 题解 A.Points on the line 题目大意: 给你一个数列,定义数列的权值为最大值减去最小值,问最少删除几个数,使得数列的权 ...

  5. Codeforces Round #677 (Div. 3) 题解

    Codeforces Round #677 (Div. 3) 题解 A. Boring Apartments 题目 题解 简单签到题,直接数,小于这个数的\(+10\). 代码 #include &l ...

  6. Codeforces Round #665 (Div. 2) 题解

    Codeforces Round #665 (Div. 2) 题解 写得有点晚了,估计都官方题解看完切掉了,没人看我的了qaq. 目录 Codeforces Round #665 (Div. 2) 题 ...

  7. Codeforces Round #160 (Div. 1) 题解【ABCD】

    Codeforces Round #160 (Div. 1) A - Maxim and Discounts 题意 给你n个折扣,m个物品,每个折扣都可以使用无限次,每次你使用第i个折扣的时候,你必须 ...

  8. Codeforces Round #177 (Div. 1) 题解【ABCD】

    Codeforces Round #177 (Div. 1) A. Polo the Penguin and Strings 题意 让你构造一个长度为n的串,且里面恰好包含k个不同字符,让你构造的字符 ...

  9. Codeforces Round #383 (Div. 2) 题解【ABCDE】

    Codeforces Round #383 (Div. 2) A. Arpa's hard exam and Mehrdad's naive cheat 题意 求1378^n mod 10 题解 直接 ...

随机推荐

  1. ADB工具常用指令和使用情形分析

    一.ADB常用命令:(不需要进到设备,也就是:不需要执行adb shell) adb devices 列出所有的已连接的设备 adb kill-server 关闭adb adb start-serve ...

  2. DBHelper

    DBHelper: using System; using System.Collections.Generic; using System.Linq; using System.Text; usin ...

  3. ASP通过代码绑定Gridview控件

    using System.Configuration;using System.Data.OleDb;using System.Data; public partial class datafilm ...

  4. Java 第四章 选择结构2

    第四章 选择结构 (二) switch 选择结构的执行流程是怎样的? switch 选择结构中break关键字的作用? 本章目标 掌握 switch 选择结构 能够综合运用 if 选择结构 和 swi ...

  5. Masonry 轻量级布局框架的使用

    iOS 提供了自动布局的方法,但是原生的方法使用太过麻烦 ,Masonry 框架提供了类似的方法,同样可以实现自动布局 ,代码更加直观,而且容易理解. Masonry 是一个轻量级的布局框架.拥有自己 ...

  6. Count and Say leetcode

    题目链接 The count-and-say sequence is the sequence of integers beginning as follows:1, 11, 21, 1211, 11 ...

  7. html写法对gzip压缩率的影响

    前几天在群里看到小杜分享一篇文章,<html写法对gzip压缩率的影响>,为此我也对这点分析了一下.不知道大家有没有看过这文章,作者是来自微博懒懒交流会,其内容我这里先简述一下. Gzip ...

  8. Python成长笔记 - 基础篇 (五)

    1.装饰器: 装饰器:器代表函数的意思,装饰器就是一个函数,作用是用来装饰其他的函数 原则: 1.不能修改被装饰函数的源代码 2.不能修改被装饰函数的调用方式 实现装饰器所需要的知识: 1.函数即变量 ...

  9. Pyhton开发堡垒机之paramiko模块

    堡垒机前戏 开发堡垒机之前,先来学习Python的paramiko模块,该模块机遇SSH用于连接远程服务器并执行相关操作 SSHClient 用于连接远程服务器并执行基本命令 基于用户名密码连接: + ...

  10. UILabel和UIButton

    一.UILabel 1.UILabel:标签,主要用来显示文字. 创建步骤: (1)开辟空间并初始化(如果本类有初始化方法,使用自己的,否则,使用负父类的).   UILabel *textLabel ...