A.Dislike of Threes

Problem - A - Codeforces

题意:

Polycarp不喜欢在十进制表示中可以被3整除的整数 或以数3字结尾的整数。

Polycarp 也不喜欢同时满足这两个条件的整数。

Polycarp 开始写出正数(大于 00) 他喜欢的整数: 1 , 2 , 4 , 5 , 7 , 8 , 10 , 11 , 14 , 16 , ...1,2,4,5,7,8,10,11,14,16,…. 输出克克- 此序列的第 - 个元素(元素编号从 11)。

输入

第一行包含一个整数 吨吨 (1 ≤ t ≤ 1001≤吨≤100) — 测试用例的数量。然后t个测试用例

每个测试用例由一行包含一个整数组成 克克 (1 ≤ k ≤ 10001≤k≤1000)。

输出

对于每个测试用例,在单独的行中输出一个整数 表示序列的第k个

思路:k的范围较小,直接打表,然后输出第K个数即可

代码如下:

#include<iostream>
#include<algorithm>
#include<cmath>using namespace std;typedef long long ll;int a[1010];void init()
{int count=1;for(int i=1;;i++){if(i%3!=0&&i%10!=3){a[count]=i;count++;}if(count>1000)break;}}int main(void)
{ios::sync_with_stdio(false);int t,x;cin>>t;init();while(t--){cin>>x;cout<<a[x]<<endl;}
}

B.Who's Opposite?

Problem - B - Codeforces

题意,一群人围成一个圈,输入两个对立的人的编号,再输入一个x,输出x对面的人的编号,如果圈圈不成立,输出-1.

例如 输入 6 3 4,即一个圈123456,3对立6,输出4的对立1即可。

1≤a,b,c≤108

思路:思维题,给出的对立的两个数为a,b,

  1. 显然,只有当a,b为1、2时a-b的绝对值才会等于一,其他情况直接输出-1.
  2. a-b的绝对值的两倍即为围成圈的总人数,当c>2fabs(a-b)时,输出-1.
  3. a到b的距离(我们假定a>b)(a-b-1)必须≥b到1的距离(b-1)。

代码如下:

#include<iostream>
#include<algorithm>
#include<cmath>using namespace std;typedef long long ll;int a[1010];int main(void)
{ios::sync_with_stdio(false);int t,a,b,c,d,x;cin>>t;for(int i=0;i<t;i++){cin>>a>>b>>c;if(a<b){x=a;a=b;b=x;}if(fabs(a-b)==1&&a!=2){cout<<-1<<endl;continue;}d=(a-b)*2;if(c>d)cout<<-1<<endl;else if(a-b-1<b-1)cout<<-1<<endl;else{d=d/2;if(d>c)d=d+c;elsed=c-d;if(d==0)d=2*(a-b);cout<<d<<endl;}}
}

C.Infinity Table

Problem - C - Codeforces

题意:如图所示,第一个数是1,第二个是2,第三个是3,第四个是4,按如图所示的顺序排列,给出一个数,问这个数是第几行第几列,6是2行3列,9是3行1列。

思路:首先先确定这个数是从第几个数开始的,例如6是从5开始,11从10开始,所以只要用while循环求出开始的数while(sum<k),sum为开始的数,k为所求的数,第一行的数构成等差数列的前n项和公式,(sum=1+i*1+(i*(i-1)*2)/2)。

如果sum==k直接输出(1,i)即可,

否则继续求数的位置。

当k-sum的值小于i时,即该数只向下移,没有左移,输出1+k-sum,i+1即可

否则左移了,输出i+1,i-k+sum+1即可。

代码如下:

#include<iostream>
#include<algorithm>
#include<cmath>using namespace std;typedef long long ll;int a[1010];int main(void)
{ios::sync_with_stdio(false);int t,k,i=0;;cin>>t;while(t--){cin>>k;i=-1;ll sum=0;while(sum<k){i++;sum=1+i*1+(i*(i-1)*2)/2;}if(sum==k){cout<<1<<" "<<i+1<<endl;}else{i--;sum=1+i*1+(i*(i-1)*2)/2;int ans=k-sum;int s=i;if(s>=ans){cout<<1+ans<<" "<<i+1<<endl;}else{ans=ans-s;cout<<i+1<<" "<<i-ans+1<<endl;}}}
}

​​​​​​

D.Make a Power of Two

Problem - D - Codeforces

题意:

给出一个数A,要求把这个数变成一个2的n次方的数,

但是只能执行以下两个操作:

  1. 从A中任意删除一个数
  2. 在A的边添加任意一个数。

问操作成功的最小次数。

思路:2的n次方个数不多,先用数组存起来,然后用A挨个转化为这些数,记录最小操作次数,最后输出即可。

比较的过程使用双指针,用一个变量cnt记录相同字符的个数,那么需要删除的字符个数为A.size()-cnt,需要增加的个数为B.size()-cnt。操作次数之和为删除、增加次数之和。、

Tips:数字转字符串可以用to_string()函数,还有stringstream。

代码如下:

#include<iostream>
#include<algorithm>
#include<cmath>
#include<string>
#include<cstring>
#include<sstream>using namespace std;typedef long long ll;ll a[1010];void init()
{for(int i=0;i<63;i++)a[i]=(ll)(pow(2,i));
}int solve(string st1,string st2)
{int a=0,b=0,temp=0;for(;a<st1.size()&&b<st2.size();){if(st1[a]==st2[b]){a++;b++;temp++;}else{a++;}}return (st1.size()-temp+st2.size()-temp);
}int main(void)
{ios::sync_with_stdio(false);int t;init();string st1,st2;cin>>t;while(t--){int ans=99999999;cin>>st1;for(int i=0;i<63;i++){stringstream streamstr;streamstr<<a[i];streamstr>>st2;ans=min(ans,solve(st1,st2));}cout<<ans<<endl;}
}

E. Polycarp and String Transformation

Problem - E - Codeforces

题意:

输入一个字符串例如polycarppoycarppoyarppyarppyrpprppp

问该字符串是否能够有一个原字符串通过每次操作删除一个字符得到的新串,加到原字符串上得到,知道变成空串。如果能,输出原串和删除字符顺序。

Polycarppoycarppoyarppyarppyrpprppp可由polycarp依次删除lcoayrp
得到。
操作如下:
  1. polycarp->删除l->poycarp->加到原串后->Polycarppoycarp
  2. poycarp->删除c->poyarp->加到原串后->Polycarppoycarppoyarp
  3. poyarp->删除o->pyarp->加到原串后->Polycarppoycarppoyarppyarp
  4. pyarp->删除a->pyrp->加到原串后->Polycarppoycarppoyarppyarppvrp
  5. prp->删除r->pp->加到原串后->Polycarppoycarppoyarppyarppvrpprp
  6. pp->删除p->””->加到原串后->Polycarppoycarppoyarppyarppvrpprppp
  7. 变成空串结束。
  8. 如果操作失败输出-1

思路:

最后的串为str1,原串为str,删除顺序串为str2

  1. 最后的串从尾到头字符第一次出现的顺序就是删除顺序串的逆序。
  2. 最后的串中每个字符出现的次数除以删除该字符的顺序数即为该字符在原串中出现的次数ans,因为没删除前,每添加一次,该字符就重复ans次,因此如果求余后结果不为0,直接输出负-1.
  3. 要的到原串,只需要取最后的串的前sum项,sum为原串中所有字符出现的次数之和。(可以由3求得)
  4. 得到原串后,需要再模拟一下该过程检查是否能够由原串得到最后的串,最后输出即可。

代码如下:

#include<iostream>
#include<algorithm>
#include<cmath>
#include<string>
#include<cstring>
#include<stack>
#include<map>
#include<set>
#include<sstream>using namespace std;typedef long long ll;int check(string str,string str1,string str2)
{string ans=str1;for(int i=0;i<str2.size();i++){string tool="";for(int j=0;j<ans.size();j++){if(ans[j]==str2[i]){continue;}tool+=ans[j];}str1+=tool;ans=tool;}if(str1==str)return 1;return 0;
}int main(void)
{ios::sync_with_stdio(false);int t;cin>>t;while(t--){int flag=1,ans=0;map<char,int>mp1,mp2;string str,str1="",str2="";cin>>str;stack<char>ques,ant;for(int i=str.size()-1;i>=0;i--){if(mp1[str[i]]!=1){ant.push(str[i]);mp1[str[i]]=1;}mp2[str[i]]++;}while(!ant.empty()){str1+=ant.top();ant.pop();}for(int i=0;i<str1.size();i++){if(mp2[str1[i]]%(i+1)!=0){flag=0;break;}mp2[str1[i]]/=(i+1);}if(flag==0){cout<<-1<<endl;continue;}map<char,int>::iterator it=mp2.begin();for(it;it!=mp2.end();it++){ans+=it->second;}for(int i=0;i<ans;i++){str2+=str[i];}flag=check(str,str2,str1);if(flag==0){cout<<-1<<endl;continue;}else{cout<<str2<<" "<<str1<<endl;}}
}

Codeforces Round #739 (Div. 3)题解A-E相关推荐

  1. Codeforces Round #739 (Div. 3) A. Dislike of Threes

    Codeforces Round #739 (Div. 3)的其他题解在这 A. Dislike of Threes 题目大意: 输出第k个结尾数字不是3且不能被3整除的数 思路: 先初始化一下,然后 ...

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

    Codeforces Round #514 (Div. 2)题解 A 喵,直接模拟. B 枚举所有盖章时的,合法的,左上角的位置.能盖的话就盖一下.最后check一下图案是否相等即可 C 一轮一轮的扔 ...

  3. Codeforces Round #739 (Div. 3)(AK实况)

    Codeforces Round #739 (Div. 3) A. Dislike of Threes 找到第kkk个既不是333的倍数,个位数上也不是333的数,也已预处理然后O(1)O(1)O(1 ...

  4. Codeforces Round #182 (Div. 1)题解【ABCD】

    Codeforces Round #182 (Div. 1)题解 A题:Yaroslav and Sequence1 题意: 给你\(2*n+1\)个元素,你每次可以进行无数种操作,每次操作必须选择其 ...

  5. Codeforces Round #739 (Div. 3) ABCDEF1F2 解题思路

    Codeforces Round #739 (Div. 3) 可能是一开始大佬都写F1去了,我在D写完后发现F过的人数比E多了好多(个位数与十位数),以为F1比较简单,就直接开F1了,但自己分类讨论老 ...

  6. 【算法题解】Codeforces Round #817 (Div. 4)题解

    文章目录 Codeforces Round #817 (Div. 4)题解 A. Spell Check B. Colourblindness C. Word Game D. Line E. Coun ...

  7. Codeforces Round #747 (Div. 2)题解

    Codeforces Round #747 (Div. 2)题解 (本博客将持续更新以后每场CF div2的题解,喜欢ACM.OI的小伙伴记得点个关注哟) 昨天夜晚刷网络流刷入迷了,渐渐就忘记了我还要 ...

  8. Codeforces Round #789 (Div. 2)题解

    Codeforces Round #789 (Div. 2)题解 A. Tokitsukaze and All Zero Sequence 原题链接 算法标签 贪心 排序 思路 情况一:数组存在零 → ...

  9. Codeforces Round #739 (Div. 3) 「A B C D E F1 F2」

    Codeforces Round #739 (Div. 3) A. Dislike of Threes 题目描述: 如果一个数能被3整除或者十进制结尾的数字是3则是无趣的数,你想知道第n个有趣的数是什 ...

最新文章

  1. ftp部署一个可供centos6、centos7系统使用的yum网络仓库
  2. 合并a[0..mid]和a[mid+1,n-1],其中这两个数组分别有序
  3. 2021年临颖一高高考成绩查询,河南漯河名列前茅的4所高中,临颖一高强势登榜,你还知道几所?...
  4. SpringMVC实现文件上传
  5. 《中国人工智能学会通讯》——第12章 12.1 新世纪知识工程—— 在哪里跨越
  6. 华为NP课程笔记23-VRRP
  7. 笔记本显卡未连接计算机,电脑提示当前未使用连接到NVIDIA GPU的显示器如何解决...
  8. LayuiAdmin+TP5.1 数据表格添加数据详解
  9. Windows Live Writer插件开发
  10. JAVA学习路线图---(JAVA1234)
  11. js将数字转换成中文大写
  12. LiDAR Snowfall Simulation for Robust 3D Object Detection
  13. 2023年全国最新交安安全员精选真题及答案1
  14. 电商派争夺零售派:传统百货扎堆试水O2O
  15. web前端框架——Vue的特性
  16. Outlook2019版本的收发邮件设定
  17. Error in nextTick: “TypeError: Cannot read property ‘xxx‘ of undefined“
  18. 【流媒体协议】RTMP和RTSP的区别
  19. 本月(2019年8月)算法工程师一二线城市工资,杭州,广州,宁波,合肥半年涨幅在500元以上
  20. Echarts 生成地图html

热门文章

  1. 华为光伏usb适配器_无线胜有线,华为27W超级快充无线充电器评测(CP61)
  2. Neural Network Aided SC Decoder for Polar Codes(论文笔记)
  3. 使用Visual Studio Code开发.NET程序
  4. 在电脑上怎样将图片转成Word?
  5. 计算机专业系统集成考试,非计算机专业如何复习系统集成项目管理工程师考试...
  6. 水仙花数和变种水仙花数
  7. [完全免费] 在线UML Sequence Diagram 时序图工具 - 教程第3部分
  8. 微软Office OneDrive设置自动云端备份文件 (类似WPS Office+免费)
  9. 科技文献检索(十)——常用中文图书和期刊数据库
  10. 【问题思考总结】截得两部分质量相等的点是否就是质心?