A. 每条人行道有六条车道会撞到。

#include<bits/stdc++.h>
using namespace std; int a[],b[],c[],d[]; int main()
{
ios::sync_with_stdio();
for(int i = ;i < ;i++) cin >> a[i] >> b[i] >> c[i] >> d[i];
int flag = ;
for(int i = ;i < ;i++)
{
if(!d[i]) continue;
if(a[i] || b[i] || c[i] || a[(i+)%] || b[(i+)%] || c[(i+)%]) flag = ;
}
if(flag) cout << "YES" << endl;
else cout << "NO" << endl;
return ;
}

B.dp,注意最后一层增加的时间不一样。

#include<bits/stdc++.h>
using namespace std; int n,m,dp[][] = {};
string s[]; int main()
{
ios::sync_with_stdio();
cin >> n >> m;
for(int i = ;i <= n;i++)
{
cin >> s[i];
s[i] = " "+s[i];
}
int t;
for(t = ;t <= n;t++)
{
int flag = ;
for(int j = ;j <= m+;j++)
{
if(s[t][j] == '') flag = ;
}
if(flag) break;
}
if(t == n+)
{
cout << << endl;
return ;
}
dp[][n+] = -;
dp[][n+] = 1e9;
for(int i = n;i >= t;i--)
{
int l = m+;
int r = ;
for(int j = m+;j >= ;j--)
{
if(s[i][j] == '') l = j;
}
for(int j = ;j <= m+;j++)
{
if(s[i][j] == '') r = j;
}
if(i == t)
{
cout << min(dp[][i+]+r,dp[][i+]+m+-l) << endl;
return ;
}
dp[][i] = min(dp[][i+]+m+,dp[][i+]+*(r-)+);
dp[][i] = min(dp[][i+]+m+,dp[][i+]+*(m+-l)+);
}
return ;
}

C.二分个数,注意long long。

#include<bits/stdc++.h>
using namespace std; int n,s;
long long a[],b[]; bool ok(int x)
{
for(int i = ;i <= n;i++) b[i] = a[i]+(long long)x*i;
sort(b+,b++n);
long long sum = ;
for(int i = ;i <= x;i++) sum += b[i];
return sum <= s;
}
int main()
{
ios::sync_with_stdio();
cin >> n >> s;
for(int i = ;i <= n;i++) cin >> a[i];
int l = ,r = n;
while(l < r)
{
int mid = (l+r+)/;
if(ok(mid)) l = mid;
else r = mid-;
}
for(int i = ;i <= n;i++) b[i] = a[i]+(long long)l*i;
sort(b+,b++n);
long long sum = ;
for(int i = ;i <= l;i++) sum += b[i];
cout << l << " " << sum << endl;
return ;
}

D.建一个有向图,前面的requests组成的是森林或树,再加一个后,若形成了环,则x和x的子孙都会cry,否则没有人会cry。

对于1e5的queries,我们先预处理每个节点的子孙个数和和dfs序,然后判断就简单了。

#include<bits/stdc++.h>
using namespace std; int n,m,k,q,cnt = ,pre[] = {},l[],r[],ok[] = {},sum[];
vector<int> v[]; void dfs(int now)
{
++cnt;
l[now] = cnt;
sum[now] = ;
for(int i = ;i < v[now].size();i++)
{
int t = v[now][i];
dfs(t);
sum[now] += sum[t];
}
r[now] = cnt;
}
int main()
{
ios::sync_with_stdio();
cin >> n >> m >> k >> q;
while(k--)
{
int x,y;
cin >> x >> y;
if(pre[y] != )
{
v[pre[y]].push_back(x);
ok[x] = ;
}
pre[y] = x;
}
for(int i = ;i <= n;i++)
{
if(!ok[i]) dfs(i);
}
while(q--)
{
int x,y;
cin >> x >> y;
if(pre[y] && l[x] <= l[pre[y]] && r[pre[y]] <= r[x]) cout << sum[x] << endl;
else cout << << endl;
}
return ;
}

E.普通nim游戏判断过程为每堆石子个数的异或。若增加一个可以增加石子的操作,结果相同,因为一个人加的另一个人可以减去相同数量。我们建树,把跟叶子节点向上相差偶数个节点的点作为堆,其余的作为可以增加的石子。那么判断过程为这些堆的异或。ok为0则成立,我们现在要使ok变为0。

根据异或性质,在两类节点之间可以成立的交换操作为ok^a[i]^b[i]==0的两个点。

另外,若ok已经为0,我们可以进行节点同类中交换。

#include<bits/stdc++.h>
using namespace std; int n,a[],h[];
map<int,int> mp;
vector<int> v[]; void dfs(int now)
{
int x = ;
for(int i = ;i < v[now].size();i++)
{
int t = v[now][i];
dfs(t);
x = max(h[t],x);
}
h[now] = x+;
} int main()
{
ios::sync_with_stdio();
cin >> n;
for(int i = ;i <= n;i++) cin >> a[i];
for(int i = ;i <= n;i++)
{
int x;
cin >> x;
v[x].push_back(i);
}
dfs();
int ok = ,cnt1 = ;
for(int i = ;i <= n;i++)
{
if(h[i]%)
{
ok ^= a[i];
cnt1++;
mp[a[i]]++;
}
}
int cnt2 = n-cnt1;
long long ans = ;
if(ok == ) ans = (long long)cnt1*(cnt1-)/+(long long)cnt2*(cnt2-)/;
for(int i = ;i <= n;i++)
{
if(h[i]% == ) ans += mp[ok^a[i]];
}
cout << ans << endl;
return ;
}

Codeforces_812的更多相关文章

随机推荐

  1. spring boot的application配置文件

      上次我们已经对这个文件见过面了,并且对他进行了一些简单的配置.它有两种配置方式,一个是application.properties,一个是application.yml文件,需要记住,当两个文件都 ...

  2. 使用docker增加部署速度的一次实践

    问题: 公司给我们分配的服务器到期后不付费了,换成新服务商的服务器了.也就是说我们之前的环境需要重新搭建一次.光项目就50多个(微服务40+,其他服务不到10个),需要重新部署. 之前部署项目时,需要 ...

  3. MySQL UTF-8 常用字符排序规则

    排序规则 解释 utf8_general_ci 不区分大小写 utf8_general_cs 区分大小写 utf8_bin 区分大小写,字符串每个字符串用二进制数据编译存储,且支持存储二进制数据

  4. Vue中使用js-xlsx导出Data数据到Excel

    需要引入的第三方JS有:export.js.xlsx.extendscript.js.xlsx.full.min.js JS太大不贴出来,放一个可下载百度云连接:https://pan.baidu.c ...

  5. Manacher 学习

    推荐博客 :https://blog.csdn.net/zzkksunboy/article/details/72600679 作用 线性时间解决最长回文子串问题. 思想 Manacher充分利用了回 ...

  6. List去重问题与方法

    面试中经常被问到的list如何去重,用来考察你对list数据结构,以及相关方法的掌握,体现你的java基础学的是否牢固.我们大家都知道,set集合的特点就是没有重复的元素.如果集合中的数据类型是基本数 ...

  7. java jvm jre jdk三者的关系

    jvm:java虚拟机器(跨平台的关键) jre:java运行环境 jdk:java 开发工具包(kit) jdk>jre>jvm 环境变量配置 https://www.cnblogs.c ...

  8. ORM基础1

    1.增删改查 .models.类.object.all() 获取所有对象->select * from 表 2.models.类.object.get(id=1) 获取id为1的对象->s ...

  9. [bzoj2152] [洛谷P2634] 聪聪可可

    Description 聪聪和可可是兄弟俩,他们俩经常为了一些琐事打起来,例如家中只剩下最后一根冰棍而两人都想吃.两个人都想玩儿电脑(可是他们家只有一台电脑)--遇到这种问题,一般情况下石头剪刀布就好 ...

  10. 【JQ】 validate验证表单时多个name相同的元素的解决办法

    使用jQuery.validate插件http://jqueryvalidation.org/,当节点的name相同时候,脚本特意忽略剩余节点,导致所有相关节点的errMsg都显示在第一个相关节点上. ...