总结一下就是自己太弱。每次打比赛遇到比较难题就喜欢瞎开题,结果都是每题想一下,然后就是结束了。

A:题意让你用小写字母构造一个总共有K个的回文串,比如aba的话就是{a}{b}{a}{aba}四个,比较水,直接a-z一直循环够K个字母就行了,因为这样回文串只能是每个字符自己本身,比赛脑残写成大写WA了一发.题目:https://www.codechef.com/problems/NDIFFPAL

B:题目大意就是给你N个格子,每次必须填连续三个格子而且填相同的数,格子上如果填过数字的话,再填是直接覆盖,给你一个序列,问你能否把格子填成这种形式,输出Yes或者No。解法就是直接扫一次,如果序列里有三个连续相同的数字的话就Y,因为涂的时候我们可以把这三个留在最后填,然后其他就相当于可以一个个填。也是比较水。题目:https://www.codechef.com/problems/MAKEART

下面几题就是开始待机模式了= =

C:题意让你构造一个序列,序列必须是1-x的全排列之一,而且x不能超过100,这个序列还必须有K个最长上升子序列。题目:https://www.codechef.com/problems/MAKELIS

解法真是奥秘重重。。做题质量不够,数量也不够,认识的套路少,太弱。

假如K小于等于100,就可以直接倒序输出。然而没什么卵用啊,题目的K是10^5,然后正确套路就是分解K成其他进制。

官方题解就是差不多这样说吧。。不过看不太懂,因为上面出现一大波乱码。看了下没乱码的公式,YY了下。大概就是这样

[……]表示这个序列的一部分

假如K=6的话,把K分解成二进制就是110(2)=0+2*(1+2),从最里面那个开始看起0+2*(1+[2,1])->0+2*([1]+[2,1])=0+2*([3,2,1])=0+[2,1]*([3,2,1])=[3,2,1,5,4]

乘上二的话,就是在最后面加上两个连续倒序的数。相加的话就是在最前面加上一个数

  1. #include <cstdio>
  2. #include <cstring>
  3. #include <cmath>
  4. #include <iostream>
  5. #include <algorithm>
  6. #include <vector>
  7. #include <queue>
  8. #include <set>
  9. #include <map>
  10. #include <stack>
  11. typedef long long ll;
  12. #define X first
  13. #define Y second
  14. #define mp(a,b) make_pair(a,b)
  15. #define pb push_back
  16. #define sd(x) scanf("%d",&(x))
  17. #define Pi acos(-1.0)
  18. #define sf(x) scanf("%lf",&(x))
  19. #define ss(x) scanf("%s",(x))
  20. #define maxn 10000000
  21. #include <ctime>
  22. const int inf=0x3f3f3f3f;
  23. const long long mod=;
  24. using namespace std;
  25. vector<int> turn(int k)
  26. {
  27. vector<int>a;
  28. while(k)
  29. {
  30. a.pb(k%);
  31. k/=;
  32. }
  33. return a;
  34. }
  35. int main()
  36. {
  37. #ifdef local
  38. freopen("in","r",stdin);
  39. //freopen("data.txt","w",stdout);
  40. int _time=clock();
  41. #endif
  42. int t;
  43. cin>>t;
  44. while(t--)
  45. {
  46. int k;
  47. sd(k);
  48. if(k==)
  49. {
  50. printf("1\n1\n");
  51. continue;
  52. }
  53. vector<int>bit,a,b;
  54. bit=turn(k);
  55. int len=bit.size();
  56. int cnt=;
  57. int head;
  58. for(int i=len-;i>=;i--)
  59. {
  60. if(bit[i]==)
  61. {
  62. head=len-i-;
  63. while(b.size()!=head)
  64. b.pb(cnt++);
  65. }
  66. if(i)
  67. {
  68. a.pb(cnt+);
  69. a.pb(cnt);
  70. cnt+=;
  71. }
  72. }
  73. printf("%d\n",a.size()+b.size());
  74. for(int i=;i<b.size();i++)
  75. printf("%d ",b[i]);
  76. for(int i=;i<a.size();i++)
  77. printf("%d ",a[i]);
  78. putchar('\n');
  79. }
  80. #ifdef local
  81. printf("time: %d\n",int(clock()-_time));
  82. #endif
  83. }

D:给你n个数a1,a2……,an,增长m次,增长规律就是每两个数直接会生成新的数,数的值等于那两个数的和.再给你m,还有x,y问你m次之后,[x,y]区间里面的和是多少。题目:https://www.codechef.com/problems/CHSPARR

官方题解老是乱码。。自己手算好久,推出一个规律...

{1,6,9}->{1,7,6,15,9}

假设sum[m][i]是第m次后的前i项和,a[m][i]是第m次后的第i个元素,m=1,i是奇数的时候,如i=3,我们会发现1+7+6+15=2*(1+6)+(1+6+9-1),发现了吗。奇数位是上一个序列生成的数。。

i&1==1的时候,sum[m][i]=sum[m-1][i/2]*2+sum[m-1][i/2+1]-a[0];

为什么呢,因为sum[m-1][i/2]*2等于[0,i/2]这个区间生成的数+a[0]+a[m-1][i/2],再加上sum[m-1][i/2+1]等于a[m-1][0,i/2]+a[i][i/2+1];

a[m-1][i/2]+a[m-1][i/2+1]等于?,就等于a[m][i]。所以上面的式子成立。

上面是奇数的情况,偶数也差不多这样推。。所以我们可以记忆化递推就可以了

奇数推导(xjb猜)

  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. typedef long long ll;
  5. typedef unsigned long long ull;
  6. typedef double db;
  7. #define X first
  8. #define Y second
  9. #define mp(a,b) make_pair(a,b)
  10. #define pb push_back
  11. #define sd(x) scanf("%d",&(x))
  12. #define Pi acos(-1.0)
  13. #define sf(x) scanf("%lf",&(x))
  14. #define ss(x) scanf("%s",(x))
  15. #define maxn 50005
  16. const int inf=0x3f3f3f3f;
  17. const ll mod=;
  18. ll a[];
  19. map<ll,ll>book[];
  20. ll solve(int m,ll x)
  21. {
  22. if(x==)return a[];
  23. if(m==)return a[x];
  24. if(book[m].count(x))return book[m][x];
  25. if(x&)return book[m][x]=(solve(m-,x/+)%mod+*solve(m-,x/)%mod-a[]+mod)%mod;
  26. else return book[m][x]=(*solve(m-,x/)%mod+solve(m-,x/-)%mod-a[]+mod)%mod;
  27. }
  28. int main()
  29. {
  30. #ifdef local
  31. freopen("in","r",stdin);
  32. //freopen("out","w",stdout);
  33. int _time=clock();
  34. #endif
  35. int t;
  36. sd(t);
  37. while(t--)
  38. {
  39. int n,m;
  40. ll x,y;
  41. cin>>n>>m>>x>>y;
  42. x--,y--;
  43. for(int i=;i<n;i++)
  44. {
  45. scanf("%lld",&a[i]);
  46. a[i]+=(i?a[i-]:);
  47. }
  48. for(int i=;i<=m;i++)book[i].clear();
  49. cout<<(solve(m,y)-(x?solve(m,x-):)+mod)%mod<<endl;
  50. }
  51. #ifdef local
  52. printf("time: %d\n",int(clock()-_time));
  53. #endif
  54. }

未完

SCAU Individual Contest #1的更多相关文章

  1. Individual Contest #1 and Private Training #1

    第一次的增补赛,也是第一场个人排位赛,讲道理打的和屎一样,手速题卡了好久还WA了好多发,难题又切不出来,这种情况是最尴尬的吧! Individual Contest #1: Ploblem D: 题意 ...

  2. JSU 2013 Summer Individual Ranking Contest - 5

    JSU 2013 Summer Individual Ranking Contest - 5 密码:本套题选题权归JSU所有,需要密码请联系(http://blog.csdn.net/yew1eb). ...

  3. AtCoder Beginner Contest 050 ABC题

    A - Addition and Subtraction Easy Time limit : 2sec / Memory limit : 256MB Score : 100 points Proble ...

  4. Competing in a data science contest without reading the data

    Competing in a data science contest without reading the data Machine learning competitions have beco ...

  5. zoj 3823 Excavator Contest 构造

    Excavator Contest Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.zju.edu.cn/onlinejudge/show ...

  6. hdu 4930 Fighting the Landlords--2014 Multi-University Training Contest 6

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4930 Fighting the Landlords Time Limit: 2000/1000 MS ...

  7. Contest with Drinks Easy

    /* Problem Statement Joisino is about to compete in the final round of a certain programming competi ...

  8. Programming Contest Problem Types

        Programming Contest Problem Types Hal Burch conducted an analysis over spring break of 1999 and ...

  9. hdu 4946 2014 Multi-University Training Contest 8

    Area of Mushroom Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) ...

随机推荐

  1. 性能测试分享:MYSQL死锁

    poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家咨询qq:908821478,咨询电话010-845052 ...

  2. 聊天界面使用IQKeyboardManager导航栏及整个页面上移的解决方法

    问题: 使用第三方库IQKeyboardManager时会使整个页面上移,导航栏页偏移出了显示范围.在聊天界面就会使得上面的消息看不到. 解决方法: 首先说明:在聊天界面使用IQKeyboardMan ...

  3. JDBC基础学习(三)—处理BLOB类型数据

    一.BLOB类型介绍      在MySQL中,BLOB是一个二进制的大型对象,可以存储大量数据的容器,它能容纳不同大小的数据.      在MySQL中有四种BLOB类型.          实际使 ...

  4. asp.net core源码飘香:Options组件

    简介: Options组件是一个小组件,但用的地方很多.它本质是将一个POCO类注册到容器中(主要在Startup中作为其他组件的配置功能提供),后续使用的时候就可以通过比如构造函数注入等获取到POC ...

  5. cloud-init 典型应用 - 每天5分钟玩转 OpenStack(174)

    本节介绍几个 cloud-init 的典型应用:设置 hostanme,设置用户初始密码,安装软件. 设置 hostname cloud-init 默认会将 instance 的名字设置为 hostn ...

  6. Windows下JIRA6.3.6安装、汉化、破解

    一.MySQL建库和建账号 1. mysql中创建数据库jiradb create database jiradb character set 'UTF8'; 2.创建数据库用户并赋于权限 creat ...

  7. 监听器的小示例:利用HttpSessionListener和HttpServletContextListener实现定时销毁HttpSession

    1.创建MyServletContextListener实现HttpServletContextListener接口 @Override public void contextDestroyed(Se ...

  8. 我从现象中学到的CSS

    文字溢出隐藏 如果你观察过浮动元素,你会发现这样一个事实,当前一个元素将宽度占满以后,后一个元素就会往下掉,如下所示 代码如下 <style> div,p{ margin:0; } #bo ...

  9. java类集框架(ArrayList,LinkedList,Vector区别)

    主要分两个接口:collection和Map 主要分三类:集合(set).列表(List).映射(Map)1.集合:没有重复对象,没有特定排序方式2.列表:对象按索引位置排序,可以有重复对象3.映射: ...

  10. PHP 分支与循环

    一.概述: 上面一章我们讲解了PHP当中的运算符和表达式,通过上面的知识点我们就可以完成一些基本的运算操作了.但是涉及到一些比较复杂的逻辑,分支与循环就必不可少了.通过分支和循环的结合使用可以使业务更 ...