2017 ZSTU寒假排位赛 #6
题目链接:https://vjudge.net/contest/149212#overview。
A题,水题,略过。
B题,水题,读清题意即可。
C题,数学题,如果把x表示成x=nb+m,则k=n/m属于[1,a],m属于[1,b-1]。然后由第一个式子得到n=(x-m)/b,那么带入第二个式子得,x=m(kb+1)。已经知道的m的范围,因此m的和为b(b-1)/2。然后因为k的范围已知,那么枚举k累和即可得到答案。注意m算好以后要先mod,不然太大了后面会溢出。代码如下:
#include <stdio.h>
#include <algorithm>
#include <string.h>
#include <map>
#include <set>
#include <vector>
#include <queue>
#include <iostream>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int N = + ;
const int inf = 0x3f3f3f3f;
const int mod = 1e9 + ; int main()
{
ll a,b;
cin >> a >> b;
ll m = b*(b-)/;
m %= mod;
ll ans = ;
for(int k=;k<=a;k++)
{
ll t = m*(k*b%mod + ) % mod;
ans += t;
ans = (ans % mod + mod) % mod;
//ans += m*(k*b+1);
}
cout << ans << endl;
return ;
}
C
D题,状压DP,dp[i][j],i表示状态,j表示上一个被选的是哪一个菜。代码如下:
#include <stdio.h>
#include <algorithm>
#include <string.h>
#include <map>
#include <set>
#include <vector>
#include <queue>
#include <iostream>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int N = + ;
const int inf = 0x3f3f3f3f;
const int mod = 1e9 + ; int n,m,k;
int a[];
map<pii,int> M;
ll ans;
bool vis[];
ll dp[<<][];
int get(int x)
{
int ans = ;
while(x)
{
ans += x % ;
x >>= ;
}
return ans;
} int main()
{
cin >> n >> m >> k;
for(int i=;i<=n;i++) scanf("%d",a+i);
for(int i=;i<=k;i++)
{
int x,y,w;
scanf("%d%d%d",&x,&y,&w);
M[pii(x,y)] = w;
}
memset(dp,-,sizeof dp);
for(int i=;i<=n;i++) dp[<<i-][i] = a[i];
int all = ( << n) - ;
for(int mask=;mask<=all;mask++)
{
int flag = get(mask) == m;
for(int i=;i<=n;i++)
{
if(dp[mask][i] == -) continue;
if(flag) ans = max(ans, dp[mask][i]);
for(int j=;j<=n;j++)
{
if(mask & (<<j-)) continue;
dp[mask | (<<j-)][j] = max(dp[mask | (<<j-)][j], dp[mask][i] + M[pii(i,j)] + a[j]);
}
}
}
cout << ans << endl;
return ;
}
D
E题,lyf说什么dijkstra树,不知道什么东西。。题意有点问题,题目明明说不能有环结果第一个样例却有环。。看懂了题意以后这题不难。只要把距离相差1的点随便连即可。代码如下:
#include <stdio.h>
#include <algorithm>
#include <string.h>
#include <map>
#include <set>
#include <vector>
#include <queue>
#include <iostream>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int N = + ;
const int inf = 0x3f3f3f3f;
const int mod = 1e9 + ; int n,k;
struct node
{
int dis;
int id;
bool operator < (const node & temp) const
{
return dis < temp.dis;
}
}p[N];
vector<int> v[N];
vector<pii> ans; int main()
{
cin >> n >> k;
for(int i=;i<=n;i++)
{
scanf("%d",&p[i].dis);
p[i].id = i;
v[p[i].dis].push_back(i);
}
sort(p+,p++n);
int max_dis = p[n].dis;
if(v[].size() != ) return *puts("-1");
int flag = ;
for(int i=;i<=max_dis;i++)
{
if(i == )
{
if(v[].size() > k)
{
flag = ;
break;
}
for(int j=;j<v[].size();j++) ans.push_back(pii(v[][], v[][j]));
}
else
{
if((ll)(k-)*v[i-].size() < v[i].size())
{
flag = ;
break;
}
int pos = ;
for(int j=;j<v[i].size();j++)
{
pos++;
if(pos > v[i-].size()) pos = ;
ans.push_back(pii(v[i-][pos-], v[i][j]));
}
}
}
if(flag == ) puts("-1");
else
{
printf("%d\n",ans.size());
for(int i=;i<ans.size();i++) printf("%d %d\n",ans[i].first, ans[i].second);
}
return ;
}
E
2017 ZSTU寒假排位赛 #6的更多相关文章
- 2017 ZSTU寒假排位赛 #7
题目链接:https://vjudge.net/contest/149498#overview. A题,水题,直接按照题意模拟一下即可. B题,我用的是线段树.大力用的差分标记(上次听zy说过,下次再 ...
- 2017 ZSTU寒假排位赛 #1
题目链接:https://vjudge.net/contest/147102#overview. A题:给出一堆的点,要找出两条垂直的直线,一条与x轴呈45度.-->使得所有的点到任意一条直线的 ...
- 2017 ZSTU寒假排位赛 #2
题目链接:https://vjudge.net/contest/147632#overview. A题,状态压缩一下然后暴力即可. B题,水题,略过. C题,有负数,前缀和不是单调的,因此不能用尺取法 ...
- 2017 ZSTU寒假排位赛 #8
题目链接:https://vjudge.net/contest/149845#overview. A题,水题. B题,给出 p个 第一个人的区间 和 q个第二个人的区间,问[l,r]中有多少个整数满足 ...
- 2017 ZSTU寒假排位赛 #5
题目链接:https://vjudge.net/contest/148901#overview. A题,排序以后xjbg即可. B题,弄个数组记录当前列是不是删除以及当前行是不是已经大于下一行然后乱搞 ...
- 2017 ZSTU寒假排位赛 #4
题目链接:https://vjudge.net/contest/148543#overview. A题:n个罪犯,每个人有一个犯罪值,现在要从里面选出连续的c个人,每个人的犯罪值都不能超过t,问选法的 ...
- 2017 ZSTU寒假排位赛 #3
题目链接:https://vjudge.net/contest/147974#overview. A题,费用流,不会..跳过了. B题,给一个图,问至少添加几条边能成为强连通图.显然缩点,要使得成为一 ...
- Codeforces Round #341 (Div. 2)
在家都变的懒惰了,好久没写题解了,补补CF 模拟 A - Wet Shark and Odd and Even #include <bits/stdc++.h> typedef long ...
- 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 ...
随机推荐
- 由[].slice.call()引发的思考
由[].slice.call()引发的思考 经常看到大家用[].slice.call()或者Array.prototype.slice.call(): 我一直是一知半解的,今天算是基本弄清楚了, ...
- IExtenderProvider,c#组件扩展控件属性
[ProvideProperty("IsEnabled", typeof(LayoutControlItem)), ToolboxItemFilter("System.W ...
- Spark RDD学习笔记
一.学习Spark RDD RDD是Spark中的核心数据模型,一个RDD代表着一个被分区(partition)的只读数据集. RDD的生成只有两种途径: 一种是来自于内存集合或外部存储系统: 另一种 ...
- multer使用
使用multer 1. 在项目中下载multer操作模块 Npm install multer --save 前端代码: <form class="layui-form&q ...
- Div实现水平垂直居中
在实际应用中很多地方不仅要求实现元素的水平居中或者垂直居中效果,还可能会在水平方向和垂直方向上都要实现居中效果,下面就简单介绍几种元素水平垂直居中的方法(注:不同的方法会存在一些优缺点以及兼容性问题) ...
- H5存储方式
数据存储 var arr = [0, 1, 1, 1]; //存储,IE6~7 cookie 其他浏览器HTML5本地存储 if (window.localStorage) { localStorag ...
- 6.Tray Monitor服务(监控服务)
1. Tray Monitor服务(监控服务) 该服务需要运行在gui环境下,用于查看baclua client.存储等状态.下面以windows下安装为例. 1.1. Tray Monito ...
- ConcurrentDictionary源码概读
ConcurrentDictionary的数据结构主要由Tables和Node组成,其中Tables包括桶(Node,节点)数组.局部锁(Local lock).每个锁保护的元素数量(PerLock) ...
- 算法---FaceNet+mtcnn的使用记录
FaceNet+mtcnn---ubutntu系统下的使用记录 @WP20190307 由于先配置了FaceNet算法,中途遇到了点问题,单独又配置了mtcnn进行学习,没有深入,蜻蜓点水.今天,在尝 ...
- gerapy+scrapyd组合管理分布式爬虫
Scrapyd是一款用于管理scrapy爬虫的部署和运行的服务,提供了HTTP JSON形式的API来完成爬虫调度涉及的各项指令.Scrapyd是一款开源软件,代码托管于Github上. 点击此链接h ...