Avito Cool Challenge 2018(div1+2)
A. Definite Game:
题意:输入N,输出最小的结果N-x,其中x不少N的因子。
思路:N=2时,输出2;其他情况输出1;因为N>2时,N-1不会是N的因子。
#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
const int maxn=;
int a[maxn];
int main()
{
int N; cin>>N;
if(N==) puts("");
else puts("");
return ;
}
B. Farewell Party
题意:有N个人,有N中帽子,N个数,表示多少人与他的帽子不同。
思路:把问题转维有多少个人帽子和他相同,然后数字相同的分到同一组,而且人数是数字的倍数,因为同一组的还要均分。
#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
const int maxn=;
int a[maxn],ans[maxn],vis[maxn],cnt,num[maxn];
int main()
{
int N; cin>>N; bool F=true;
rep(i,,N) scanf("%d",&a[i]),a[i]=N-a[i];
rep(i,,N) num[a[i]]++;
rep(i,,N) if(num[i]%i!=) {F=false; break;}
rep(i,,N){
if(num[a[i]]%a[i]==) vis[a[i]]=++cnt;
ans[i]=vis[a[i]];
num[a[i]]--;
}
if(!F) puts("Impossible");
else {
puts("Possible");
rep(i,,N) printf("%d ",ans[i]);
}
return ;
}
C. Colorful Bricks
题意:有N个地板,有M种颜色,有K个地板与左边的不相同。
思路:数据量不难写出二维DP,方程为,dp[i][j]=dp[i-1][j]+dp[i-1][j-1]*(M-1);(也可以用组合数来做,不过这个数据没必要想太多
#include<bits/stdc++.h>
#define ll long long
#define rep(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
const int maxn=;
const int Mod=;
int dp[maxn][maxn];
int main()
{
int N,M,K;
scanf("%d%d%d",&N,&M,&K);
dp[][]=M;
rep(i,,N) {
rep(j,,i-){
if(j==) dp[i][j]=dp[i-][j];
else dp[i][j]=(dp[i-][j]+1LL*dp[i-][j-]*(M-)%Mod)%Mod;
}
}
printf("%d\n",dp[N][K]);
return ;
}
D. Maximum Distance
题意:题意很搅,这里的距离表示最小的路径最大值,就是让你求一个最小生成树(满足路径最大值最小),在生成树上有K个关键点,你的任务是对于每个关键点,找离他最远的关键点,输出距离。
思路:K个点的虚树,是所有两两路径经过的边集并,我们求这个边集并的最大值就是结果,因为我们可以保证他过这条边。其他写法容易挂,具体为什么暂时不知道。(虚树可以换成并查集?)
#include<bits/stdc++.h>
#define rep(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
const int maxn=;
int a[maxn],Laxt[maxn],Next[maxn],To[maxn],Len[maxn],cnt,ans;
struct in{
int u,v,len;
friend bool operator <(in a,in b){ return a.len<b.len; }
}s[maxn];
int in[maxn],fa[maxn][],dep[maxn],vis[maxn],times,fcy[maxn];
bool cmp(int x,int y) { return in[x]<in[y]; }
void add(int u,int v,int c) { Next[++cnt]=Laxt[u]; Laxt[u]=cnt; To[cnt]=v;Len[cnt]=c;}
void dfs(int u,int f)
{
in[u]=++times; fa[u][]=f; dep[u]=dep[f]+;
for(int i=Laxt[u];i;i=Next[i]){
if(To[i]!=f) fcy[To[i]]=Len[i],dfs(To[i],u);
}
}
int LCA(int u,int v)
{
if(dep[u]<dep[v]) swap(u,v);
for(int i=;i>=;i--) if(dep[fa[u][i]]>=dep[v]) u=fa[u][i];
if(u==v) return u;
for(int i=;i>=;i--) if(fa[u][i]!=fa[v][i]) u=fa[u][i],v=fa[v][i];
return fa[u][];
}
int ac[maxn];
int find(int x){
if(ac[x]!=x) return ac[x]=find(ac[x]); return x;
}
int main()
{
int N,M,K;
scanf("%d%d%d",&N,&M,&K);
rep(i,,K) scanf("%d",&a[i]);
rep(i,,M){
scanf("%d%d%d",&s[i].u,&s[i].v,&s[i].len);
}
sort(s+,s+M+);
rep(i,,N) ac[i]=i;
rep(i,,M){
int fau=find(s[i].u);
int fav=find(s[i].v);
if(fau!=fav) {
ac[fau]=fav;
add(s[i].u,s[i].v,s[i].len);
add(s[i].v,s[i].u,s[i].len);
}
}
dfs(,);
sort(a+,a+K+,cmp);
int tot=K;
rep(i,,K) a[++tot]=LCA(a[i-],a[i]);
sort(a+,a+tot+,cmp);
tot=unique(a+,a+tot+)-(a+);
rep(i,,tot) vis[a[i]]=; //得到关键点
rep(i,,tot){ //关键点之间连边得到新树
int u=a[i];
while(true){
if(u==a[]) break;
ans=max(fcy[u],ans); u=fa[u][];
if(vis[u]||u==) break;
}
}
rep(i,,K) printf("%d ",ans);
return ;
}
E. Missing Numbers
题意:一个偶数N的序列,我们给出了偶数位置的数,让你填补奇数位置的数,满足所有前缀和的完全平方数。
思路:因为都是完全平方数,注意到完全平方数的相邻差值递增,我们可以利用这个单调性来搜索,或者单调队列什么的。我是二分写的,好像有点丑。 过了就行。。。
#include<bits/stdc++.h>
#define ll long long
#define rep(i,a,b) for(ll i=a;i<=b;i++)
using namespace std;
const int maxn=;
const ll inf=1e13;
ll p[maxn],a[maxn],b[maxn],ans[maxn],cnt,N; //
int main()
{
for(ll i=;;i++){
if(i*i>inf) break;
p[++cnt]=i*i;
}
bool F=true;
scanf("%lld",&N);
rep(i,,N/){
scanf("%lld",&a[i]);
}
if(!F) return puts("No"),;
ll BG=-1LL;
rep(i,,cnt){
ll pos=lower_bound(p+,p+cnt+,p[i]+a[])-p;
if(pos>=&&p[pos]==p[i]+a[]){
ans[]=p[pos]-a[];
ll kk=lower_bound(p+,p+cnt+,ans[])-p;
if(p[kk]==ans[]){ BG=pos; break;}
}
}
if(BG==-1LL) return puts("No"),;
ans[]=a[]; ll fcy=BG;
for(ll i=;i<=N/&&fcy<=cnt;i++){
while(fcy<=cnt){
ll pos=lower_bound(p+,p+cnt+,p[fcy]+a[i])-p;
if(pos>=BG+&&p[pos]==p[fcy]+a[i]){
ll tmp=p[pos]-a[i];
ll hhh=lower_bound(p+,p+cnt+,tmp)-p;
if(p[hhh]==tmp) {ans[i*]=a[i]; ans[i*-]=p[pos]-p[BG]-a[i]; BG=pos; fcy=BG; break;}
else fcy++;
}
else fcy++;
}
}
rep(i,,N) if(ans[i]<1LL||ans[i]>inf) return puts("No"),;
puts("Yes");
rep(i,,N) printf("%lld ",ans[i]);
return ;
}
Avito Cool Challenge 2018(div1+2)的更多相关文章
- Codeforces Avito Code Challenge 2018 D. Bookshelves
Codeforces Avito Code Challenge 2018 D. Bookshelves 题目连接: http://codeforces.com/contest/981/problem/ ...
- Avito Cool Challenge 2018
考挂了.. A - Definite Game 直接看代码吧. #include<cstdio> #include<cstring> #include<algorithm ...
- Avito Code Challenge 2018
第一次打CF,很菜,A了三道水题,第四题好像是是数位DP,直接放弃了.rateing从初始的1500变成了1499,还是绿名,这就很尴尬.之后觉得后面的题目也没有想象的那么难(看通过人数)过两天吧剩下 ...
- Avito Cool Challenge 2018 自闭记
A:n==2?2:1. #include<iostream> #include<cstdio> #include<cmath> #include<cstdli ...
- Avito Cool Challenge 2018 Solution
A. Definite Game 签. #include <bits/stdc++.h> using namespace std; int main() { int a; while (s ...
- Avito Cool Challenge 2018 E. Missing Numbers 【枚举】
传送门:http://codeforces.com/contest/1081/problem/E E. Missing Numbers time limit per test 2 seconds me ...
- Avito Cool Challenge 2018 C. Colorful Bricks 【排列组合】
传送门:http://codeforces.com/contest/1081/problem/C C. Colorful Bricks time limit per test 2 seconds me ...
- Avito Cool Challenge 2018 B. Farewell Party 【YY】
传送门:http://codeforces.com/contest/1081/problem/B B. Farewell Party time limit per test 1 second memo ...
- Avito Cool Challenge 2018:D. Maximum Distance (最小生成树)
题目链接 题意 : 给出一个联通图和一些特殊的点,现在定义cost(u,v)为一条从u到v的路径上面边权的最大值 , 定义dis(u,v) 为从u到v 路径上面cost 的最小值 然后求所有特殊点到其 ...
随机推荐
- 二分检索函数lower_bound()和upper_bound()
二分检索函数lower_bound()和upper_bound() 一.说明 头文件:<algorithm> 二分检索函数lower_bound()和upper_bound() lower ...
- spring boot 日志文件配置(logback-spring.xml)亲测可用!
问题描述:如何配置springboot项目,通过日志配置,使之输出自定义日志. 详细文章:https://blog.csdn.net/gebitan505/article/details/701421 ...
- 女生学java是否真的没有优势
随着女性越来越独立,我们可以看到再以前我们认为不适合女性朋友从事的工作,也出现了越来越多的女生,例如对IT行业也不再跟之前一样畏惧.虽然当下很多人所持的观点依旧是,女生不适合IT行业,但是很多女生已经 ...
- Python递归遍历《指定目录》下的所有《文件》
https://www.cnblogs.com/dreamer-fish/p/3820625.html
- codeforces 484a//Bits// Codeforces Round #276(Div. 1)
题意:给出区间[ll,rr],求中间一个数二进制表示时一的个数最多. 写出ll和rr的二进制,设出现第一个不同的位置为pos(从高位到低位),找的数为x,那么为了使x在[ll,rr]内,前pos-1个 ...
- bzoj3262: 陌上花开 三维偏序cdq分治
三维偏序裸题,cdq分治时,左侧的x一定比右侧x小,然后分别按y排序,对于左侧元素按y大小把z依次插入到树状数组里,其中维护每个左侧元素对右侧元素的贡献,在bit查询即可 /************* ...
- Matlab scatter 如何显示不同颜色点状
有时候需要在matlab scatter绘图中显示不同颜色区分,如下图是人体血压高压.低压与年龄关系的散点图. 红色点表示高压 绿色点表示低压 用 matlab 如何实现呢? 1.创建一维矩阵x,y1 ...
- Linux 下载最新kubectl版本的命令:
ubuntu centos下通用 第一步.下载最新版本的命令: curl -LO https://storage.googleapis.com/kubernetes-release/release/$ ...
- Eclipse 汉化方法
1 打开 http://www.eclipse.org/babel/downloads.php 2 复制 http://download.eclipse.org/technology/babel/u ...
- 一个SQL调优/优化(SQL TUNING)“小把戏”“哄得”小朋友挺满意
前几天,去一个用户那里,解决完问题,和一个小朋友闲聊,他有点愁眉不展.郁郁寡欢的样子,似乎没心情和我说话,之前,他的话是最多的,见此状,我就问:怎么了?小朋友?,他说,这几天应用人员说他的某个模块的性 ...