Degree Set CodeForces - 976D(双指针)
题意:
构造一个无向图,使得无向图里的所有点的度数 所组成的集合 即为给出的几个数
解析:
题中的数是以上升的顺序给出的,
我们对于dn+1个数进行处理,对于当前数i,有两个操作
1、向后边的所有点连边 称为主动连边
2、跳过该数 即不向后边的点连边,称为被动连边
设tot = dn+1, l = 1, r = n,ready 为对于当前点i前面的主动连边的点的数量
如果ready + tot - i == d[r] (即前面的点向它连的边 加上 当前点向后边的点连的边(即为总点数减去当前点的下标(下标从1开始))等于d[r])
那就ready++,即把当前点和后边的点连边
如果ready == d[l] 说明当前点前面的点 向后连的边 等于d[l] 即当前点不向后边主动连边
那就l++, r--; //因为如果要符合这个判断 肯定符合上一个判断 因为只有符合上一个判断的时候ready才会++ 才会加到
#include <bits/stdc++.h>
#define mem(a, b) memset(a, b, sizeof(a))
using namespace std;
const int maxn = 1e6+, INF = 0x7fffffff;
typedef long long LL;
int n;
int d[maxn];
vector<int> G[maxn];
int tot;
void build(int u)
{
for(int i=u+; i<=tot; i++)
G[u].push_back(i);
} int main()
{
cin>> n;
for(int i=; i<=n; i++)
{
cin>> d[i];
}
tot = d[n] + ;
int l = , r = n, ready = ;
LL ans = ;
for(int i=; i<=tot; i++)
{
if(ready == d[l])
l++, r--;
else if(ready + tot - i == d[r])
ready++, build(i), ans += tot - i; //同时ans 记录一共有几条边
} cout<< ans <<endl;
for(int i=; i<=tot; i++)
for(int j=; j<G[i].size(); j++)
cout << i << " " << G[i][j] <<endl; return ;
}
Degree Set CodeForces - 976D(双指针)的更多相关文章
- Card Game Again CodeForces - 818E (双指针)
		
大意: 给定序列, 求多少个区间积被k整除. 整除信息满足单调性, 显然双指针. 具体实现只需要考虑k的素数向量, 对每一维维护个指针即可. 这题看了下cf其他人的做法, 发现可以直接暴力, 若当前的 ...
 - Skills CodeForces - 613B (双指针)
		
大意: $n$门课, 第$i$门分数$a_i$, 可以增加共$m$分, 求$cnt_{mx}*cf+mi*cm$的最大值 $cnt_{mx}$为满分的科目数, $mi$为最低分, $cf$, $cm$ ...
 - Codeforces - 466C 双指针
		
首先要判sum是否是3的整数倍 然后把符合条件的前缀和以及后缀和分别加入到静态vector中 最后扫一下j和k定位在哪然后求总长的差来更新答案 注意i j k至少隔1位,所以lower_bound是s ...
 - Codeforces 976D
		
题意略. 思路:构造题. 我们把全部的d[n]+1个点分作3部分来构造. 首先我们把原问题归约成构造d1.dn.和{d2 - d1,d3 - d1,.....,d[n-1] - d1}这样的问题,其中 ...
 - Palindrome Degree(CodeForces 7D)——  hash求回文
		
学了kmp之后又学了hash来搞字符串.这东西很巧妙,且听娓娓道来. 这题的题意是:一个字符串如果是回文的,那么k值加1,如果前一半的串也是回文,k值再加1,以此类推,算出其k值.打个比方abaaba ...
 - Codeforces Round #544 (Div. 3) dp + 双指针
		
https://codeforces.com/contest/1133/problem/E 题意 给你n个数(n<=5000),你需要对其挑选并进行分组,总组数不能超过k(k<=5000) ...
 - Codeforces Round #543 (Div. 2) D 双指针 + 模拟
		
https://codeforces.com/contest/1121/problem/D 题意 给你一个m(<=5e5)个数的序列,选择删除某些数,使得剩下的数按每组k个数以此分成n组(n*k ...
 - Codeforces Round #513 by Barcelona Bootcamp  C. Maximum Subrectangle(双指针+思维)
		
https://codeforces.com/contest/1060/problem/C 题意 给两个数组,a数组有n个元素,b数组有m个元素,两个数组元素互相相乘形成n*m的矩阵,找一个子矩阵,元 ...
 - Codeforces Beta Round #7 D. Palindrome Degree manacher算法+dp
		
题目链接: http://codeforces.com/problemset/problem/7/D D. Palindrome Degree time limit per test1 secondm ...
 
随机推荐
- OS X 10.11无法安装cocoapods的解决办法
			
前两天在给OS X 10.11 安装cocoapods时,命令行总是提示"Operation not permitted",我不管是用root用户安装还是查阅网上过去的资料都安装不 ...
 - c# thread pause example
			
some times we need pause thread to do some additional job: c# thread pause example as below: 1. crea ...
 - Django Rest Framework源码剖析(二)-----权限
			
一.简介 在上一篇博客中已经介绍了django rest framework 对于认证的源码流程,以及实现过程,当用户经过认证之后下一步就是涉及到权限的问题.比如订单的业务只能VIP才能查看,所以这时 ...
 - 20155218《网络对抗》Exp3 免杀原理与实践
			
20155218<网络对抗>Exp3 免杀原理与实践 一.使用msf生成后门程序的检测 (1)将上周msf生成的后门文件放在virscan.org中进行扫描,截图如下: (2)使用msf时 ...
 - 腾讯云CVM服务器怎么建网站
			
腾讯云云服务器CVM站在用户的角度看就相当于一台计算机,虽然实际上它是一个虚拟服务器,是一个大的云端服务器集群虚拟出来的一个虚拟服务器,在使用上直接当做一个实际的服务器即可.那么,对于一个新手菜鸟来说 ...
 - Join 和 Apply 用法全解
			
在关系型数据库系统中,为了满足第三范式(3NF),需要将满足“传递依赖”的表分离成单独的表,通过Join 子句将相关表进行连接,Join子句共有三种类型:外连接,内连接,交叉连接:外连接分为:left ...
 - 用Visual Studio2017写C++静态库
			
造轮子是一件有趣的事情,VS是一个强大的工具,能胜任超大规模的工程,但是讲真,对不那么大的项目配置起来不是那么友好(网上的其他教程也一点都不友好Orz).这里就展示一下构建一个简单的静态库的正确姿势. ...
 - Jq_Js_Js、Jq获取浏览器和屏幕各种高度宽度
			
$(document).ready(function() {alert($(window).height()); //浏览器当前窗口可视区域高度alert($(document).he ...
 - 计算机基础知识 一 Basic knowledge of computers  One
			
计算机硬件由CPU(Central Processing Unit).存储器.输入设备.输出设备组成. CPU通常由控制单元(控制器)和算数逻辑单元(运算器)组成. 运算器:负责进行算数运算和逻辑运算 ...
 - photoshop cs6安装过程中安装程序遇到错误:请重启计算机,解决办法
			
1.关闭防火墙和杀毒软件 2.删除注册表 依次展开HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager目录,找到其中的 ...