A(模拟+数学)

题意:在一个数列当中最少添加多少个数可以使它们两两互质,并打印出添加以后的数列

 #include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <vector>
#include <algorithm>
#include <set>
#include <map>
#include <bitset>
#include <cmath>
#include <queue>
#include <stack>
using namespace std;
const int maxn=;
const int maxm=;
int a[maxn];
int gcd(int a,int b)
{
if(b==) return a;
return gcd(b,a%b);
}
int n;
int main()
{
while(cin>>n)
{
for(int i=;i<n;i++)
scanf("%d",&a[i]);
vector<int>b;
int cnt=;
for(int i=;i<n-;i++)
{
if(gcd(a[i],a[i+])>=){
cnt++;
int k;
for(int j=;j<=maxm;j++){
if(gcd(a[i],j)<&&gcd(j,a[i+])<){
k=j; break;
}
}
b.push_back(a[i]);
b.push_back(k);
}
else{
b.push_back(a[i]);
}
}
b.push_back(a[n-]);
cout<<cnt<<endl;
for(int i=;i<b.size()-;i++)
cout<<b[i]<<" ";
cout<<b[b.size()-]<<endl;
}
return ;
}

B(队列模拟)

题意:根据公交车上下车的顺序,打印下车的顺序

分析:用队列直接进行模拟即可

 #include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <vector>
#include <algorithm>
#include <set>
#include <map>
#include <bitset>
#include <cmath>
#include <queue>
#include <stack>
using namespace std;
const int maxn=;
int a[maxn][];
int n,m;
int main()
{
while(cin>>n>>m)
{
queue<int>que[];
int k=;
int cnt=;
for(;;)
{
if(cnt>=n) break;
if(k>m) break;
que[].push(k);
k++;
if(k>m) break;
que[].push(k);
k++;
cnt++;
}
for(;;)
{
if(k>m) break;
que[].push(k);
k++;
if(k>m) break;
que[].push(k);
k++;
}
vector<int>b;
int t;
int f1=,f2=,f3=,f4=;
for(;;)
{
if(que[].empty()){
f2=;
}else{
t=que[].front();
que[].pop();
b.push_back(t);
}
if(que[].empty()){
f1=;
}else{
t=que[].front();
que[].pop();
b.push_back(t);
}
if(que[].empty()){
f3=;
}else{
t=que[].front();
que[].pop();
b.push_back(t);
}
if(que[].empty()){
f4=;
}else{
t=que[].front();
que[].pop();
b.push_back(t);
}
if(f1&&f2&&f3&&f4) break;
}
for(int i=;i<b.size()-;i++)
cout<<b[i]<<" ";
cout<<b[b.size()-]<<endl;
}
return ;
}

C(dp+统计)

题意:有一由0与1组成的串,可以将其中的k个0改为1,问最长的连续1的串为多长

分析:这道题看了题解,对于区间[l,r]来说统计其上0的个数是否会大于k,若小于k,则区间[l+1,r]上个数也小于k。所以我们统计区间[1,n]上0个数小于k的最长区间即可。统计的时候才用二分思想,从l和r两个方向同步进行

 #include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <vector>
#include <algorithm>
#include <set>
#include <map>
#include <bitset>
#include <cmath>
#include <queue>
#include <stack>
using namespace std;
const int maxn=;
int a[maxn];
int dp[maxn];
int main()
{
int n,k;
while(cin>>n>>k)
{
memset(dp,,sizeof(dp));
for(int i=;i<=n;i++)
{
scanf("%d",&a[i]);
if(!a[i]) //统计0到i中0的个数
dp[i]=dp[i-]+;
else
dp[i]=dp[i-];
}
int left=,right=,mx=,j=;
for(int i=;i<=n;i++)
{
while(dp[i]-dp[j]>k) j++;
if(mx<i-j)
{
mx=i-j;
left=j+;
right=i;
}
}
cout<<mx<<endl;
for(;left<=right;left++) a[left]=;
for(int i=;i<n;i++)
printf("%d ",a[i]);
printf("%d\n",a[n]);
}
return ;
}

最新文章

  1. 深入解析SQL Server并行执行原理及实践(下)
  2. [LintCode] Delete Node in the Middle of Singly Linked List 在单链表的中间删除节点
  3. 方便的一站式svn/git服务器软件(linux)
  4. .net(C#)访问Oracle数据库的几种免安装组件的对比
  5. 08socket编程
  6. vs2015编译boost 64位
  7. Win8系统 Python安装 - 入门
  8. python字符串常用操作方法
  9. DSp寄存器“是怎么和板子上的”具体地址“一一对应起来的
  10. Java解析XML文档(简单实例)&mdash;&mdash;dom解析xml
  11. C++类型转换运算符
  12. ubuntu 新建zend framework 项目
  13. Android TXT文件读写
  14. 96 Stocks APIs: Bloomberg, NASDAQ and E*TRADE
  15. 又是一个MVP+RxJava+Retrofit的干货集中营
  16. Python bytes数据类型
  17. lodash 判断一个数据是否包含另一个数组
  18. 并发编程之I/O模型
  19. 计算机cpu、寄存器、内存区别
  20. MongoDB优化,建立索引实例及索引机制原理讲解

热门文章

  1. Android OpenGL ES(七)基本几何图形定义 .
  2. 小蚂蚁搬家&lt;贪心&gt;
  3. 直接拿来用!Facebook移动开源项目大合集
  4. Form类的KeyPreview属性
  5. frameset导航框架
  6. 深入Java单例模式
  7. struts2+ajax实现异步验证实现
  8. Java8学习笔记----Lambda表达式 (转)
  9. XAMPP命令之LAMPP
  10. Linux下find命令用法小结