NOIP2017SummerTraining0710
个人感受:这套题,题目泄露,没什么好打的,第一题刚开始题目理解错误,后来还行,第二道题,打了一个50还是60分的dp,第三道暴力过了小数据,拿了200分,排名15+。
问题 A: 七天使的通讯
时间限制: 2 Sec 内存限制: 256 MB
提交: 427 解决: 126
[提交][状态][讨论版]
题目描述
输入
输出
对于每个询问,输出一行“sane”表示有可行方案、“non”表示无解
样例输入
1 7 5 1 3 2 7 3 4 7 4 6 5
样例输出
sane
提示
【样例解释】
样例中共有一个询问。

在(1,3)、(4,7)、(5,6)之间连黑色通道,在(2,7)、(3,4)之间连白色通道,每条通道都成功建立,且同种颜色的通道没有相交,所以输出sane。
【数据规模和约定】
对于 20%的数据,1<=n<=50,1<=m<=15
对于
50%的数据,1<=n<=1000,1<=m<=300
对于
100%的数据,1<=n<=5000,1<=m<=1000,1<=T<=10,1<=a<=n,1<=b<=n
数据保证每对(a,b)不重复,且a不等于b
【提示】
当两条线路有一对相同的端点时,这两条线路不相交。
也就是说,对于线路(a,b)和线路(c,d)(a<b且c<d),当且仅当a<c<b<d或者c<a<d<b时这两条线路相交。
这题比较水吧,黑白染色法就可以过了,因为通道不能相较,输入的时候就判断,然后连边就可以了。
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cmath>
#include<cstring>
#include<string>
using namespace std;
];
],next[],rea[];
struct fzy
{
int l,r;
}a[];
bool check(int i,int j)
{
;
;
;
;
}
void add(int u,int v)
{
cnt++;
next[cnt]=head[u];
head[u]=cnt;
rea[cnt]=v;
}
void dfs(int u)
{
;i=next[i])
{
int v=rea[i];
)
{
color[v]=color[u]^;
dfs(v);
}
}
}
int main()
{
scanf("%d",&CAS);
while (CAS--)
{
cnt=;
memset(head,-,sizeof(head));
memset(color,-,sizeof(color));
scanf("%d%d",&n,&m);
;i<=m;i++)
{
scanf("%d%d",&a[i].l,&a[i].r);
if (a[i].l>a[i].r) swap(a[i].l,a[i].r);
;j<i;j++)
if (check(i,j))
{
add(i,j);
add(j,i);
}
}
;i<=m;i++)
)
{
color[i]=;
dfs(i);
}
;
;i<=m;i++)
{
;j=next[j])
{
int u=i,v=rea[j];
if (color[u]==color[v])
{
flag=;
break;
}
}
) break;
}
) printf("non\n");
else printf("sane\n");
}
}
都市环游
时间限制: 1 Sec 内存限制: 512 MB
提交: 262 解决:
93
[提交][状态][讨论版]
题目描述
输入
输出
样例输入
5 17 7 0 2 4 5 3 1 2 2 1 1 3 3 1 1 4 4 1 4 5 5 4 5 3 4 1 2 1 5 3 2 1 2 1 1 2 2 1 1 3
样例输出
245
提示
花了10分钟左右打了一个dp,拿了50分,后来发现hi<=70后来想到了快速幂,矩阵乘法,就可以了,到所有路径的方案数是确定的。
#include<cstdio>
#include<algorithm>
#include<iostream>
#include<cmath>
#include<cstring>
using namespace std;
;
;
int n,m,t;
},f[NN][NN]={},road[NN][NN]={};
};
void solve(int num)
{
;i<NN;i++)
fzy[i][i]=;
while (num)
{
};
==)
{
;i<=n;i++)
;j<=n;j++)
;k<=n;k++)
xx[i][j]=(xx[i][j]+fzy[i][k]*road[k][j])%MOD;
;i<=n;i++)
;j<=n;j++)
fzy[i][j]=xx[i][j];
}
memset(xx,,sizeof(xx));
;i<=n;i++)
;j<=n;j++)
;k<=n;k++)
xx[i][j]=(xx[i][j]+road[i][k]*road[k][j])%MOD;
;i<=n;i++)
;j<=n;j++)
road[i][j]=xx[i][j];
num/=;
}
;i<=n;i++)
;j<=n;j++)
) f[][j]=(f[][j]+f[][i]*fzy[i][j])%MOD;
printf(][n]);
}
int main()
{
scanf("%d%d%d",&n,&m,&t);
;i<=n;i++)
scanf("%d",&a[i]);
int x,y;
;i<=m;i++)
{
scanf("%d%d",&x,&y);
road[x][y]++;
}
;i<=n;i++)
road[i][i]++;
f[][]=;
;i<=;i++)
;j<=n;j++)
;k<=n;k++)
) f[i][k]=(f[i][k]+f[i-][j]*road[j][k])%MOD;
) printf("%d\n",f[t][n]);
);
}
大水题
时间限制: 1 Sec 内存限制: 512 MB
提交: 204 解决:
27
[提交][状态][讨论版]
题目描述
位的数的生成矩阵A 为一个大小为n*n
且Aij
为这个数的第i*n+j-n位的矩阵。
位的数k,他想知道所有小于等于k
的数的n*n
生成矩阵有多少种。(如果不足n^2 位则补前缀零)
输入
输出
样例输入
2 1000
样例输出
954
提示
<=1000,且n为偶数
度后可以重叠,则称这两个矩阵是相同的。
30分的代码好打,但是满分的数位dp难想。
NOIP2017SummerTraining0710的更多相关文章
随机推荐
- appium 判断app是否安装
#coding:utf-8 #Import the common package import os import unittest from appium import webdriver from ...
- vue系列之动态路由【原创】
开题 最近用vue来构建了一个小项目,由于项目是以iframe的形式嵌套在别的项目中的,所以对于登录的验证就比较的麻烦,索性后端大佬们基于现在的问题提出了解决的方案,在看到他们的解决方案之前,我先画了 ...
- SQL菜鸟学习札记(二)
五月份一直在写SQL,之后写了一个期末大作业的项目,现在才有时间把之前遇到的各种奇怪的问题整理出来.下一部分札记应该是大作业中使用到的SQL的整理. 一.UPDATE SET语句后面可以并列赋值. 之 ...
- 【Java数据结构学习笔记之二】Java数据结构与算法之栈(Stack)实现
本篇是java数据结构与算法的第2篇,从本篇开始我们将来了解栈的设计与实现,以下是本篇的相关知识点: 栈的抽象数据类型 顺序栈的设计与实现 链式栈的设计与实现 栈的应用 栈的抽象数据类型 栈是 ...
- Spring五个事务隔离级别和七个事务传播行为
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt216 Spring五个事务隔离级别和七个事务传播行为 1. 脏读 :脏读就是 ...
- 【全面总结】js获取元素位置大小
[js获取元素位置+元素大小]全面总结 目录 1.关于offset offsetParent(只读) offsetTop(只读) offsetLeft(只读) offsetHeight(只读) off ...
- 自己编写服务启动脚本(一):functions文件详细分析和说明
本文目录: 1.几个显示函数2.action函数3.is_true和is_false函数4.confirm函数5.pid检测相关函数 5.1 checkpid.__pids_var_run和__pid ...
- ini文件必须要全路径名啊
弄半天必须要全路径名啊.实在不行用./set.ini也可以 用UNICODE保存ini文件
- 201521123072《java程序设计》第十三周学习总结
201521123072<java程序设计>第十三周学习总结 1. 本周学习总结 以你喜欢的方式(思维导图.OneNote或其他)归纳总结多网络相关内容. 2. 书面作业 1. 网络基础 ...
- 201521123035《Java程序设计》第十二周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 书面作业 将Student对象(属性:int id, String name,int age,doubl ...