I.十进制中的二进制

解题方法:直接把给定范围内的有0和1组成的数暴力输出,然后开个数组把这些数放进去,进而在数组中找要求的范围内符合条件的数就行了(一开始做的时候还以为有什么规律。。。一直在找规律,还不如暴力来的快)

求符合要求的数的代码:

#include<iostream>
using namespace std;
typedef long long ll;
const ll maxn=1e9;
ll i,j,k;
int flag=0;
int sum=0;
void prepare()
{for(i=1;i<=maxn;i++){int tmp=i;flag=0;while(tmp>0){if((tmp%10==0)||(tmp%10==1)){tmp/=10;flag=1;}else{flag=0;break;}}if(flag){cout<<i<<",";sum+=1;}}cout<<endl;cout<<"sum="<<sum<<endl;
}
int main()
{prepare();return 0;
}

正式题解:

#include<iostream>
#include<algorithm>
#include<string.h>
using namespace std;
typedef long long ll;ll  s[]={1,10,11,100,101,110,111,1000,1001,1010,1011,1100,1101,1110,1111,10000,10001,10010,10011,10100,10101,10110,10111,11000,11001,11010,11011,11100,11101,11110,11111,100000,100001,100010,100011,100100,100101,100110,100111,101000,101001,101010,101011,101100,101101,101110,101111,110000,110001,110010,110011,110100,110101,110110,110111,111000,111001,111010,111011,111100,111101,111110,111111,1000000,1000001,1000010,1000011,1000100,1000101,1000110,1000111,1001000,1001001,1001010,1001011,1001100,100110,1001110,1001111,1010000,1010001,1010010,1010011,1010100,1010101,1010110,1010111,1011000,1011001,1011010,1011011,1011100,1011101,1011110,1011111,1100000,1100001,1100010,1100011,1100100,1100101,1100110,1100111,1101000,1101001,1101010,1101011,1101100,1101101,1101110,1101111,1110000,1110001,1110010,1110011,1110100,1110101,1110110,1110111,1111000,1111001,1111010,1111011,1111100,1111101,1111110,1111111,10000000,10000001,10000010,10000011,10000100,10000101,10000110,10000111,10001000,10001001,10001010,10001011,10001100,10001101,10001110,10001111,10010000,10010001,10010010,10010011,10010100,10010101,10010110,10010111,10011000,10011001,10011010,10011011,10011100,10011101,10011110,10011111,10100000,10100001,10100010,10100011,10100100,10100101,10100110,10100111,10101000,10101001,10101010,10101011,10101100,10101101,10101110,10101111,10110000,10110001,10110010,10110011,10110100,10110101,10110110,10110111,10111000,10111001,10111010,10111011,10111100,10111101,10111110,10111111,11000000,11000001,11000010,11000011,11000100,11000101,11000110,11000111,11001000,11001001,11001010,11001011,11001100,11001101,11001110,11001111,11010000,11010001,11010010,11010011,11010100,11010101,11010110,11010111,11011000,11011001,11011010,11011011,11011100,11011101,11011110,11011111,11100000,11100001,11100010,11100011,11100100,11100101,11100110,11100111,11101000,11101001,11101010,11101011,11101100,11101101,11101110,11101111,11110000,11110001,11110010,11110011,11110100,11110101,11110110,11110111,11111000,11111001,11111010,11111011,11111100,11111101,11111110,11111111,100000000,100000001,100000010,100000011,100000100,100000101,100000110,100000111,100001000,100001001,100001010,100001011,100001100,100001101,100001110,100001111,100010000,100010001,100010010,100010011,100010100,100010101,100010110,100010111,100011000,100011001,100011010,100011011,100011100,100011101,100011110,100011111,100100000,100100001,100100010,100100011,100100100,100100101,100100110,100100111,100101000,100101001,100101010,100101011,100101100,100101101,100101110,100101111,100110000,100110001,100110010,100110011,100110100,100110101,100110110,100110111,100111000,100111001,100111010,100111011,100111100,100111101,100111110,100111111,101000000,101000001,101000010,101000011,101000100,101000101,101000110,101000111,101001000,101001001,101001010,101001011,101001100,101001101,101001110,101001111,101010000,101010001,101010010,101010011,101010100,101010101,101010110,101010111,101011000,101011001,101011010,101011011,101011100,101011101,101011110,101011111,101100000,101100001,101100010,101100011,101100100,101100101,101100110,101100111,101101000,101101001,101101010,101101011,101101100,101101101,101101110,101101111,101110000,101110001,101110010,101110011,101110100,101110101,101110110,101110111,101111000,101111001,101111010,101111011,101111100,101111101,101111110,101111111,110000000,110000001,110000010,110000011,110000100,110000101,110000110,110000111,110001000,110001001,110001010,110001011,110001100,110001101,110001110,110001111,110010000,110010001,110010010,110010011,110010100,110010101,110010110,110010111,110011000,110011001,110011010,110011011,110011100,110011101,110011110,110011111,110100000,110100001,110100010,110100011,110100100,110100101,110100110,110100111,110101000,110101001,110101010,110101011,110101100,110101101,110101110,110101111,110110000,110110001,110110010,110110011,110110100,110110101,110110110,110110111,110111000,110111001,110111010,110111011,110111100,110111101,110111110,110111111,111000000,111000001,111000010,111000011,111000100,111000101,111000110,111000111,111001000,111001001,111001010,111001011,111001100,111001101,111001110,111001111,111010000,111010001,111010010,111010011,111010100,111010101,111010110,111010111,111011000,111011001,111011010,111011011,111011100,111011101,111011110,111011111,111100000,111100001,111100010,111100011,111100100,111100101,111100110,111100111,111101000,111101001,111101010,111101011,111101100,111101101,111101110,111101111,111110000,111110001,111110010,111110011,111110100,111110101,111110110,111110111,111111000,111111001,111111010,111111011,111111100,111111101,111111110,111111111,1000000000};int i,j,k;  //控制循环
ll n;
int sum;
int main()
{while(cin>>n){sum=0;for(i=0;i<512;i++){if(s[i]<=n){sum++;}elsebreak;}cout<<sum<<endl;}return 0;
}

H.Perfect String

解题方法: 题目不难就是有点麻烦,我补题的时候直接模拟做的,在模拟前先判断输入的字符串是不是符合要求的字符串 ,若不符合要求直接输出-1然后输入下一个字符串。符合要求的字符串分为下面几种情况:
1.中间有问号:a???cb
2.开头有问号:??a
3.结尾有问号:ab???
输入的字符串可以是这三种情况的复合,但是处理的方法是一样的。

正式题解:

#include<iostream>
#include<string>
using namespace std;
int t;
string s;
int i,j,k;
int judge()
{int len=s.length();for(i=0;i<len;i++){if(s[i]=='?')continue;else if(s[i]==s[i+1])return 0;}return 1;
}
int main()
{cin>>t;while(t--){cin>>s;int flag=judge();if(!flag){cout<<-1<<endl;continue;}int len=s.length();for(i=0;i<len;i++){if(s[i]!='?')continue;else{if(i==0){if(s[1]!='?'){if(s[1]=='a')s[0]='b';else if(s[1]=='b')s[0]='c';elses[0]='a';}elses[0]='a';}else if((i==len-1)&&(s[i]=='?')){if(s[i-1]=='a')s[i]='b';else if(s[i-1]=='b')s[i]='c';elses[i]='a';}else{if((s[i-1]!='?')&&s[i+1]=='?'){if(s[i-1]=='a')s[i]='b';else if(s[i-1]=='b')s[i]='c';elses[i]='a';}else if((s[i-1]!='?')&&(s[i+1]!='?')){if((s[i-1]=='a')&&(s[i+1]=='b'))s[i]='c';else if((s[i-1]=='a')&&(s[i+1]=='c'))s[i]='b';else if((s[i-1]=='b')&&(s[i+1]=='a'))s[i]='c';else if((s[i-1]=='b')&&(s[i+1]=='c'))s[i]='a';else if((s[i-1]=='c')&&(s[i+1]=='a'))s[i]='b';else if((s[i-1]=='c')&&(s[i+1]=='b'))s[i]='a';else if((s[i-1]=='a')&&(s[i+1]=='a'))s[i]='b';else if((s[i-1]=='b')&&(s[i+1]=='b'))s[i]='c';else if((s[i-1]=='c')&&(s[i+1]=='c'))s[i]='a';}}}}cout<<s<<endl;}return 0;
}

G.0011

解题思路: 因为给定的字符串都是穿插在01之间的,也就是对于每一对01,0总是在1前面出现,所以只要从头遍历字符串判断0的个数和1的个数的关系,就可以判断字符串是否合法。即如果在遍历过程中1的个数比0的个数多,直接输出NO,然后输入下一个字符串,若遍历完一个字符串0和1的个数一样且中间过程中0的个数大于等于1,就输出YES。

正式题解:

#include<iostream>
#include<string>
using namespace std;
int n;
string s;
int i,j,k;
int tmp;   //记录0的数量
int cmp;   //记录1的数量
int main()
{cin>>n;while(n--){cin>>s;int len=s.length();tmp=cmp=0;for(i=0;i<len;i++){if(s[i]=='0')tmp+=1;elsecmp+=1;if(cmp>tmp){cout<<"NO"<<endl;break;}}if(cmp==tmp)cout<<"YES"<<endl;}return 0;
}

F.XorXor(不太理解)

解题思路: 根据题意:f(i,j)=ai^ ai+1^ ai+2^ …^aj 。
让求:[f(1,1) ^ f(1,2) … f(1,n) ] ^ [f(2,2) ^ f(2,3) … f(2,n)] ^ [f(n,n)]
假设k1=[f(1,1) ^ f(1,2) … f(1,n) ],其中a[1]是被异或了(n-1+1)次
那么k2=[f(2,2) ^ f(2,3) … f(2,n)] ,只需要把k1异或的(n-1+1)次a[1]异或掉就是k2。
同理k3=k2异或(n-2+1)次a[2],k4=k3异或(n-3+1)次a[3] …
最终答案就是k1到kn的异或和。
所以只需要从头到尾扫一遍即可出结果。
这里还要知道一件事可以使上述过程简化,任何数异或它本身=0,任何数异或0是它本身,所以一个数自身异或奇数次是它本身,自身异或偶数次是0。
(本题使用cin和cout会超时)

正式题解:

#include<iostream>
#include<cstdio>
using namespace std;
const int maxn=1e5;
int s[maxn];
int i,j,k;
int cmp,tmp;
int t;
int n;
int main()
{// std::ios::sync_with_stdio(false); cout.tie(0); cin.tie(0);cin>>t;while(t--){// cin>>n;scanf("%d",&n);cmp=tmp=0;for(i=1;i<=n;i++){// cin>>s[i];scanf("%d",&s[i]);if((n-i+1)%2)cmp^=s[i];}for(i=1;i<=n;i++){tmp^=cmp;if((n-i+1)%2)cmp^=s[i];}cout<<tmp<<endl;}
}

E.由你来决定怎么颁奖

解题思路: 根据题意,金牌的数量要比银牌和铜牌数量少,银牌和铜牌间的数量没有关系束缚。且奖牌的数量要小于等于参赛人数的半数。因为给定的选手的成绩已经排好序了,所以不用再亲自排序了。分配方法:让金牌成绩线只等于最高成绩,使获得金牌的数量最小。银牌处理方式同类似于金牌,但要同时满足数量比金牌多。剩下能颁发的奖都给铜牌。判断金牌数量是否大于银牌且大于铜牌数量。

正式题解:

 #include<iostream>using namespace std;const int maxn=4*1e5+10;int s[maxn];int t;int n;int i,j,k;int x,y,z;int tmp,cmp;int main(){cin>>t;while(t--){cin>>n;k=n/2;x=y=z=0;for(i=1;i<=n;i++)cin>>s[i];i=1;while(s[i]==s[1]&&i<=k){i++;x++;}j=s[i];while(s[i]==j&&i<=k){i++;y++;}while(y<=x&&i<=k){j=s[i];while(s[i]==j&&i<=k){i++;y++;}}while(s[i]!=s[k+1]&&i<=k){i++;z++;}if(x>=y||x>=z){ cout<<"0 0 0"<<endl;continue;}elsecout<<x<<" "<<y<<" "<<z<<endl;}return 0;}

D.Eat Candies

解题思路: 先把三堆糖果从小到大排序。先一直吃第一堆和第三堆,直到第三堆数量等于第二堆或者第一堆已吃完。如果第一堆仍有剩余,将其均分为两份,第一份与第二堆同时吃,第二份与第三堆同时吃。最后同时吃第二堆和第三堆。

正式题解:

#include<iostream>
#include<algorithm>
using namespace std;
typedef long long ll;
const int maxn=1e5+10;
int t;   //测试的样例数
int s[4];
int main()
{cin>>t;while(t--){int ans=0;cin>>s[1]>>s[2]>>s[3];sort(s+1,s+1+3);int k=s[3]-s[2];if(s[1]>=k){ans+=k;s[3]-=k;s[1]-=k;}else{ans+=s[1];s[3]-=s[1];s[1]=0;}if(s[1]){k=s[1]/2;s[2]-=k;s[3]-=k;ans+=2*k;}ans+=s[2];cout<<ans<<endl;}return 0;
}

B. Is it beautiful?

解题思路: 如果存在这样的区间[l,l+1,…,r]使区间内恰好只有前k个数,则区间长度为r-l+1,所以可以在输入时预处理排列中[1…n]每个数的位置,对数值进行排序。开两个变量记录包含当前值k(并包含之前值)需要的最大左右端点l和r,判断r-l+1是否等于k即可。

正式题解:

#include<iostream>
#include<cstdio>
#include<algorithm>
using namespace std;
const int maxn=2*1e5+10;
int t;   //测试的样例数
int n;    //数组中数的个数
int l,r;  //记录范围
int x;
int p[maxn],ans[maxn];
int i,j,k;   //控制循环
int main()
{cin>>t;while(t--){cin>>n;l=maxn;r=0;for(i=1;i<=n;i++){cin>>x;p[x]=i;}for(i=1;i<=n;i++){l=min(l,p[i]);r=max(r,p[i]);if(r-l+1==i)ans[i]=1;elseans[i]=0;}for(int i=1;i<=n;i++)cout<<ans[i];cout<<endl;}return 0;
}

赛后总结

对于本次比赛,=感觉自己很拉胯,一开始就因为看错数据范围被一个签到题难住、、、、菜到地缝中了。而且就做出来一道签到题,有的做题的点还是想不到,看来还是做的题太少了,见识的少,做题的时候没有思路。总的说还是以后的比赛好好打,多认真的研究一些题目,多见识见识总是好的,量变引起质变。自己多多努力,加油!

QLU—新生训练赛002补题相关推荐

  1. 寒假的牛客训练赛1补题

    寒假我太摸鱼了 牛牛最近做了这么一道题: "对于一给定的 n(1≤n≤109)n(1\leq n\leq 10^{9})n(1≤n≤109),计算ϕ(n)\phi(n)ϕ(n), 之中 ϕ( ...

  2. J - Sum(南京预选赛周末训练赛)补题

    题意:(square-free integer )无平方整数是除了1以外不被其它整数的平方除的数. 一个数n = ab,问你有多少个a,b的组合,a,b都是无平方整数,用f(n)表示,让你求 思路:首 ...

  3. bistuacm 2019年第⑦场新生训练赛题解

    比赛链接:bistuacm 新生训练赛 第七场 难度:cf 900~1400 A 知识点:枚举 题意:寻找距离数组某个数最接近的a[i]<=k且b[i]=1的数. 解法:按题意模拟即可. #in ...

  4. 2018-2019赛季多校联合新生训练赛第五场补题与题解(中石油)

    总结:这场比赛比的我很迷啊,刚开始一个多小时就a了七道题,然后往后怎么做都做不出来题了...我也不知道为什么,反正比赛途中因为一个题做不出来直接自闭(疯狂锤头),通过这场比赛我发现一件事情:打比赛的时 ...

  5. 2021acm-icpc区域赛(南京)补题笔记

    文章目录 前言 题目一览 A.Oops, It's Yesterday Twice More(签到) 题意 思路 M. Windblume Festival(签到) 题意 思路 C. Klee in ...

  6. QLU寒假训练赛题解合集

    为了节省版面: 1.所有寒假训练赛题解都集中在这一篇里 2.所有题解代码都可以直接点击题目链接查看 0115 A题:签到,输出n+1 B题:签到,从左端点向右找一段和小于0的区间,再从右往左找 C题: ...

  7. 2021 CCCC天梯赛L1补题

    前言 这次天梯赛表现没有达到预期,L1的分没有拿全,L2有2题没考虑完全,总之很愧疚拖了队友后腿.今天先补上L1没拿满分的题. L1补题 前言 L1-078 吉老师的回归 输入样例1 输出样例1 输入 ...

  8. 2021年GDUT第11届腾讯杯新生程序设计竞赛(补题)

    费话不多说,直接开始补题吧(主要也是没啥心情说了) (题解没有代码,寄) A 比比谁更大 废话可跳过:在本次比赛A题的位置,一开始做直接写了求阶乘的递归函数,WA了一发.然后看到了数据范围:1e9(这 ...

  9. 2020年湖南中医药大学“华为杯”大学生程序设计竞赛——正式赛(赛后补题)

    目录 A-幸福小组 B-菜鸡驿站 C-TC的火柴 D-n盏灯 E-电子手表 F- TC的steam账号 G- 万圣节 H-最少颜色 I-2048 J-解密 K-TC的门牌号 L-粗心的小明 M-小明的 ...

最新文章

  1. Windows下一键搭建redmine
  2. 如何从Java中的字符串值获取枚举值?
  3. 拍卖源码java_Java并发的AQS原理详解
  4. VMware宣布完成27亿美元收购Pivotal;日本成功研发出6G芯片:单载波速度高达100Gbps;联想手机再换新掌门……...
  5. WPF 凭证分录控件
  6. ubuntu 13.10 64位安装及配置 google拼音输入法及Adobe flash player、mp3 插件安装、中文GBK编码等 -转
  7. 在bash中仅使用l列出目录:检查
  8. 关于Java IO流学习总结
  9. SQL server sysobjects表说明
  10. 实时渲染器不止lumion,Chaos Vantage你值得一试
  11. 火狐浏览器常用插件的使用
  12. 服务封装软件 nssm
  13. jsp代码没有错,但是总是有红叉(一招解决)
  14. [关系图谱] 二.Gephi导入共线矩阵构建作者关系图谱
  15. 学校考场重要组成部分ntp子母钟(时间同步系统)方案
  16. 基于小程序的网上商城系统的设计与实现毕业设计论文,网上购物商城小程序毕业论文
  17. 为什么有些人拒绝别人的方式是说谎而不是直接说不?
  18. 基于javaweb+jsp的户籍管理系统(JavaWeb JSP MySQL Servlet SSM SpringBoot Bootstrap)
  19. 真正的高手,都在自讨苦吃——数显之家快讯之【SHIO世硕心语】
  20. exe制作成安装包,Inno Setup软件使用教程

热门文章

  1. DirectUI学习笔记(1)
  2. VCS2018 linux 安装
  3. [附源码]Java计算机毕业设计SSM工作计划统计分析系统
  4. kill 和 kill -9 的区别
  5. 今日头条还可以引流么?今日头条引流效果怎么样?
  6. 数学基础知识总结 —— 7. 行列式的基本知识
  7. 用html写一个计时器
  8. 2.4 旋转曲面 (1)
  9. matlab将图片旋转的代码_空间曲线绕空间直线旋转生成的旋转曲面方程
  10. 2021年安全员-C证考试及安全员-C证考试技巧