cf1206解题报告

A

模拟

#include <bits/stdc++.h>
using namespace std;
int n,m,a[1010],b[12910];
int dsr[1111];
int main() {
scanf("%d",&n);
for(int i=1;i<=n;++i) scanf("%d",&a[i]),dsr[a[i]]=1;
scanf("%d",&m);
for(int j=1;j<=m;++j) scanf("%d",&b[j]),dsr[b[j]]=1;
for(int i=1;i<=n;++i) {
for(int j=1;j<=m;++j) {
if(!dsr[a[i]+b[j]]) {
cout<<a[i]<<" "<<b[j];
return 0;
}
}
}
return 0;
}

B

普及dp,其实不用开数组

#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int _=2e5+7;
ll n,a[_],b[_],f[_][2];
int main() {
cin>>n;
for(ll i=1,x;i<=n;++i) {
cin>>x;
a[i]=abs(x-1),b[i]=abs(x+1);
}
f[0][1]=100000000000000000LL;
for(ll i=1;i<=n;++i) {
f[i][0]=min(f[i-1][0]+a[i],f[i-1][1]+b[i]);
f[i][1]=min(f[i-1][1]+a[i],f[i-1][0]+b[i]);
}
cout<<f[n][0];
return 0;
}

C

贪心,套路,构造

互相差1,那i和i+n+1就是相差1的。

根据样例可以这样构造。

\(a[1]=1,a[n+1]=2;\)

\(a[2]=2n,a[n+2]=2n-1;\)

\(a[3]=3,a[n+3]=4;\)

\(a[4]=2n-2,a[n+4]=2n-3;\)

\(…………\)

无解瞎猜偶数,很套路

#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int _=2e5+7;
int n,a[_],b[_];
int main() {
scanf("%d",&n);
if(n%2==0) return puts("NO"),0;
int l=1,r=n*2;
for(int i=1;i<=n;++i) {
if(i&1) {
a[i]=l;
++l;
b[i]=l;
++l;
} else {
a[i]=r;
--r;
b[i]=r;
--r;
}
}
printf("YES\n");
for(int i=1;i<=n;++i) printf("%d ",a[i]);
for(int i=1;i<=n;++i) printf("%d ",b[i]);
return 0;
}

D

这个题很容易想歪呀。

二进制的x位为1的数的个数有3个及其以上。

答案就是3,且没有比他再小的ans了。

首先先去掉没用的0。

剩下的数如果大于120的话,必定有上述情况。

因为每一个数至少包含一位。

然后范围缩小到100了。

暴力Floyd找最小环,学到了。

#include <bits/stdc++.h>
#define ll long long
using namespace std;
int n,ans,dis[207][207],g[207][207];
std::vector<ll> a;
int main() {
scanf("%d",&n);
for(int i=1;i<=n;++i) {
ll x;cin>>x;
if(x) a.push_back(x);
}
n=a.size();
if(n>=130) return puts("3"),0;
memset(dis,0x3f,sizeof(dis));
memset(g,0x3f,sizeof(g));
for(int i=1;i<=n;++i)
for(int j=1;j<=n;++j)
dis[i][j]=g[i][j]=233;
for(int i=1;i<=n;++i) {
for(int j=1;j<=n;++j) {
if(i==j) continue;
if(a[i-1]&a[j-1]) dis[i][j]=g[i][j]=1;
}
}
ans=200;
for(int k=1;k<=n;++k) {
for(int i=1;i<k;++i)
for(int j=i+1;j<k;++j)
ans=min(ans,dis[i][j]+g[j][k]+g[k][i]);
for(int i=1;i<=n;++i)
for(int j=1;j<=n;++j)
dis[i][j]=min(dis[i][j],dis[i][k]+dis[k][j]);
}
if(ans==200) ans=-1;
printf("%d\n",ans);
return 0;
}

E,F

看见交互题就烦,虽然不是不能做。

算了,咕咕了。

最新文章

  1. 有人要分享pjax吗?
  2. 剑指Offer面试题:1.实现Singleton模式
  3. 12步创建高性能Web APP
  4. HTML锁定Table中某一列
  5. 从零开始,CentOS6安装ghost博客
  6. smarty 比较运算符对照表
  7. POJ_2385_Apple_Catching_(动态规划)
  8. Performance Tuning guide 翻译 || 前言
  9. UESTC_秋实大哥搞算数 2015 UESTC Training for Data Structures&lt;Problem N&gt;
  10. C#泛型详解
  11. php 汉字转拼音 [包含20902个基本汉字+5059生僻字]
  12. Windows 下 Apache HTTP Server 与 Tomcat 的整合
  13. POJ 2231 Moo Volume
  14. idea创建的java web项目打包发布到tomcat
  15. TS-Node 体验
  16. webapp定位
  17. linux 环境变量设置方法总结(PATH / LD_LIBRARY_PATH)
  18. 8 -- 深入使用Spring -- 1...2 Bean后处理器的用处
  19. [转]C# 使用代理访问网络
  20. 20145326 《Java程序设计》第10周学习总结

热门文章

  1. FutureTask源码2
  2. Flask高级
  3. 想让自己的项目6666,可是 Chrome 不答应!
  4. Java学习:网络编程总结
  5. STM32最小系统设计
  6. vs 发版时,在发版的文件夹中,找不到应该有的某个文件
  7. .NET创建Windows定时任务
  8. C#将运算字符串直接转换成表达式且计算结果
  9. 解决plsql中文显示问号(???)问题
  10. Apache ActiveMQ 远程代码执行漏洞 (CVE-2016-3088) 复现