• XJOI奋斗群蒻蒟群群赛8 RANK排名

    • T1k-Factorization RE一次后AC

      • 题意
      • 分析过程
      • 给出题解
    • T2Odd sumWA一次后AC
      • 题意
      • 分析过程
      • 给出题解
    • T3Minimal string已AC
      • 题意
      • 分析过程
      • 给出题解
    • T4Broken BST
      • 题意
      • 分析过程
      • 给出题解
    • T5Array Queries
      • 题意
      • 分析过程
      • 给出题解
    • T6Mice and Holes
      • 题意
      • 分析过程
      • 给出题解
    • 蒻蒟的总结

—>XJOI奋斗群(蒻蒟群)群赛8<— RANK排名

T1:k-Factorization (RE一次后AC)

题意:

给你两个数n和k,让你把n分成k个数相乘(乘数中不能有1),如果不能的话就输出-1。可以的话就把乘数都输出。

分析过程:

既然乘数不能有1,并且还要刚好分到k个,所以前面k-1个数字尽量是较小的k的因数,最后一个数再输出n除以前面的数的值。但是在这部运行前要有一些特判,如果pow(2,k)>n(即就算全部都用2拆分,都会达不到k),就直接输出-1。如果k等于1,就直接输出n。有了这些特判之后,在进行拆分,拆分时都用质数去试,这样能节省很多时间。同时还要注意如果拆分到最后一个是1,也是要输出-1的。

给出题解:
#include<bits/stdc++.h>
using namespace std;int pre[2000];bool prime(int n)
{for(int i=2;i*i<=n;i++){if(n%i==0)return false;}return true;
}void get_pre()
{int j=2;for(int i=3;i<=1000;i++){if(prime(i)==true)pre[j]=i,j++;}
}
int main()
{int n,k,x=1;long long ans;cin>>n>>k;ans=pow(2,k);if(ans>n)cout<<-1<<endl;else if(k==1)cout<<n<<endl;else {pre[1]=2;int print[100]={0};get_pre();if(prime(n)==true)cout<<-1<<endl;else{int a=k;for(int i=1;i&&k!=1;i++){if(n%pre[i]==0){print[x]=pre[i];n=n/pre[i];i--;x++;k--;if(n==1&&k!=0){cout<<-1<<endl;return 0; }}}for(int i=1;i<a;i++){cout<<print[i]<<" ";}cout<<n;}}return 0;
}

T2:Odd sum(WA一次后AC)

题意:

给你一个数列,求数列中的一些数加起来的值为奇数,输出这个奇数的最大值。

分析过程:

这个数列中的数,有正数,也有负数。在计算这个最大值的时候,可以先把正数和负数分成两堆,先计算正数的所有数的和,判断是否是奇数。如果是奇数,就直接输出这个值(因为加上负数也只会变小)。如果是偶数,就分别把数列中最小的正奇数a和最大的负奇数b拉出来比较。如果找不到这个a或b,就用原值加上b或减去a。如果找到这两个数了,就比较两个数的绝对值大小。如果a大,就用原值加上b,反之则减去a。这样求得的就是最大值。

给出题解:
#include<bits/stdc++.h>
using namespace std;int zh[100050],fu[100050],a[100050];bool ji(int a)
{a=abs(a);if(a%2==1)return true;return false;
}int main()
{
//  freopen("in.txt","r",stdin);long int n,ans=0;       int j=1,k=1;int cntz=0,cntf=0;cin>>n;for(int i=1;i<=n;i++){cin>>a[i];if(a[i]>=0){zh[j]=a[i];cntz++;ans=ans+zh[j];j++;}else {fu[k]=a[i];cntf++;k++;}}sort(zh+1,zh+1+cntz);sort(fu+1,fu+1+cntf);
//  cout<<ans<<endl;if(ans%2==1)cout<<ans<<endl;else {int a=0,b=0;for(int i=cntf;i>=1;i--){if(ji(fu[i])==true){a=fu[i];break;}}for(int i=1;i<=cntz;i++){if(ji(zh[i])==true){b=zh[i];break;}}
//      cout<<a<<" "<<b<<endl;if(b==0)cout<<ans+a<<endl;else if(a==0)cout<<ans-b<<endl;else {if(abs(a)>=b)cout<<ans-b<<endl;else cout<<ans+a<<endl;   }}}

T3:Minimal string(已AC)

题意:

有一个字符串s,还有两个空的字符串t、u,可以有两个操作:1、把s的的一个字母放到t中。2、把t的最后一个字母放到u中。要求使得u最后的字符串字典序最小。

分析过程:

只要发现了这题中的字母是后进先出,就能发现这是一个栈的运用。所以只需要开一个栈,然后往栈中输入。如果输入的字母比栈顶的字母要小,就保留,如果比栈顶大 ,就直接弹出。这样输出的字符串字典序便是最小的。

给出题解:
#include<bits/stdc++.h>
using namespace std;char ss[100800];int a[100800];int m[100800];
int main()
{cin>>ss;int n=strlen(ss);memset(m,0,sizeof(m));for(int i=0; i<n; i++)a[i]=ss[i]-96;for(int i=n-1; i>=0; i--){if(i==n-1)m[i]=a[i];else m[i]=min(m[i+1],a[i]);
//      cout<<minn[i]<<" ";}stack<char>s;for(int i=0; i<n; i++){if(s.size()==0){s.push(ss[i]);}else{while(!s.empty()){int ding=s.top()-96;if(ding<=m[i]){cout<<s.top();s.pop();}else break;}s.push(ss[i]);}}while(!s.empty()){cout<<s.top();s.pop();}
}

T4:Broken BST

题意:
分析过程:
给出题解:

T5:Array Queries

题意:

给出一个n个数的数列a(a<=n),然后给你两个数k和p,让你计算ap+p+k的值,如果这个值小于等于n,就继续执行这个命令,直到它大于n。让你求执行命令的次数。

分析过程:

如果用暴力求解,那么当k比较小的时候,这个命令的执行次数会变得很大,会TLE。所以我们可以用记忆化搜索,先预先处理k<=300的执行次数,然后如果输入次数小于300,就可以直接输出数据,其余的就可以直接暴力运算。

给出题解:
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+10;
int dp[305][maxn];
int main()
{int n,a[maxn];int p,k;int q;cin>>n;for(int i=1; i<=n; i++){cin>>a[i];}cin>>q;for(int j=1; j<=300; j++){for(int i=n; i>=1; i--){if(i+a[i]+j>n) dp[j][i]=1;else{dp[j][i]=dp[j][i+a[i]+j]+1;}}}for(int i=1; i<=q; i++){cin>>p>>k;int cnt=0;if(k<=300){cout<<dp[k][p]<<endl;}else{while(p<=n){p=p+a[p]+k;cnt++;}cout<<cnt<<endl;}}return 0;
}

T6:Mice and Holes

题意:
分析过程:
给出题解:

蒻蒟的总结:

这是前天的题目,有三道题没有做出来,剩下的3题也是拼死才订正出来一题,表示时间真的有点紧张了。昨天还有动态规划专题,所以时间很少。不过并不是说不会补了,这些题都是我的弱处,要抓紧攻克它。
继续贴出吴老师的话:学信息的人永不服输!!!

czl蒻蒟的OI之路7相关推荐

  1. czl蒻蒟的OI之路

    XJOI奋斗群蒻蒟群群赛2 RANK排名3 T1Odds and Ends 已AC 题意 分析过程 给出题解 T2Tell Your World 已AC 题意 分析过程 给出题解 T3From Y t ...

  2. czl蒻蒟的OI之路8

    XJOI奋斗群蒻蒟群群赛9 RANK排名12 T1SnacktowerWA三次后AC 题意 分析过程 给出题解 T2The QueueWA六次后AC 题意 分析过程 给出题解 T3GarlandWA一 ...

  3. czl蒻蒟的OI之路9

    XJOI奋斗群蒻蒟群群赛10 RANK排名7 T1Chess TourneyWA一次后AC 题意 分析过程 给出题解 T2Luba And The TicketWA两次后AC 题意 分析过程 给出题解 ...

  4. czl蒻蒟的OI之路13

    XJOI奋斗群蒻蒟群群赛10 RANK排名6 T1Compote 已AC 题意 分析过程 给出题解 T2Decoding已AC 题意 分析过程 给出题解 T3Tram已AC 题意 分析过程 给出题解 ...

  5. czl蒻蒟的OI之路10、11、12

    好久没有发微博了表示自己也很绝望啊今天来个三连击 XJOI奋斗群蒻蒟群群赛11 RANK排名11 T1The Wall WA一次后AC 题意 分析过程 给出题解 T2Maximal Area Quad ...

  6. czl蒻蒟的OI之路5

    XJOI奋斗群蒻蒟群群赛6 RANK排名10 T1Fraction已AC 题意 分析过程 给出题解 T2Maxim Buys an Apartment WA两次AC 题意 分析过程 给出题解 T3Pl ...

  7. czl蒻蒟的OI之路3

    XJOI奋斗群蒻蒟群群赛4 RANK排名3 T1Arpa and a research in Mexican wave WA一次后AC 题意 分析过程 给出题解 T2Arpa and an exam ...

  8. czl蒻蒟的OI之路4

    XJOI奋斗群蒻蒟群群赛5 RANK排名15 T1Curriculum Vitae WA五次后AC 题意 分析过程 给出题解 T2Math Show WA十次后AC 题意 分析过程 给出题解 T3Fo ...

  9. czl蒻蒟的OI之路2

    XJOI奋斗群蒻蒟群群赛3 RANK排名7 T1Kirill And The GameTLE一次后AC 题意 分析过程 给出题解 T2Gleb And PizzaWA一次后AC 题意 分析过程 给出题 ...

最新文章

  1. Nginx HTTP负载均衡和反向代理配置
  2. 视音频技术零基础学习方法
  3. 【内网渗透工具】炫彩蛇安装教程
  4. 抽象类(c++细节篇九)
  5. Android中使用Notification在状态栏上显示通知
  6. 《C++ Primer》2.1.2节练习
  7. Ubuntu下使用AMD APP编写OpenCL程序
  8. java堆和客栈_JAVA中堆、栈,静态方法和非静态方法的速度问题
  9. messagebox 全部使用_商业篇 | 使用python开发性格分析工具卖钱
  10. Mongodb c#增删改查
  11. 小程序直播开发demo
  12. 【评论】第一财经周刊:失败的埃洛普
  13. Python 数值求解偏微分方程(含两个示例)
  14. 2021/06/20 1+X 大数据应用开发(Java)中级实操考试
  15. 路由模式和桥接模式的区别
  16. 电信无限流量卡为什么无服务器,为什么移动、联通、电信4G无限流量卡都必须限速,怎么回事?...
  17. MySQL 排序 输出序号
  18. QT中事件及事件处理
  19. Win10系统如何显示文件夹中的照片缩略图
  20. 【OpenGL学习笔记⑦】——键盘控制镜头的平移【3D正方体 透视投影 观察矩阵 对LookAt的理解】

热门文章

  1. 生命的节日,散文一篇
  2. java获取明天的日期_使用java获取昨日的日期,今日的日期,明日的日期
  3. 仿淘宝 打开app时识别淘口令和解析保存到本地的带二维码图片的网址
  4. excel利用宏自动复制来自其他excel文件的数据
  5. 三分钟了解一下深度学习
  6. 怎么去掉input textarea 选中后的边线框,textarea 不可以拉
  7. SMART 监控项研究以及存储健康分级机制
  8. 大学计算机专业学高数吗,数学差‍的学生,大学最好别选这几个专业,不然将来恐难毕业...
  9. Unity入门——角色属性设置
  10. PO模式实现Appium脚本封装