题目链接;戳我

于是。。。风浔凌弱菜又去写了一场div.3

总的来说,真的是比较简单.......就是.......不开long long见祖宗

贴上题解——

A

给定一个数,为01串,每次可以翻转一个位置上的数,问最少几步可以使得它模\(10^x\)余\(10^y\)

从后往前贪心即可。

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<vector>
#include<map>
#define MAXN 200010
int n,m1,m2,ans;
int a[MAXN];
using namespace std;
int main()
{
#ifndef ONLINE_JUDGE
freopen("ce.in","r",stdin);
#endif
scanf("%d%d%d",&n,&m1,&m2);
int i,j;
for(i=1;i<=n;i++)
{
scanf("%1d",&a[i]);
}
for(i=n,j=1;i>=1&&j<=m1;i--,j++)
{
if(a[i]==1)
{
if(j!=m2+1) ans++;
}
else
{
if(j==m2+1) ans++;
}
}
cout<<ans<<endl;
return 0;
}

B

第i天要写i道题,一些题单,每天可以选择一个还没有写过的题单来写,上面的题数必须大于等于i,无论一天写完这个题单还是没有这个题单都算做过了,以后不能再用。如果不存在这样一个题单,终止。问最多写几天。

排序,然后遍历一遍即可。

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<vector>
#include<map>
#define MAXN 200010
int n,m1,m2,ans;
int a[MAXN];
using namespace std;
int main()
{
#ifndef ONLINE_JUDGE
freopen("ce.in","r",stdin);
#endif
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
sort(&a[1],&a[n+1]);
int k=1;
for(int i=1;i<=n;i++)
{
if(a[i]<k) continue;
ans++,k++;
}
cout<<ans<<endl;
return 0;
}

C

给你一个字符串,要求删去尽量少的一些字符,使得删完后这个字符串长度为偶数+每个奇数位和它后面的那个偶数位(如果没有就算了)字符不一样。

考虑如果从前往后删,每次如果i和i+1相同,我们不要其中一个,这样的话不仅这个相同的问题解决了,后面的可能因为整体前移一位也消除了一部分的问题,每次操作的效益明显高一些。

update:原先那个代码FST了......原因是刚开始判断如果合法的话直接输出了,没有判断是否长度为偶数......现在已经更新了AC代码。QAQ

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<vector>
#include<map>
#define MAXN 200010
int n,m1,m2,ans,nn;
char a[MAXN],tmp[MAXN];
using namespace std;
inline bool check()
{
if(nn<=1) return true;
for(int i=1;i<nn;i+=2)
{
if(a[i]==a[i+1]) return false;
}
return true;
}
inline void solve()
{
int cnt=0;
int flag=0;
for(int i=1;i<=nn;i++,flag^=1)
{
if(i!=nn&&flag==0)
{
if(a[i]==a[i+1])
{
ans++;
flag^=1;
continue;
}
}
tmp[++cnt]=a[i];
}
nn=cnt;
for(int i=1;i<=nn;i++) a[i]=tmp[i];
// printf("nn=%d\n",nn);
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("ce.in","r",stdin);
#endif
scanf("%d",&n);
scanf("%s",a+1);
nn=n;
if(check()&&nn%2==0)
{
cout<<0<<endl;
for(int i=1;i<=n;i++) cout<<a[i];
cout<<endl;
return 0;
}
while(check()==false)
{
solve();
}
if(nn&1) ans++,nn--;
cout<<ans<<endl;
for(int i=1;i<=nn;i++) cout<<a[i];
cout<<endl;
return 0;
}

D

给定一些数,这些数是x的除了1和x的所有约数。求最小的x。如果没有一个合法的x,输出-1。

显然如果数据合法,这些约数里面最小的乘最大的就是这个x,因为最小的那个肯定是x的最小素因子,而最大的那个是x/最小素因子。

计算一下x的约数个数(因为n一共不超过300,所以如果约数个数超过300就不存在这个合法x了,直接终止就行),看看是否和n+2一样

再遍历一遍看看每个数是不是x的约数就行了.......

嘤嘤嘤 忘乘1LL死的好惨

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<vector>
#include<map>
#define MAXN 200010
int n,m1,m2,ans,nn,t;
int a[MAXN];
using namespace std;
inline int calc(long long x)
{
int cur_ans=0;
for(int i=2;1ll*i*i<=x;i++)
{
if(x%i==0) cur_ans+=2;
if(1ll*i*i==x) cur_ans--;
if(cur_ans>n) return 0x3f3f3f3f;
}
return cur_ans;
}
inline bool check(long long x)
{
for(int i=1;i<=n;i++)
if(x%a[i])
return false;
return true;
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("ce.in","r",stdin);
#endif
scanf("%d",&t);
while(t--)
{
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
sort(&a[1],&a[n+1]);
long long now=1ll*a[1]*a[n];
int sum=calc(now);
if(n!=sum||check(now)==false) printf("-1\n");
else printf("%lld\n",now);
}
return 0;
}

E

给定序列A,B。可以对B重排,使得\(\sum_{1\le l \le r \le n}\sum_{l\le i \le r}a_ib_i\)最小

啊。。。对每个a的位置加权上它的覆盖次数,然后排个序。a最小乘b最大即可。

覆盖次数就是\(i*(n-i+1)\)。

嘤嘤嘤 忘开long long死的好惨

#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<cmath>
#define MAXN 200010
#define mod 998244353
using namespace std;
int n;
int b[MAXN];
long long ans=0;
struct Node{long long cnt;int sum;}a[MAXN];
inline bool cmp(struct Node x,struct Node y)
{
if(1ll*x.sum*x.cnt>1ll*y.sum*y.cnt) return 1;
else return 0;
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("ce.in","r",stdin);
#endif
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d",&a[i].sum),a[i].cnt=1ll*i*(n-i+1);
// for(int i=1;i<=n;i++) printf("%d\n",a[i].cnt);
for(int i=1;i<=n;i++) scanf("%d",&b[i]);
sort(&a[1],&a[n+1],cmp);
sort(&b[1],&b[n+1]);
for(int i=1;i<=n;i++)
ans=(ans+1ll*a[i].sum*a[i].cnt%mod*b[i]%mod)%mod;
cout<<ans<<endl;
return 0;
}

F1&&F2

n个物品 m次打折活动 一次打折活动(di,ti)表示物品ti在第di天打折,打折的话需要1元购买,不打折的话2元。

给定每种物品需要买的数量。每一天都会多一块钱,问最短多少天买够需要的所有东西。

(每次购买只要有钱 不限制数量 不限制种类)

显然对于一个物品,在后面选比在前面选优。二分选择的天数+贪心即可。

#include<iostream>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<cstdio>
#include<vector>
#define MAXN 400010
using namespace std;
int n,m,tot;
int need[MAXN],tmp[MAXN],last[MAXN];
vector<int>vec[MAXN];
inline bool check(int x)
{
memset(last,0,sizeof(last));
memcpy(tmp,need,sizeof(need));
for(int i=1;i<=x;i++)
{
for(int j=0;j<vec[i].size();j++)
{
int now=vec[i][j];
last[now]=i;
}
}
int money=0,cur_ans=0;
for(int i=1;i<=x;i++)
{
money++;
for(int j=0;j<vec[i].size();j++)
{
int now=vec[i][j];
while(last[now]==i&&money&&tmp[now])
tmp[now]--,cur_ans++,money--;
}
}
cur_ans+=money/2;
if(cur_ans>=tot) return true;
else return false;
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("ce.in","r",stdin);
#endif
scanf("%d%d",&n,&m);
int l=0,r=0,ans;
for(int i=1;i<=n;i++) scanf("%d",&need[i]),tot+=need[i];
for(int i=1;i<=m;i++)
{
int x,y;
scanf("%d%d",&x,&y);
vec[x].push_back(y);
}
r=tot*2;
while(l<=r)
{
int mid=(l+r)>>1;
if(check(mid)) ans=mid,r=mid-1;
else l=mid+1;
}
printf("%d\n",ans);
return 0;
}

大括号换行!正义!!

同义句压行!正义!!

Codeforces Round #560 Div. 3的更多相关文章

  1. Codeforces Round #560 (Div. 3) Microtransactions

    Codeforces Round #560 (Div. 3) F2. Microtransactions (hard version) 题意: 现在有一个人他每天早上获得1块钱,现在有\(n\)种商品 ...

  2. A. Remainder Codeforces Round #560 (Div. 3)

    A. Remainder Codeforces Round #560 (Div. 3) You are given a huge decimal number consisting of nn dig ...

  3. Codeforces Round #560 (Div. 3)A-E

    A. Remainder output standard output You are given a huge decimal number consisting of nn digits. It ...

  4. Codeforces Round #366 (Div. 2) ABC

    Codeforces Round #366 (Div. 2) A I hate that I love that I hate it水题 #I hate that I love that I hate ...

  5. Codeforces Round #354 (Div. 2) ABCD

    Codeforces Round #354 (Div. 2) Problems     # Name     A Nicholas and Permutation standard input/out ...

  6. Codeforces Round #368 (Div. 2)

    直达–>Codeforces Round #368 (Div. 2) A Brain’s Photos 给你一个NxM的矩阵,一个字母代表一种颜色,如果有”C”,”M”,”Y”三种中任意一种就输 ...

  7. cf之路,1,Codeforces Round #345 (Div. 2)

     cf之路,1,Codeforces Round #345 (Div. 2) ps:昨天第一次参加cf比赛,比赛之前为了熟悉下cf比赛题目的难度.所以做了round#345连试试水的深浅.....   ...

  8. Codeforces Round #279 (Div. 2) ABCDE

    Codeforces Round #279 (Div. 2) 做得我都变绿了! Problems     # Name     A Team Olympiad standard input/outpu ...

  9. Codeforces Round #262 (Div. 2) 1003

    Codeforces Round #262 (Div. 2) 1003 C. Present time limit per test 2 seconds memory limit per test 2 ...

随机推荐

  1. 2019中山纪念中学夏令营-Day19 数论初步【GCD(最大公约数),素数相关】

    关于GCD的一些定理或运用的学习: 1. 2.二进制算法求GCD 思想:使得最后的GCD没有2(提前把2提出来) 代码实现: #include <cstdio> #define int l ...

  2. PHPstorm支持YAF框架代码自动提示

    文件下载地址:https://github.com/xudianyang/yaf.auto.complete 然后找到phpstorm     File->settings->Langua ...

  3. Springboot提示数据库连接问题Connection is not available

    2019-05-29 11:19:51.824 WARN 854 --- [io-8080-exec-10] o.h.engine.jdbc.spi.SqlExceptionHelper : SQL ...

  4. loj 6031「雅礼集训 2017 Day1」字符串

    loj 注意到每次询问串长度都是给定的,并且询问串长\(k*\)询问次数\(q<10^5\),所以这里面一个东西大的时候另一个东西就小,那么考虑对较小的下功夫 如果\(k\le \sqrt{n} ...

  5. Appium Android 获取包名appPackage和appActivity的几种方法

    情况1: 安装包未安装到手机 准备前提条件: 1 Android SDK管理工具目录 2 PC端有apk包 使用方法: 1 打开终端,当前路径移动到sdk管理工具目录tools或build-tools ...

  6. 基于bootstrap的分页插件

    之前做的分页,是自己后端写一堆代码,返回给前端页面显示,感觉比较繁重.不灵活.今天研究下基于bootstrap的做的插件,整理如下: 在使用bootstrap的插件的时候,需要导入一些css.js. ...

  7. Excel中的常用快捷键

    1)工作表之间快速切换 Ctrl+PageUp切换的是当前所在工作表的前一个工作表, Ctrl+PageDown切换的是当前所在工作表的后一个工作表. 2)Ctrl +Home 强迫回到最前一个单元格 ...

  8. JS定时器的用法及示例

    JS定时器的用法及示例 目录 js 定时器的四个方法 示例一 示例二 示例三 js 定时器的四个方法 setInterval() :按照指定的周期(以毫秒计)来调用函数或计算表达式.方法会不停地调用函 ...

  9. 01--springmvc分布式项目Web项目配置

    springmvc的配置文件,放在resources目录下: 文件名:applicationContext-mvc.xml <?xml version="1.0" encod ...

  10. LIS 普及题

    题意 给你一个长度为 \(n\) 的序列 \(a\). 问是否存在一个长度为 \(L\) 的上升子序列,即存在 \(\{x_1,x_2,...,x_L\}(x_1\lt x_2\lt ...\lt x ...