C - Minimization

枚举就可以了

因为最后一定会变成1,所以第一次操作的区间就包含1会比较优,然后枚举1在第一次操作区间里排第几个取min即可

#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
const int N=100005;
int n,k,w,a[N],ans=1e9;
int read()
{
int r=0,f=1;
char p=getchar();
while(p>'9'||p<'0')
{
if(p=='-')
f=-1;
p=getchar();
}
while(p>='0'&&p<='9')
{
r=r*10+p-48;
p=getchar();
}
return r*f;
}
int main()
{
n=read(),k=read();
for(int i=1;i<=n;i++)
{
a[i]=read();
if(a[i]==1)
w=i;
}
for(int i=1;i<=k;i++)
if(w>=i&&n-w>=k-i)
ans=min(ans,(int)(ceil((double)(w-i)/(double)(k-1))+ceil((double)(n-(w+k-i))/(double)(k-1))));
printf("%d\n",ans+1);
return 0;
}

D - Snuke Numbers

卡死在这道题上了,思路比较迷

首先打表发现,Snuke数只会出现在结尾为9,99,999,9999……的数中,9的数量是单调递增的,但是变化点看起来并没有规律实际上也没有,但是可以通过O(能过)的方式判断出来

设p和q分别表示最高位数和位数,每次判断一下,如果当前位数不满足,则q++,否则输出答案,p++

#include<iostream>
#include<cstdio>
#include<cmath>
using namespace std;
int S(long long x)
{
int r=0;
while(x)
r+=x%10,x/=10;
return r;
}
int main()
{
long long k,p=2,q=1;
scanf("%d",&k);
while(k)
{
long long n=p*q-1,m=ceil((double)p/10.0)*q*10-1;//cerr<<n<<" "<<m<<endl;
if(n*S(m)>m*S(n))
p=ceil((double)p/10.0),q*=10;
else
{
printf("%lld\n",n);
k--,p++;
}
}
return 0;
}

E - Independence

其实挺好做的,但是在D上纠结太久了

建出补图,分成两个团就变成了分成两个集合,有边相连的点不能在同一集合。找最小值黑白染色之后跑取min即可,bitset的用法非常棒

#include<iostream>
#include<cstdio>
#include<bitset>
using namespace std;
const int N=705;
int n,m,a[N][N],s[2],c[N],ans=1e9;
bool v[N],flg;
bitset<N>b;
int read()
{
int r=0,f=1;
char p=getchar();
while(p>'9'||p<'0')
{
if(p=='-')
f=-1;
p=getchar();
}
while(p>='0'&&p<='9')
{
r=r*10+p-48;
p=getchar();
}
return r*f;
}
void dfs(int u,int col)
{
c[u]=col;
v[u]=1;
s[col]++;
for(int i=1;i<=n;i++)
if(i!=u&&!a[u][i])
{
if(!v[i])
dfs(i,col^1);
else if(c[i]!=col^1)
flg=1;
}
}
int main()
{
n=read(),m=read();b[0]=1;
for(int i=1;i<=m;i++)
{
int x=read(),y=read();
a[x][y]=a[y][x]=1;
}
for(int i=1;i<=n;i++)
if(!v[i])
{
s[0]=s[1]=0;
dfs(i,0);
b=(b<<s[0])|(b<<s[1]);
}
if(flg==1)
{
puts("-1");
return 0;
}
for(int i=0;i<=n;i++)
if(b[i])
ans=min(ans,i*(i-1)/2+(n-i)*(n-i-1)/2);
printf("%d\n",ans);
return 0;
}

最新文章

  1. Nodejs事件引擎libuv源码剖析之:请求(request)结构的设计剖析
  2. Android 登录界面与首页的设计
  3. js错误
  4. 字符串str功能介绍
  5. oracle表相关
  6. python global vs nonlocal (2)
  7. Web前端的35个jQuery小技巧
  8. 多设备官方教程(6)控制多版本API
  9. swift 截取字符串
  10. xargs 参数
  11. c - 比较字符串的大小
  12. IOS程序启动的过程
  13. Swift 学习笔记 (二)
  14. 3_SQL Server通过代码的方式添加数据
  15. sql面试总结
  16. java全角和半角转换
  17. 转:log4j的使用简介
  18. load file within a jar
  19. iOS 开发者证书总结 in-house
  20. js中使用对象注意

热门文章

  1. 全文搜索(A-3)-推荐系统构建步骤
  2. Automation 的 Wait 工具
  3. Codeforces870F. Paths
  4. mysql 安装与卸载
  5. HashSet源码分析2
  6. ios计算字符串宽高,指定字符串变色,获取URL参数集合
  7. restful接口就是url嘛,通过http请求发起访问。那接口进行监控,就可以监控这个restful url嘛
  8. intellij使用tomcat搭建servlet运行时环境
  9. 获取路由事件的源Source和OriginalSource
  10. C++MFC编程笔记day01 MFC介绍、创建MFC程序和重写消息处理