10.23 noip模拟试题
尼玛蛋pdf好难粘
直接写了
T1
/*开始写wa了 我真弱2333 关于p的排序规则不只是差值 为了字典序最小 还要拍别的*/
#include<cstdio>
#include<algorithm>
#define maxn 100010
#define inf 1e7
#define mem(a,b) for(int i=0;i<=n;i++)a[i]=b[i];
using namespace std;
int n,m,ans=inf,k;
char s[maxn],r[maxn],l[maxn];
struct node{
int c,o;
}p[maxn];
int cmp(const node &x,const node &y){
if(x.c!=y.c)return x.c<y.c;//差值优先
int i=x.o,j=y.o;
if(s[i]==s[j]){//相等的特盘
if(s[i]-''<k)return i>j;
else return i<j;
}
return s[i]>s[j];//优先改数大的 大的大的大的 话说这sort的cmp不能写很多if好像 会慢死
}
int Abs(int x){
return x>?x:-x;
}
int Cmp(){
for(int i=;i<=n;i++){
if(l[i]<r[i])return ;
if(l[i]>r[i])return ;
}
}
int main()
{
freopen("number.in","r",stdin);
freopen("number.out","w",stdout);
scanf("%d%d%s",&n,&m,s+);
for(k=;k<=;k++){
for(int i=;i<=n;i++){
p[i].c=Abs(s[i]-''-k);
p[i].o=i;
}
sort(p+,p++n,cmp);
int mx=;
for(int i=;i<=m;i++)
mx+=p[i].c;
if(mx<ans){
ans=mx;mem(r,s);
for(int i=;i<=m;i++)
r[p[i].o]=k+'';
}
else if(ans==mx){
ans=mx;mem(l,s);
for(int i=;i<=m;i++)
l[p[i].o]=k+'';
if(Cmp())mem(r,l);
}
}
printf("%d\n",ans);
for(int i=;i<=n;i++)
printf("%c",r[i]);
return ;
}
T2
/*
1 S=a1 c=a2-a1
2 S=a1 c=a3-a1
3 S=a2 c=a3-a2
我晕 还带验证合法性 尼玛SP个毛啊
wo de da an dui a
*/
#include<cstdio>
#define maxn 200010
using namespace std;
int n,a[maxn],S,c,A[maxn],B[maxn],cnt;
bool f[maxn];
int init(){
int x=,f=;char s=getchar();
while(s<''||s>''){if(s=='-')f=-;s=getchar();}
while(s>=''&&s<=''){x=x*+s-'';s=getchar();}
return x*f;
}
void Clear(){
cnt=;
for(int i=;i<=n;i++)
f[i]=A[i]=B[i]=;
}
bool Judge(){
int now=a[S];
for(int i=S;i<=n;i++)
if(a[i]==now){
f[i]=;now+=c;B[++B[]]=a[i];
A[]=;int falg=;
for(int j=;j<=n;j++)
if(!f[j])A[++A[]]=a[j];
if(A[]<=||B[]<=)continue;
int C=A[]-A[];
for(int j=;j<=A[];j++)
if(A[j]-A[j-]!=C){
falg=;break;
}
if(falg==)return ;
}
}
void Printf(){
printf("%d ",B[]);
for(int i=;i<B[];i++)
printf("%d ",B[i]);
printf("%d\n",B[B[]]);
printf("%d ",A[]);
for(int i=;i<A[];i++)
printf("%d ",A[i]);
printf("%d\n",A[A[]]);
}
int main()
{
freopen("progression.in","r",stdin);
freopen("progression.out","w",stdout);
n=init();
for(int i=;i<=n;i++)
a[i]=init();
S=;c=a[]-a[];
if(Judge()){Printf();return ;}
Clear();S=;c=a[]-a[];
if(Judge()){Printf();return ;}
Clear();S=;c=a[]-a[];
if(Judge()){Printf();return ;}
printf("No solution\n");
return ;
}
T3
/*我尼玛今天刚意识到 这样Dfs是O(m)的啊 啊 啊 很自信地暴力 华丽的T了*/
#include<cstdio>
#define maxm 10010
#define maxn 510
using namespace std;
int n,m,Q,num,head[maxn],f[maxn],cnt,l,r;
struct node{
int o,v,pre;
}e[maxm*];
int init(){
int x=,f=;char s=getchar();
while(s<''||s>''){if(s=='-')f=-;s=getchar();}
while(s>=''&&s<=''){x=x*+s-'';s=getchar();}
return x*f;
}
void Add(int from,int to,int x){
num++;e[num].v=to;
e[num].o=x;
e[num].pre=head[from];
head[from]=num;
}
void Dfs(int x){
for(int i=head[x];i;i=e[i].pre){//O()O()O()O
if((e[i].o>=l&&e[i].o<=r)||f[e[i].v])continue;
f[e[i].v]=;Dfs(e[i].v);
}
}
int main()
{
freopen("network5.in","r",stdin);
freopen("network.out","w",stdout);
n=init();m=init();int u,v;
for(int i=;i<=m;i++){
u=init();v=init();
Add(u,v,i);Add(v,u,i);
}
Q=init();
while(Q--){
for(int i=;i<=n;i++)f[i]=;
l=init();r=init();cnt=;
for(int i=;i<=n;i++)
if(f[i]==){
f[i]=;cnt++;Dfs(i);
}
printf("%d\n",cnt);
}
return ;
}
/*
并茶几~
边老多老多 有很多很多虚的渣的没用的
因为不能用的是一段区间 所以能用的就是 前缀 后缀
预处理统计出有贡献的边们
然后Q次询问就成了每次O(n)
*/
#include<cstdio>
#define maxm 10010
#define maxn 510
#define Cf for(int i=0;i<=n;i++)fa[i]=i
using namespace std;
int n,m,Q,A[maxm],B[maxm],fa[maxn];
struct node{
int u,v;
}p[maxm];
int init(){
int x=,f=;char s=getchar();
while(s<''||s>''){if(s=='-')f=-;s=getchar();}
while(s>=''&&s<=''){x=x*+s-'';s=getchar();}
return x*f;
}
int find(int x){
if(x!=fa[x])return fa[x]=find(fa[x]);
return fa[x];
}
int main()
{
freopen("network.in","r",stdin);
freopen("network.out","w",stdout);
n=init();m=init();int u,v;Cf;
for(int i=;i<=m;i++){
u=init();v=init();
p[i].u=u;p[i].v=v;
}
for(int i=;i<=m;i++){
int r1=find(p[i].u);
int r2=find(p[i].v);
if(r1!=r2){
fa[r2]=r1;A[++A[]]=i;
}
}
Cf;
for(int i=m;i>=;i--){
int r1=find(p[i].u);
int r2=find(p[i].v);
if(r1!=r2){
fa[r2]=r1;B[++B[]]=i;
}
}
Q=init();
while(Q--){
Cf;int l,r,cnt=;
l=init();r=init();
for(int i=;i<=A[];i++){
if(A[i]>=l)break;
int r1=find(p[A[i]].u);
int r2=find(p[A[i]].v);
if(r1!=r2){
fa[r2]=r1;cnt++;
}
}
for(int i=;i<=B[];i++){
if(B[i]<=r)break;
int r1=find(p[B[i]].u);
int r2=find(p[B[i]].v);
if(r1!=r2){
fa[r2]=r1;cnt++;
}
}
printf("%d\n",n-cnt);
}
return ;
}
10.23 noip模拟试题的更多相关文章
- 10.26 noip模拟试题
enc[问题背景]zhx 和他的妹子聊天.[问题描述]考虑一种简单的加密算法.假定所有句子都由小写英文字母构成,对于每一个字母,我们将它唯一地映射到另一个字母.例如考虑映射规则:a->b, b- ...
- 10.3 noip模拟试题
希望[题目描述]网页浏览器者有后退与前进按钮,一种实现这两个功能的方式是用两个栈,“前进栈”.“后退栈”.这里你需要实现以下几个功能:BACK: 如果“后退栈”为空则忽略此命令. 否则将当前两面压入“ ...
- 9.23 noip模拟试题
Problem 1 抓牛(catchcow.cpp/c/pas) [题目描述] 农夫约翰被通知,他的一只奶牛逃逸了!所以他决定,马上出发,尽快把那只奶牛抓回来. 他们都站在数轴上.约翰在N(O≤N ...
- 10.27 noip模拟试题
1.铺瓷砖(tile.cpp/c/pas)[问题描述]有一面很长很长的墙. 你需要在这面墙上贴上两行瓷砖. 你的手头有两种不同尺寸的瓷砖,你希望用这两种瓷砖各贴一行.瓷砖的长可以用分数表示,贴在第一行 ...
- 10.24 noip模拟试题
尼玛pdf依旧不会粘23333 /* 每段合并到总的里面 假设总的有X个 这一段有Y个 一共有X+1个空 那么就有 C(X+1,1)+C(X+1,2)+C(X+1,3)+...+C(X+1,Y) 这样 ...
- 10.18 noip模拟试题
分火腿 (hdogs.pas/.c/.cpp) 时间限制:1s:内存限制 64MB 题目描述: 小月言要过四岁生日了,她的妈妈为她准备了n根火腿,她想将这些火腿均分给m位小朋友,所以她可能需要切火腿. ...
- 10.13 noip模拟试题
Porble 1时间与空间之旅(tstrip.*) 题目描述 公元22××年,宇宙中最普遍的交通工具是spaceship.spaceship的出现使得星系之间的联系变得更为紧密,所以spaceship ...
- 10.11 noip模拟试题
4题均为128M,1s 1. 锻炼计划(exercise.pas) 身体是革命的本钱,OIers不要因为紧张的学习和整天在电脑前而忽视了健康问题.小x设计了自己的锻炼计划,但他不知道这个计划是否可行, ...
- 10.8 noip模拟试题
1.花 (flower.cpp/c/pas) [问题描述] 商店里出售n种不同品种的花.为了装饰桌面,你打算买m支花回家.你觉得放两支一样的花很难看,因此每种品种的花最多买1支.求总共有几种不同的 ...
随机推荐
- matlab常用小函数(二)
numel 元素个数 assert 表达式为假时输出某个字符串 int2str 整形转化为字符串型 numel(A) 返回A中的元素个数,A可以是任何的数据结构,如向量.矩阵.元胞.结构体等 asse ...
- iOS:关于获取网络类型和运营商信息
目录 1. 获取运营商网络类型 2. 获取运营商信息 返回目录 1. 获取运营商网络类型 Apple的Reachability Sample看起来不错,但是只可以判断是否连接到互联网和是否连接Wifi ...
- 【 UVALive - 4287】Proving Equivalences (SCC缩点)
题意: 给出N个命题,要求你证明这N个命题的等价性 比如有4个命题a,b,c,d,我们证明a<->b, b<->c,c<->d,每次证明都是双向的,因此一共用了6次 ...
- Andoid 学习笔记 AppCompatEditText
android.support.v7.widget.AppCompatEditText 只有浮动标签 style中添加 <style name="txt_lab" paren ...
- bzoj3209
首先这道题目不难想到将答案转化为这种形式 2^s[2]*3*s[3]*…max*s[max] 这时候我们要分类讨论,设n的二进制位数为t 当1~n中二进制位数小于t时 我们可以直接用组合的知识,二进制 ...
- Android 逐帧动画isRunning 一直返回true的问题
AnimationDrawabl主要通过xml实现逐帧动画,SDK实例如下: An AnimationDrawable defined in XML consists of a single < ...
- MVC 5 第一章 起航
本章将讲述一些构建ASP.NET MVC 5 web application的一些基础知识, 通过本章学习,你应该能够掌握到构建MVC 5应用程序的基本步骤,并且通过展示一个完整的MVC 5 hel ...
- 《A First Course in Probability》-chaper3-条件概率和独立性-基本公式
EX1: 乔伊80%肯定他把失踪的钥匙放在了他外套两个口袋中的一个.他40%确定放在左口袋,40%确定放在右口袋.如果检查了左口袋发现没有找到钥匙,那么钥匙在右口袋的条件概率是多少? 分析:很基本的条 ...
- HDU 1520 Anniversary party [树形DP]
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1520 题目大意:给出n个带权点,他们的关系可以构成一棵树,问从中选出若干个不相邻的点可能得到的最大值为 ...
- 实现自己的脚本语言ngscript之二:语法分析
ngscript的语法分析使用的是我自己的语法分析工具parseroid.与常用cc工具(yacc.bison.javacc.antlr.etc…)不同的是,parseroid生成的不是语法分析器的源 ...