AtCoder Regular Contest 099

C - Minimization

题意

题意:给出一个n的排列。每次操作可以使一段长度为K的连续子序列变成该序列的最小数。求最少几次使得整个数列全部为1。

分析

可以发现每次操作都要包含1。所以我们的答案就应该是 \(\frac{n-k}{k-1}\)。

直接\(O(1)\)求就可以了。

#include <iostream>
#include <cstdlib>
#include <cmath>
#include <string>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <queue>
#include <set>
#include <map>
#define re register
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))
#define MAXN 4000007
#define ll long long
#define mo 19930726
#define ls rt<<1
#define rs rt<<1|1
using namespace std;
typedef unsigned long long ull;
int n,k;
int main()
{
cin>>n>>k;
int ans=1;
n-=k;
ans+=n/(k-1);
n%=(k-1);
if(n) ans+=1;
cout<<ans;
}

D - Snuke Numbers

题意

令S(n)表示n这个数各位之和。定义一个数n合法:所有m>n,都有n/S(n)<=m/S(m)。

输出前K个合法的数。

分析

发现所有的snuke数的尾数基本都是9。

所以我们直接暴力求就可以了。

#include <iostream>
#include <cstdlib>
#include <cmath>
#include <string>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <queue>
#include <set>
#include <map>
#define re register
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))
#define MAXN 4000007
#define ll long long
#define mo 19930726
using namespace std;
typedef unsigned long long ull;
#define ms(arr) memset(arr, 0, sizeof(arr))
const int inf = 0x3f3f3f3f;
int n;
ll clac(ll x)
{
ll cnt=0;
while(x) cnt+=x%10,x/=10;
return cnt;
}
int main()
{
ll x=0,x1,x2,m=1;
cin>>n;
for(int i=1;i<=n;i++){
x1=x+m;x2=x+m*10;
if(x1*clac(x2)<=x2*clac(x1))
x=x1;
else x=x2,m*=10;
printf("%lld\n",x);
}
}

E - Independence

题意

题意:给出一个无向图,让你将它分成两部分使得,每部分的点互相有边相连。

最小化边的数量。

分析

建立补图。

对补图进行二分图染色。

可以发现如果补图不是二分图的话,不合法。

然后对于每个联通块的两种颜色x和y,我们要通过交换一些x和y使\(\sum^n_{i=1}x[i]\)尽量接近于\(\frac N 2\)。

背包求一下就可以了。

#include <iostream>
#include <cstdlib>
#include <cmath>
#include <string>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <queue>
#include <set>
#include <map>
#define re register
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))
#define MAXN 4000007
#define mo 19930726
using namespace std;
typedef unsigned long long ull;
#define ms(arr) memset(arr, 0, sizeof(arr))
const int inf = 0x3f3f3f3f;
int f[1001][1001],x[100001],y[10001],col[10001];
int n,m,a[1001][1001],cnt[100001],tot;
bool vis[100001];
struct po
{
int nxt,to;
};
po edge[1000001];
inline int read()
{
int x=0,c=1;
char ch=' ';
while((ch>'9'||ch<'0')&&ch!='-')ch=getchar();
while(ch=='-') c*=-1,ch=getchar();
while(ch<='9'&&ch>='0')x=x*10+ch-'0',ch=getchar();
return x*c;
}
inline void put_color(int u)
{
vis[u]=1;
cnt[col[u]]++;
for(re int i=1;i<=n;i++){
if(a[u][i]==0){
if(!vis[i]){
col[i]=!col[u];
put_color(i);
} else if(col[u]==col[i]){
cout<<-1;
exit(0);
}
}
}
}
int main()
{
n=read();m=read();
for(re int i=1;i<=n;i++) a[i][i]=1;
for(re int i=1;i<=m;i++){
int u=read(),v=read();
a[u][v]=a[v][u]=1;
}
for(re int i=1;i<=n;i++) {
if(!vis[i]){
cnt[0]=cnt[1]=0;
put_color(i);
tot++;
x[tot]=cnt[0];
y[tot]=cnt[1];
}
}
f[0][0]=1;
for(re int i=1;i<=tot;i++){
for(re int j=0;j<=n;j++){
if(f[i-1][j]){
f[i][j+x[i]]=1;
f[i][j+y[i]]=1;
}
}
}
int ans=n*n;
for(re int i=0;i<=n;i++){
if(f[tot][i]) ans=min(ans,i*(i-1)/2+(n-i)*(n-i-1)/2);
}
cout<<ans; }

AtCoder Regular Contest 099的更多相关文章

  1. AtCoder Regular Contest 099 (ARC099) E - Independence 二分图

    原文链接https://www.cnblogs.com/zhouzhendong/p/9224878.html 题目传送门 - ARC099 E - Independence 题意 给定一个有 $n$ ...

  2. AtCoder Regular Contest 099 C~E

    C - Minimization 枚举就可以了 因为最后一定会变成1,所以第一次操作的区间就包含1会比较优,然后枚举1在第一次操作区间里排第几个取min即可 #include<iostream& ...

  3. AtCoder Regular Contest 061

    AtCoder Regular Contest 061 C.Many Formulas 题意 给长度不超过\(10\)且由\(0\)到\(9\)数字组成的串S. 可以在两数字间放\(+\)号. 求所有 ...

  4. AtCoder Regular Contest 094 (ARC094) CDE题解

    原文链接http://www.cnblogs.com/zhouzhendong/p/8735114.html $AtCoder\ Regular\ Contest\ 094(ARC094)\ CDE$ ...

  5. AtCoder Regular Contest 092

    AtCoder Regular Contest 092 C - 2D Plane 2N Points 题意: 二维平面上给了\(2N\)个点,其中\(N\)个是\(A\)类点,\(N\)个是\(B\) ...

  6. AtCoder Regular Contest 093

    AtCoder Regular Contest 093 C - Traveling Plan 题意: 给定n个点,求出删去i号点时,按顺序从起点到一号点走到n号点最后回到起点所走的路程是多少. \(n ...

  7. AtCoder Regular Contest 094

    AtCoder Regular Contest 094 C - Same Integers 题意: 给定\(a,b,c\)三个数,可以进行两个操作:1.把一个数+2:2.把任意两个数+1.求最少需要几 ...

  8. AtCoder Regular Contest 095

    AtCoder Regular Contest 095 C - Many Medians 题意: 给出n个数,求出去掉第i个数之后所有数的中位数,保证n是偶数. \(n\le 200000\) 分析: ...

  9. AtCoder Regular Contest 102

    AtCoder Regular Contest 102 C - Triangular Relationship 题意: 给出n,k求有多少个不大于n的三元组,使其中两两数字的和都是k的倍数,数字可以重 ...

随机推荐

  1. CSS-微信开放UI样式

    下面的链接是微信开放的CSS的样式: http://weui.github.io/weui/ 附上GitHub地址:https://github.com/weui/weui

  2. 【BZOJ2179】FFT快速傅立叶

    [BZOJ2179]FFT快速傅立叶 Description 给出两个n位10进制整数x和y,你需要计算x*y. Input 第一行一个正整数n. 第二行描述一个位数为n的正整数x. 第三行描述一个位 ...

  3. [LintCode] 通配符查询

    动态规划: class Solution { public: /** * @param s: A string * @param p: A string includes "?" ...

  4. 纯css实现隐藏滚动条仍可以滚动

    移动端弹出层加了滚动条之后,滚动条一直在,有些不美观,overflow:hidden;虽然可以隐藏滚动条,但是不能滚动.需要实现隐藏滚动条但是仍可以滚动,js实现太麻烦,直接将滚动条隐藏会更好一些. ...

  5. 求其中同一个主叫号码的两次通话之间间隔大于10秒的通话记录ID

    求其中同一个主叫号码的两次通话之间间隔大于10秒的通话记录ID 例如:6,7,8,9,10条记录均符合 ID 主叫号码 被叫号码      通话起始时间            通话结束时间       ...

  6. 巨蟒python全栈开发-第17天 核能来袭-成员

    一.今日主要内容 1.成员 在类中你能写的所有内容都是类的成员 2.变量 (1)实例变量:昨天写的就是实例变量,由对象去访问的变量. (2)类变量(静态变量):此时,这个变量属于类,但是对象也可以访问 ...

  7. Druid对数据库密码加密的坑

    背景: 在对已有项目搭建本地环境,修改了本地ip端口和数据库帐号密码(使用了明文). 然后项目一直跑不起来,还抛出各种异常,经过分析发现主要错在这里:druid java.lang.IllegalAr ...

  8. ArcPy开发IDE

    最近时不时的使用Arcpy的脚本,这就不可避免的面临Python IDE的选择.可以用来Python开发的IDE非常的多,像Eclipse等等.尝试了一些IDE后,逐渐的固定使用下面两款. 一.Pyt ...

  9. 对protected函数的简单理解 good

    对于protected提供的函数和属性,除非想扩充这个类的功能,否则是完全用不到的.外部函数main()永远只能调用public的那些函数.所以从拖拉控件编程的角度来讲,只需要学习public的函数和 ...

  10. Redis、MongoDB及Memcached的区别 Redis(内存数据库)

    Redis.MongoDB及Memcached的区别 Redis(内存数据库) 是一个key-value存储系统(布式内缓存,高性能的key-value数据库).和Memcached类似,它支持存储的 ...