首页 技术 正文
技术 2022年11月16日
0 收藏 860 点赞 4,681 浏览 3811 个字

2.2.2017 9:35~11:35


A – Taymyr is calling you

直接模拟

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
using namespace std;
typedef long long ll;
const int N=1e4+;
inline int read(){
char c=getchar();int x=,f=;
while(c<''||c>''){if(c=='-')f=-; c=getchar();}
while(c>=''&&c<=''){x=x*+c-''; c=getchar();}
return x*f;
}
int n,m,z,ans;
int vis[N];
int main(int argc, const char * argv[]) {
n=read();m=read();z=read();
for(int i=n;i<=z;i+=n) vis[i]=;
for(int i=m;i<=z;i+=m) ans+=vis[i];
printf("%d",ans);
return ;
}

B – Timofey and cubes

奇数位置反转,偶数位置不变

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
using namespace std;
typedef long long ll;
const int N=2e5+;
inline int read(){
char c=getchar();int x=,f=;
while(c<''||c>''){if(c=='-')f=-; c=getchar();}
while(c>=''&&c<=''){x=x*+c-''; c=getchar();}
return x*f;
}
int n,a[N];
int main(int argc, const char * argv[]) {
n=read();
for(int i=;i<=n;i++) a[i]=read();
for(int i=;i<=n/;i++) if(i&) swap(a[i],a[n-i+]);
for(int i=;i<=n;i++) printf("%d ",a[i]);
return ;
}

C – Timofey and a tree

题意:选一个根使得所有子树同色(每个子树中节点同色 不同子树可以不同色)

比赛时先打了个傻逼树形DP发现不对  然后就用对于一个点i它的子树用树形DP,它的上面的树用DFS序+线段树/ST表询问颜色相同……反正A掉了

//
// main.cpp
// C
//
// Created by Candy on 2017/2/2.
// Copyright © 2017年 Candy. All rights reserved.
//
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
using namespace std;
#define mid ((l+r)>>1)
#define lson x<<1,l,mid
#define rson x<<1|1,mid+1,r
#define lc x<<1
#define rc x<<1|1
typedef long long ll;
const int N=2e5+;
inline int read(){
char c=getchar();int x=,f=;
while(c<''||c>''){if(c=='-')f=-; c=getchar();}
while(c>=''&&c<=''){x=x*+c-''; c=getchar();}
return x*f;
}
int n,u,v,c[N],a[N];
struct edge{
int v,ne;
}e[N<<];
int h[N],cnt=;
inline void ins(int u,int v){
cnt++;
e[cnt].v=v;e[cnt].ne=h[u];h[u]=cnt;
cnt++;
e[cnt].v=u;e[cnt].ne=h[v];h[v]=cnt;
}
struct node{
int same;
}t[N<<];
void build(int x,int l,int r){
if(l==r) t[x].same=a[l];
else{
build(lson);
build(rson);
if(t[lc].same==||t[rc].same==||t[lc].same!=t[rc].same) t[x].same=;
else t[x].same=t[lc].same;
}
}
int segSame(int x,int l,int r,int ql,int qr){
if(ql>qr) return -;
if(t[x].same) return t[x].same;
if(ql<=l&&r<=qr) return t[x].same;
else{
int same=-;
if(ql<=mid) same=segSame(lson,ql,qr);
if(mid<qr){
int _=segSame(rson,ql,qr);
if(same==-||same==_) same=_;
else same=;
}
return same;
}
}
int d[N],L[N],R[N],dfc;
void dfs(int u,int fa){
L[u]=++dfc; a[dfc]=c[u];
d[u]=c[u];
for(int i=h[u];i;i=e[i].ne){
int v=e[i].v;
if(v==fa) continue;
dfs(v,u);
if(d[u]!=&&d[v]!=d[u]) d[u]=;
}
R[u]=dfc;
}
int ans;
void dfsSol(int u,int fa){//printf("dfsSol %d %d\n",u,fa);
if(ans) return;
int flag=;
for(int i=h[u];i;i=e[i].ne) if(e[i].v!=fa)
if(d[e[i].v]==) {flag=;break;}
if(flag){
int s1=segSame(,,n,,L[u]-),s2=segSame(,,n,R[u]+,n);
flag=;
if(s1!=&&s2!=&&(s1==-||s2==-||s1==s2)) flag=;
// printf("hi %d %d %d %d %d %d\n",u,L[u],R[u],s1,s2,flag);
if(flag) {ans=u;return;}
} for(int i=h[u];i;i=e[i].ne)
if(e[i].v!=fa) dfsSol(e[i].v,u);
}
int main(int argc, const char * argv[]) {
n=read();
for(int i=;i<=n-;i++) u=read(),v=read(),ins(u,v);
for(int i=;i<=n;i++) c[i]=read();
dfs(,);
build(,,n);
// for(int i=1;i<=n;i++) printf("hi %d %d %d %d\n",i,d[i],L[i],R[i]);
// for(int i=1;i<=n;i++) printf("a %d %d\n",i,a[i]);
dfsSol(,);
if(ans) printf("YES\n%d",ans);
else puts("NO");
return ;
}

比赛代码

实际上可以发现如果一条边两边节点的颜色不对一定是这两个节点中的一个做根,三遍DFS就行了….好简单

dfs


D – Timofey and rectangles

题意:一些不相交矩形边长都是奇数 4种颜色染色 判断可行及一种方案

….最后才看到洛谷群有这道题题解然后最后10s提交失败呜呜呜

超简单 边长奇数,所以横边相邻的矩形y坐标奇偶性不同 x同理 所以按左下角奇偶性染色就行了

//
// main.cpp
// C
//
// Created by Candy on 2017/2/2.
// Copyright © 2017年 Candy. All rights reserved.
//
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
using namespace std;
typedef long long ll;
inline int read(){
char c=getchar();int x=,f=;
while(c<''||c>''){if(c=='-')f=-; c=getchar();}
while(c>=''&&c<=''){x=x*+c-''; c=getchar();}
return x*f;
}
int n,x,y;
int main(int argc, const char * argv[]) {
n=read();
puts("YES");
for(int i=;i<=n;i++){
x=read();y=read();
x=min(x,read());y=min(y,read());
x+=1e9;y+=1e9;
if(x&){
if(y&) puts("");
else puts("");
}else{
if(y&) puts("");
else puts("");
}
}
}

未完

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,084
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,559
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,408
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,181
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,818
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,901