PROBLEM D. Alarm Clock

  OvO http://codeforces.com/contest/898/problem/D

  codeforces 898d

  从前往后枚举,放进去后不合法就拿出来,记录拿出来的次数

  中途每放进去一个数,会影响到一个区间,标记这个区间的首位(做差分,首+1,尾-1),同时维护这些标记的前缀和

#include <iostream>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <cstdio> using namespace std; const int M=1e6+44; int n,m,k;
int s[M];
int sum[M],num[M]; int main()
{
int lst,ans=0;
scanf("%d%d%d",&n,&m,&k);
for(int i=1;i<=n;i++)
scanf("%d",&s[i]);
sort(s+1,s+n+1);
memset(sum,0,sizeof(sum));
lst=0;
for(int i=1;i<=n;i++)
{
for(int j=lst+1;j<=s[i];j++)
sum[j]+=sum[j-1];
lst=s[i];
if(sum[s[i]]-sum[max(0,s[i]-m)]+1>=k)
ans++;
else
sum[s[i]]++;
}
printf("%d\n",ans);
return 0;
}

  

PROBLEM E. Squares and not squares 

题 

  OvO http://codeforces.com/contest/898/problem/E

  codeforces 898e

  预处理出10000个左右的完全平方数,然后对于每个输入的数归类他们是否是完全平方数,并且算出各自的最小代价(二分之类的)

  然后根据代价排序,从小到大补足

#include <iostream>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <cstdio>
#include <set> using namespace std; typedef long long ll; const ll M=2e5+44; struct Node
{
ll num,val;
} g[M],ng[M]; ll lg,lng;
ll n,m;
ll s[M];
ll p[M];
ll lp;
set<ll> se; bool cmp(Node a,Node b)
{
return a.val<b.val;
} void init()
{
se.clear();
lp=100000;
for(ll i=0;i<=lp;i++)
p[i]=1ll*i*i,se.insert(p[i]);
} int main()
{
ll tmp,ans;
init();
scanf("%I64d",&n);
lg=lng=0;
for(ll i=1;i<=n;i++)
{
scanf("%I64d",&s[i]);
if(se.find(s[i])==se.end())
{
ng[++lng].num=s[i];
tmp=upper_bound(p,p+lp+1,s[i])-p;
ng[lng].val=min(p[tmp]-s[i],s[i]-p[tmp-1]);
}
else
{
g[++lg].num=s[i];
if(s[i]==0) g[lg].val=2;
else g[lg].val=1;
}
}
sort(ng+1,ng+lng+1,cmp);
sort(g+1,g+lg+1,cmp);
m=n/2;
ans=0;
if(lng>m)
{
for(ll i=1;i<=lng-m;i++)
ans+=ng[i].val;
}
else
{
for(ll i=1;i<=lg-m;i++)
ans+=g[i].val;
}
printf("%I64d\n",ans);
return 0;
}

  

  

  

PROBLEM F. Restoring the Expression

  OvO http://codeforces.com/contest/898/problem/F

  codeforces 898f

  记三段为A,B,C,枚举C段的长度lc,分别判断la=lc-1,la=lc,lb=lc-1,lb=lc,这4种情况是否合法。

  判断的话,做个哈希差不多的东西用来判断加法结果是否正确(哈希sed=10),截断的部分会涉及到除法,用逆元处理。哈希判断正确之后真实值再判断一次

#include <iostream>
#include <cstring>
#include <cmath>
#include <cstdio>
#include <algorithm> using namespace std; const int M=1e6+44;
const int sed=10;
const int mod=1e9+7; int n;
char str[M];
int s[M];
int suf[M];
int bas[M],inv[M]; long long pr(int a, int b)
{
long long r=1,base=a;
while(b!=0)
{
if(b&1)
r=(r*base)%mod;
base=(base*base)%mod;
b>>=1;
}
return r;
} bool check(int la,int lb,int lc)
{
int sava=la,savb=lb,savc=lc;
if(la>lc || lb>lc || la<1 || lb<1 || lc<1) return false;
int lia=1,lib=la+1,lic=la+lb+1;
if((la>1 && s[lia]==0) || (lb>1 && s[lib]==0) || (lc>1 && s[lic]==0)) return false;
int ria=la,rib=la+lb,ric=la+lb+lc;
int vala,valb,valc,up=0,tmp;
while(lc>0)
{
if(la>0) vala=s[ria];
else vala=0;
if(lb>0) valb=s[rib];
else valb=0;
tmp=up+vala+valb;
up=tmp/10; tmp%=10;
if(tmp!=s[ric])
return false;
la--; lb--; lc--;
ria--; rib--; ric--;
}
if(up) return false;
for(int i=1;i<=n;i++)
{
printf("%d",s[i]);
if(i==sava) printf("+");
if(i==sava+savb) printf("=");
}
return true;
} int getval(int li,int ri)
{
int ret,tmp;
tmp=(0ll+suf[li]-suf[ri+1])%mod;
tmp=(1ll*tmp*inv[n-ri])%mod;
ret=(tmp%mod+mod)%mod;
return ret;
} bool solve(int la,int lb,int lc)
{
int sava=la,savb=lb,savc=lc;
if(la>lc || lb>lc || la<1 || lb<1 || lc<1) return false;
int lia=1,lib=la+1,lic=la+lb+1;
if((la>1 && s[lia]==0) || (lb>1 && s[lib]==0) || (lc>1 && s[lic]==0)) return false;
int ria=la,rib=la+lb,ric=la+lb+lc;
int vala,valb,valc;
vala=getval(lia,ria);
valb=getval(lib,rib);
valc=getval(lic,ric);
// cout<<la<<' '<<lb<<' '<<lc<<endl;
// cout<<vala<<' '<<valb<<' '<<valc%mod<<endl;
if((0ll+vala+valb)%mod==valc%mod && check(la,lb,lc))
return true;
else return false;
} int main()
{
scanf("%s",str+1);
n=strlen(str+1);
for(int i=1;i<=n;i++)
s[i]=str[i]-'0';
bas[0]=1;
for(int i=1;i<=n;i++)
bas[i]=1ll*bas[i-1]*sed%mod;
for(int i=0;i<=n;i++)
inv[i]=pr(bas[i],mod-2);
suf[n+1]=0;
for(int i=n;i>=1;i--)
suf[i]=(suf[i+1]+1ll*bas[n-i]*s[i]%mod)%mod;
for(int i=1;i<=n;i++)
{
if(solve(i-1,n-i-(i-1),i) || solve(i,n-i-i,i) || solve(n-i-(i-1),i-1,i) || solve(n-i-i,i,i))
return 0;
}
return 0;
}

  

Codeforces Round #451 (Div. 2) [ D. Alarm Clock ] [ E. Squares and not squares ] [ F. Restoring the Expression ]的更多相关文章

  1. Codeforces Round #451 (Div. 2) A B C D E

    Codeforces Round #451 (Div. 2) A Rounding 题目链接: http://codeforces.com/contest/898/problem/A 思路: 小于等于 ...

  2. Codeforces Round #451 (Div. 2)-898A. Rounding 898B.Proper Nutrition 898C.Phone Numbers(大佬容器套容器) 898D.Alarm Clock(超时了,待补坑)(贪心的思想)

    A. Rounding time limit per test 1 second memory limit per test 256 megabytes input standard input ou ...

  3. 【Codeforces Round #451 (Div. 2) D】Alarm Clock

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 尺取法+二分. 类似滑动窗口. 即左端点为l,右端点为r. 维护a[r]-a[l]+1总是小于等于m的就好. (大于m就右移左端点) ...

  4. Codeforces Round #451 (Div. 2) A. Rounding【分类讨论/易错】

    A. Rounding time limit per test 1 second memory limit per test 256 megabytes input standard input ou ...

  5. Codeforces Round #451 (Div. 2)

    水题场.... 结果因为D题看错题意,B题手贱写残了...现场只出了A,C,E A:水题.. #include<bits/stdc++.h> #define fi first #defin ...

  6. Codeforces Round #451 (Div. 2) B. Proper Nutrition【枚举/扩展欧几里得/给你n问有没有两个非负整数x,y满足x·a + y·b = n】

    B. Proper Nutrition time limit per test 1 second memory limit per test 256 megabytes input standard ...

  7. 【Codeforces Round #451 (Div. 2) A】Rounding

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 模拟 [代码] /* 1.Shoud it use long long ? 2.Have you ever test several ...

  8. 【Codeforces Round #451 (Div. 2) B】Proper Nutrition

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 可以直接一层循环枚举. 也可以像我这样用一个数组来存y*b有哪些. 当然.感觉这样做写麻烦了.. [代码] /* 1.Shoud i ...

  9. 【Codeforces Round #451 (Div. 2) C】Phone Numbers

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 用map<string,vector > dic;模拟就好. 后缀.翻转一下就变成前缀了. 两重循环剔除这种情况不输出就 ...

随机推荐

  1. _variant_t 与其他数据类型的转换

    在COM中使用的标准类Class如下所示: _bstr_t:对BSTR类型进行打包,并提供有用的操作方法: _com_error:定义抛出的error对象; _com_ptr_t:封装COM接口指针 ...

  2. winform中如何使用timer控件实现欢迎(初始加载)窗口

    第一步.新建窗体项目命名为:TestWelcomeFrm,如下图: 第二步.在新项目中,增加欢迎窗口,命名为WelFrm,整个项目目录如下: 第三步.修改program.cs中启动代码如下: WelF ...

  3. drf序列化及反序列化

    假如把drf看做一个汉堡包,我们之前讲的模块属于汉堡包前面的盖盖(请求模块.渲染模块)和底底(异常模块.解析模块.响应模块),但是真正中间的夹心没有讲,那么今天我就和大家来看一下汉堡包的夹心(序列化及 ...

  4. INPUT和CONSTRUCT指令——范例报表查询,作用让用户输入数据,自动生成SQL的WHERE条件,带开窗查询

    INPUT指令 说明:1. 当程序执行到INPUT指令时,会将控制权交给用户,让用户输入数据.2. 用户输入完字段的数据,会将数据回传给程序中的变量接收.3. 只要执行到INPUT的指令,程序会将每个 ...

  5. 牛客 40F 珂朵莉的约数 (莫队)

    珂朵莉给你一个长为n的序列,有m次查询 每次查询给两个数l,r 设s为区间[l,r]内所有数的乘积 求s的约数个数mod 1000000007 直接莫队暴力维护复杂度是$O(8m\sqrt{m})$. ...

  6. tensorflow零起点快速入门(1)

    导入: 其中的TF_CPP_MIN_LOG_LEVEL据说是为了忽略警告,但是我这里没有意义(numpy的一些警告) import tensorflow as tf import os os.envi ...

  7. 另类--kafka集群中jmx端口设置

    # 监控kafka集群 # 有一个问题,需要在kafka-server-start.sh文件中配置端口,有如下三种办法 # 第一种:复制并修改kafka目录,比如kafka-1,kafka-2,kaf ...

  8. 在Window Server 2016中使用Web Deploy方式发布.NET Web应用

    1.在IIS里面点击获取新的Web平台组件 2.下载Web平台组件并安装 3.在其中搜索Web Deploy,找到3.5版本,并安装 4.继续搜索Web Deploy 3.6版本,并安装 安装好之后, ...

  9. Java进阶开发-基于Base64的加密与解密操作

    基于Base64的加密与解密操作 正常来讲加密基本上永远伴随着解密,所谓的加密或者解密往往都是需要有一些所谓的规则.在JDK1.8开始提供有一组新的加密处理操作,Base64处理.在这个类里面有两个内 ...

  10. js获取图片信息

    网络图片: fetch(item.path).then(function(res){ // 计算图片大小 return res.blob() }).then(function(data){ conso ...