题目链接: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的更多相关文章

  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寒假排位赛 #5

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

  6. 2017 ZSTU寒假排位赛 #4

    题目链接:https://vjudge.net/contest/148543#overview. A题:n个罪犯,每个人有一个犯罪值,现在要从里面选出连续的c个人,每个人的犯罪值都不能超过t,问选法的 ...

  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. 怎样查看Nginx版本号

    方法一: 使用 nginx -v nginx -v 方法二: 使用 nginx -V nginx -V 注意: nginx -V 显示的是: 版本号 / 编译器版本 / 配置参数

  2. win10下面opencv安装

    记得以前是安装好的,但是用了conda更新所有包以后,cv2不好用了,试验了很多方法都不管用,最后只能卸载opencv然后重新安装了. 如果电脑上安装了很多版本的python,比如我就安装了pytho ...

  3. Linux下mysql创建用户并设置权限,设置远程连接

    为了安全考虑,OneinStack仅允许云主机本机(localhost)连接数据库,如果需要远程连接数据库,需要如下操作:打开iptables 3306端口 # iptables -I INPUT 4 ...

  4. c# MVC方式文件上传

    MVC控制器中代码 index.cshtml <form action="/Home/Upload" method="post" enctype=&quo ...

  5. 智能指针原理及实现(1)shared_ptr

    0.异常安全 C++没有内存回收机制,每次程序员new出来的对象需要手动delete,流程复杂时可能会漏掉delete,导致内存泄漏.于是C++引入智能指针,可用于动态资源管理,资源即对象的管理策略. ...

  6. Dart的List比较特殊的几个API

    List里面常用的属性和方法: 常用属性: length 长度 reversed 翻转 isEmpty 是否为空 isNotEmpty 是否不为空 常用方法: add 增加 addAll 拼接数组 i ...

  7. Xshell连接阿里云服务被拒绝

    问题描述:突然的Xshell连接阿里云服务被拒绝了(如图)网上众多的方案都不行例如:https://www.cnblogs.com/wanglle/p/11416987.html(参考博文,本人这个问 ...

  8. 【TCP】连接管理

    TCP连接管理   本节将介绍一条TCP连接是如何建立和拆除的.此处假设客户机A上面的一个进程想要和服务 器B上的一个进程建立一条TCP连接.本文前面介绍的是比较正常的连接和拆除,特殊的会在后面介绍. ...

  9. Sublime text3安装

    一.Sublime text3下载 [20190506]下载 官网下载:https://www.sublimetext.com/ https://download.sublimetext.com/Su ...

  10. javascript typeof instanceof

    typeof用以获取一个变量或者表达式的类型,typeof一般只能返回如下几个结果: number,boolean,string,function(函数),object(NULL,数组,对象),und ...