题目链接:https://vjudge.net/contest/148543#overview

  A题:n个罪犯,每个人有一个犯罪值,现在要从里面选出连续的c个人,每个人的犯罪值都不能超过t,问选法的种类数。O(n)xjbg一下即可:

 #include <stdio.h>
#include <algorithm>
#include <string.h>
#include <map>
#include <set>
#include <vector>
#include <queue>
#include <iostream>
using namespace std;
const int N = + ;
typedef long long ll;
typedef pair<int,int> pii; int a[N]; int main()
{
int n,t,c;
cin >> n >> t >> c;
ll ans = ;
int cnt = ;
for(int i=;i<=n;i++)
{
int temp;scanf("%d",&temp);
if(temp <= t) cnt++;
else
{
if(cnt >= c) ans += cnt - c + ;
cnt = ;
}
}
if(cnt >= c) ans += cnt - c + ;
cout << ans << endl;
return ;
}

A

  B题:n个数字,从中选出不重叠的k段数字,每段的长度都为m,问最大的和。因为n是5000,所以很明显的开个二维数组n方dp一下即可:

 #include <stdio.h>
#include <algorithm>
#include <string.h>
#include <map>
#include <set>
#include <vector>
#include <queue>
#include <iostream>
using namespace std;
const int N = + ;
typedef long long ll;
typedef pair<int,int> pii; ll pre[N];
ll dp[N][N]; int main()
{
int n,m,k;
cin >> n >> m >> k;
for(int i=;i<=n;i++)
{
int x;
scanf("%d",&x);
pre[i] = pre[i-] + x;
}
for(int i=m;i<=n;i++)
{
for(int j=;j<=k;j++)
{
dp[i][j] = max(dp[i-][j], dp[i-m][j-] + pre[i] - pre[i-m]);
}
}
cout << dp[n][k] << endl;
return ;
}

B

  

  C题:给一个距离矩阵,问是否可能构成一棵树。做法是克鲁斯卡尔以后dfs一遍看看距离矩阵是否相等即可。仔细想想还是挺妙的。代码如下(写的有点挫):

 #include <stdio.h>
#include <algorithm>
#include <string.h>
#include <map>
#include <set>
#include <vector>
#include <queue>
#include <iostream>
using namespace std;
const int N = + ;
typedef long long ll;
typedef pair<int,int> pii; int root[N],cnt,vis[N],last[N];
int n,G[N][N],d[N][N];
vector<pii> graph[N];
void init() {for(int i=;i<=n;i++) root[i] = i;}
int find(int x) {return x == root[x] ? x : root[x] = find(root[x]);}
void connect(int x,int y,int w)
{
int rx = find(x);
int ry = find(y);
if(rx != ry)
{
root[rx] = ry;
//d[x][y] = d[y][x] = w;
graph[x].push_back(pii(y,w));
graph[y].push_back(pii(x,w));
cnt--;
}
}
struct edge
{
int u,v,w;
bool operator < (const edge & temp) const
{
return w > temp.w;
}
}; void dfs(int u,int fa)
{
for(int i=;i<graph[u].size();i++)
{
pii p = graph[u][i];
int v = p.first;
int w = p.second;
if(v == fa) continue;
last[v] = last[u] + w;
dfs(v,u);
}
} int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)
{
for(int j=;j<=n;j++)
{
scanf("%d",&G[i][j]);
if(i == j && G[i][j]) return *puts("NO");
}
}
for(int i=;i<=n;i++) for(int j=;j<=n;j++) if(G[i][j] != G[j][i] || i!=j && G[i][j] == ) return *puts("NO");
priority_queue<edge> Q;
for(int i=;i<=n;i++)
{
for(int j=;j<i;j++)
{
Q.push((edge){i,j,G[i][j]});
}
}
cnt = n; init();
for(;cnt > ;)
{
edge e = Q.top();Q.pop();
connect(e.u, e.v, e.w);
}
//for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) printf("%d%c",d[i][j],j==n?'\n':' ');
for(int i=;i<=n;i++)
{
last[i] = ;
dfs(i,-);
for(int j=;j<=n;j++)
{
if(j == i) continue;
if(last[j] != G[i][j]) return *puts("NO");
}
}
puts("YES");
return ;
}

C

  D题:给两个部分的字符串,分别重复n次和m次(最终长度相等),问有多少位置字符是不同的。只需要比较一个lcm里面的长度是肯定的,但暴力做肯定T。一个lcm中,考虑到只有pos%gcd这些位置需要比较。那么就可以线性的做出来了。最后扩大相应倍数即可。代码如下:

 #include <stdio.h>
#include <algorithm>
#include <string.h>
#include <map>
#include <set>
#include <vector>
#include <queue>
#include <iostream>
using namespace std;
const int N = + ;
typedef long long ll;
typedef pair<int,int> pii; ll n,m;
char a[N],b[N];
int vis[N][]; int main()
{
cin >> n >> m;
scanf("%s%s",a+,b+);
int lena = strlen(a+);
int lenb = strlen(b+);
int g = __gcd(lena,lenb);
ll lcm = (ll)lena / g * lenb;
ll ans = ;
for(int i=;i<=lena;i++) vis[i%g][a[i]-'a']++;
for(int i=;i<=lenb;i++) ans += vis[i%g][b[i]-'a'];
cout << 1LL*lena * n / lcm * (lcm - ans) << endl;
return ;
}

D

  E题,看了一会没怎么明白题意,暂时放过吧。

2017 ZSTU寒假排位赛 #4的更多相关文章

  1. 2017 ZSTU寒假排位赛 #7

    题目链接:https://vjudge.net/contest/149498#overview. A题,水题,直接按照题意模拟一下即可. B题,我用的是线段树.大力用的差分标记(上次听zy说过,下次再 ...

  2. 2017 ZSTU寒假排位赛 #1

    题目链接:https://vjudge.net/contest/147102#overview. A题:给出一堆的点,要找出两条垂直的直线,一条与x轴呈45度.-->使得所有的点到任意一条直线的 ...

  3. 2017 ZSTU寒假排位赛 #2

    题目链接:https://vjudge.net/contest/147632#overview. A题,状态压缩一下然后暴力即可. B题,水题,略过. C题,有负数,前缀和不是单调的,因此不能用尺取法 ...

  4. 2017 ZSTU寒假排位赛 #8

    题目链接:https://vjudge.net/contest/149845#overview. A题,水题. B题,给出 p个 第一个人的区间 和 q个第二个人的区间,问[l,r]中有多少个整数满足 ...

  5. 2017 ZSTU寒假排位赛 #6

    题目链接:https://vjudge.net/contest/149212#overview. A题,水题,略过. B题,水题,读清题意即可. C题,数学题,如果把x表示成x=nb+m,则k=n/m ...

  6. 2017 ZSTU寒假排位赛 #5

    题目链接:https://vjudge.net/contest/148901#overview. A题,排序以后xjbg即可. B题,弄个数组记录当前列是不是删除以及当前行是不是已经大于下一行然后乱搞 ...

  7. 2017 ZSTU寒假排位赛 #3

    题目链接:https://vjudge.net/contest/147974#overview. A题,费用流,不会..跳过了. B题,给一个图,问至少添加几条边能成为强连通图.显然缩点,要使得成为一 ...

  8. Codeforces Round #341 (Div. 2)

    在家都变的懒惰了,好久没写题解了,补补CF 模拟 A - Wet Shark and Odd and Even #include <bits/stdc++.h> typedef long ...

  9. 2017杭电ACM集训队单人排位赛 - 6

    2017杭电ACM集训队单人排位赛 - 6 排名 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 59 1 X X 1 1 X X 0 1 ...

随机推荐

  1. Angular7如何动态刷新Echarts图表

    1 概述 echarts是百度的开源图表插件 Angular中引入echarts网上教程很多 Angular引入echarts,并使用动态刷新 2 安装 请参考大神的博客:https://blog.c ...

  2. UVA10140PrimeDistance题解--质数/技巧

    题目链接 https://www.luogu.org/problemnew/show/UVA10140 分析 \(L,R\)都很大,显然不能直接筛出\(L,R\)区间中的质数,这里需要一个结论 结论 ...

  3. ubuntu 一键搭建VNN

    #!/bin/bash if [ $(id -u) != "0" ]; then printf "Error: You must be root to run this ...

  4. 对于div里面内容过大根据长度或者宽度进行适配,然后可以滚轮缩放的功能

    在做3000的项目中,因为页面的svg很大,但是做的只是适配电脑,打开肯定是看不全的,要看全就必须进行滚动,可是客户提出了将页面放在电视机上面,用电视输入网址直接访问,这样问题就来了,电视上怎么进行滚 ...

  5. JavaScript获取数组索引

    JavaScript获取数组索引: <!DOCTYPE html> <html> <head> <meta charset="utf-8" ...

  6. Notepad++快捷键及使用技巧

    常用快捷键: CTRL+Q 注释/取消注释 用Notepad++写代码,要是有一些重复的代码想copy一下,还真不容易,又得动用鼠标,巨烦人....有木有简单的方法呢,确实还是有的不过也不算太好用.主 ...

  7. JPA自带findOne方法报错原因

    是由于jdk8的原因,有可能和spring boot的版本也关系, 两种方式可选 注册,返回类是Optional<Girl>, Optional是jdk8自带的 @GetMapping(v ...

  8. Am335x SD卡刷eMMC二

    犹豫前段时间一直在搞另一个项目,Am335x这个BBlack板就放置一边了.前几天把BBlack板重新拿到手,之前搞得给全忘了.SD卡烧写emmC时突然出现了错误,一直找不到原因,今天终于算是有点眉目 ...

  9. 09_Redis_消息订阅与发布

    一:Redis 发布订阅 Redis 发布订阅(pub/sub)是一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息. Redis 客户端可以订阅任意数量的频道. 下图展示了频道 c ...

  10. 嵌入式Linux应用开发完全手册读书笔记——交叉编译工具选项说明

    交叉编译工具选项说明 arm-linux-gcc 一个c/c++文件要变成可执行文件需要4步:预处理 -> 编译 -> 汇编 -> 链接: 在使用arm-linux-gcc时的常用选 ...