今天早起做了NOI2015网络同步赛....

最近NOI是越来越向NOIP靠拢了....但是我还是不会做.....

第一题:程序自动分析

先离散化一下..然后最多就剩20w个数 , 不等于就存起来..等于就用并查集维护...最后for判断一下就行了.....

-------------------------------------------------------------------------------------

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<cctype>
#include<cstdlib>
 
#define rep(i ,n) for(int i=0; i < n; ++i)
#define clr(x ,c) memset(x, c, sizeof(x))
 
using namespace std;
 
const int maxn = 200005;
 
struct T {
int x;
T* next;
} *head[ maxn ] , pool[ maxn ] , *pt;
 
void add( int u , int v ) {
pt -> x = v;
pt -> next = head[ u ];
head[ u ] = pt++;
}
 
inline int read() {
char c = getchar();
int ans = 0;
for( ; ! isdigit( c ) ; c = getchar() );
for( ; isdigit( c ) ; c = getchar() )
   ans = ans * 10 + c - '0';
return ans;
}
 
int fa[ maxn ];
 
int find( int x ) {
return x == fa[ x ] ? x : fa[ x ] = find( fa[ x ] );
}
 
struct Q {
int x , y;
bool type;
} q[ maxn ];
 
int id[ maxn << 1 ];
 
int main(){
freopen("prog.in", "r", stdin);
freopen("prog.out", "w", stdout);
int t = read();
while( t-- ) {
int cnt = 0;
pt = pool;
int n = read();
rep( i , n ) {
Q &p = q[ i ];
   id[ cnt++ ] = p.x = read();
id[ cnt++ ] = p.y = read();
p.type = read();
}
sort( id , id + cnt );
cnt = unique( id , id + cnt ) - id;
rep( i , cnt ) fa[ i ] = i;
clr( head , 0 );
rep( i , n ) {
Q* p = q + i;
if( p -> type ) 
   fa[ find( lower_bound( id , id + cnt , p -> x ) - id ) ] = 
       find( lower_bound( id , id + cnt , p -> y ) - id );
else 
   add( lower_bound( id , id + cnt , p -> x ) - id ,
        lower_bound( id , id + cnt , p -> y ) - id );
}
bool ans = true;
rep( i , cnt ) {
for( T* p = head[ i ] ; p ; p = p -> next ) {
   if( find( i ) == find( p -> x ) ) {
    ans = false;
    break;
   }
}
if( ! ans ) break;
}
printf( ans ? "YES\n" : "NO\n" );
}
return 0;

-------------------------------------------------------------------------------------

第二题 : 软件包管理器

树链剖分... install( x ) 就处理 x 到 root 的这条路径 , uninstall( x ) 就处理以 x 为根的子树...子树在线段树上是连续的.. 两个操作都可以打标...话说我对拍时暴力程序也跑得很快...难道暴力也能过 ?

-------------------------------------------------------------------------------------

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<cctype>
#include<cstdlib>
 
#define rep(i ,n) for(int i=0; i < n; ++i)
#define clr(x ,c) memset(x, c, sizeof(x))
#define REP( x ) for( edge* e = head[ x ] ; e ; e = e -> next )
#define M( l , r ) ( ( ( l ) + ( r ) ) >> 1 )
 
using namespace std;
 
const int maxn = 100000 + 5;
 
struct edge {
int to;
edge* next;
} E[ maxn << 1 ] , *ptt = E , *head[ maxn ];
 
inline void add( int u , int v ) {
ptt -> to = v;
ptt -> next = head[ u ];
head[ u ] = ptt++;
}
#define add_edge( u , v ) add( u , v ) , add( v , u )
 
int top[ maxn ] , fa[ maxn ] , dep[ maxn ] , size[ maxn ] , son[ maxn ];
int id[ maxn ] , id_cnt = 0 , TOP , n , _L[ maxn ] , _R[ maxn ];
 
void dfs( int x ) {
size[ x ] = 1 , son[ x ] = -1;
REP( x ) {
int to = e -> to;
if( to == fa[ x ] ) continue;
dep[ to ] = dep[ x ] + 1;
fa[ to ] = x;
dfs( to );
size[ x ] += size[ to ];
if( son[ x ] == -1 || size[ son[ x ] ] < size[ to ] ) 
  son[ x ] = to;
}
}
 
void DFS( int x ) {
top[ x ] = TOP;
_L[ x ] = id[ x ] = ++id_cnt;
if( son[ x ] != -1 ) DFS( son[ x ] );
REP( x ) if( fa[ x ] != e -> to && e -> to != son[ x ] )
   DFS( TOP = e -> to );
_R[ x ] = id_cnt;
}
 
void init() {
dfs( dep[ 0 ] = 0 );
DFS( TOP = 0 );
}
 
struct Node {
Node *l , *r;
int set , sum; // sum : sum of install
Node() {
set = sum = 0;
l = r = NULL;
}
inline void update( int len ) {
if( set != -1 )
   sum = set * len;
else 
   sum = l -> sum + r -> sum;
}
inline void pushdown() {
if( set != -1 ) {
l -> set = r -> set = set;
set = -1;
}
}
} pool[ maxn << 1 ] , *pt = pool , *root;
 
void build( Node* t , int l , int r ) {
if( r > l ) {
int m = M( l , r );
build( t -> l = pt++ , l , m );
build( t -> r = pt++ , m + 1 , r );
}
}
 
int L , R;
bool v;// v -> true install
 
void modify( Node* t , int l , int r ) {
if( L <= l && r <= R ) {
t -> set = v;
} else {
int m = M( l , r );
t -> pushdown();
L <= m ? modify( t -> l , l , m ) : t -> l -> update( m - l + 1 );
m < R ? modify( t -> r , m + 1 , r ) : t -> r -> update( r - m );
}
t -> update( r - l + 1 );
}
 
int query( Node* t , int l , int r ) {
if( L <= l && r <= R )
return v ? r - l + 1 - t -> sum : t -> sum;
int m = M( l , r );
t -> pushdown();
t -> l -> update( m - l + 1 );
t -> r -> update( r - m );
return ( L <= m ? query( t -> l , l , m ) : 0 ) + 
      ( m < R ? query( t -> r , m + 1 , r ) : 0 );
}
 
int install( int x , int y ) {
int ans = 0;
while( top[ x ] != top[ y ] ) {
if( dep[ top[ x ] ] < dep[ top[ y ] ] ) swap( x , y );
L = id[ top[ x ] ] , R = id[ x ];
ans += query( root , 1 , n );
modify( root , 1 , n );
x = fa[ top[ x ] ];
}
if( dep[ x ] < dep[ y ] ) swap( x , y );
L = id[ y ] , R = id[ x ];
ans += query( root , 1 , n );
modify( root , 1 , n );
return ans;
}
 
inline int read() {
char c = getchar();
int ans = 0;
for( ; ! isdigit( c ) ; c = getchar() );
for( ; isdigit( c ) ; c = getchar() )
   ans = ans * 10 + c - '0';
return ans;
}
 
int main(){
freopen("manager.in", "r", stdin);
freopen("manager.out", "w", stdout);
clr( head , 0 );
n = read();
build( root = pt++ , 1 , n );
rep( i , n - 1 ) {
int t = read();
   add_edge( t , i + 1 );
}
init();
int q = read() , x;
char s[ 10 ];
while( q-- ) {
scanf( "%s%d" , s , &x );
if( s[ 0 ] == 'i' ) {
v = true;
printf( "%d\n" , install( 0 , x ) );
} else {
v = false;
L = _L[ x ] , R = _R[ x ];
printf( "%d\n" , query( root , 1 , n ) );
modify( root , 1 , n );
}
}
return 0;

-------------------------------------------------------------------------------------

第三题 : 寿司晚宴

完全不会..但是打表还能弄点分吧....暴力程序打个表然后就30分了...

-------------------------------------------------------------------------------------

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<cctype>
#include<cstdlib>
 
#define rep(i ,n) for(int i=0; i < n; ++i)
#define clr(x ,c) memset(x, c, sizeof(x))
 
using namespace std;
 
typedef long long ll;
 
const int maxn = 50;
ll ans[ maxn ];
 
int main(){
freopen("dinner.in", "r", stdin);
freopen("dinner.out", "w", stdout);
ans[ 2 ] = 3;
    ans[ 3 ] = 9;
    ans[ 4 ] = 21;
    ans[ 5 ] = 63;
    ans[ 6 ] = 111;
    ans[ 7 ] = 333;
    ans[ 8 ] = 693;
    ans[ 9 ] = 1521;
    ans[ 10 ] = 2577;
    ans[ 11 ] = 7731;
    ans[ 12 ] = 13491;
    ans[ 13 ] = 40473;
    ans[ 14 ] = 67833;
    ans[ 15 ] = 119241;
    ans[ 16 ] = 239481;
    ans[ 17 ] = 718443;
    ans[ 18 ] = 1340523;
    ans[ 19 ] = 4021569;
    ans[ 20 ] = 7494849;
    ans[ 21 ] = 13356657;
    ans[ 22 ] = 22271409;
    ans[ 23 ] = 66814227;
    ans[ 24 ] = 130266387;
    ans[ 25 ] = 268286823;
    ans[ 26 ] = 447212583;
    ans[ 27 ] = 896472063;
    ans[ 28 ] = 1684872063;
    ans[ 29 ] = 5054616189;
ll n , MOD;
cin >> n >> MOD;
    if( n < 30 ) cout << ans[ n ] % MOD << "\n";
    else cout << 1LL * rand() * rand() % MOD << "\n";
return 0;

-------------------------------------------------------------------------------------

后天还有day2...没玩过提答题 , 挺想玩的....

2015.7.17( NOI2015 day1 )的更多相关文章

  1. NOI2015 Day1

    NOI2015 Day1 程序自动分析 题目描述:给出等式或不等式\(n\)条,问\(n\)条式子是否成立. solution: 用并查集处理等式,在判断不等式是否成立. 时间复杂度:\(O(n)\) ...

  2. 关于asp.net执行exe程序时权限不够的解决办法(2015.04.17更新)

    一,本文背景 长话短说:asp.net项目中需要用到PDF转换成SWF文件,用户上传后自动调用pdf2swf.exe转换. 但有个问题,执行时权限不够,导致一直报错(滚动条一直在往下滚,刷屏中),见下 ...

  3. noi2015 day1 T2软件包管理器

    noi2015 软件包管理器 Description Linux用户和OSX用户一定对软件包管理器不会陌生.通过软件包管理器,你可以通过一行命令安装某一个软件包,然后软件包管理器会帮助你从软件源下载软 ...

  4. 2015 Noip提高组 Day1

    P2615 神奇的幻方 [题目描述] 幻方是一种很神奇的N*N矩阵:它由数字1,2,3,……,N*N构成,且每行.每列及两条对角线上的数字之和都相同. 当N为奇数时,我们可以通过以下方法构建一个幻方: ...

  5. SQL Server锁定【2015.12.17】

    锁定的体系分类   1.表级锁 保证数据在逻辑上的一致性. 包含:行级锁.分页锁.表.数据分页.LOB分页以及索引叶子级锁. 2.闩 保证数据在物理上的一致性,系统采用,比锁少耗资源,对用户不可见. ...

  6. iOS 学习笔记 五 (2015.03.17)使用storyBoard进行tableview的跳转

    方法一: 点击tableviewCell后,按住ctrl键拖拽至想要跳转的新的界面.这样跳转的结果是,点击tableview中的任何一行都会跳转到新的界面.可以通过控制cell的 属性 userInt ...

  7. NOIP 2015普及组复赛Day1 T1 == Codevs4510 神奇的幻方

    时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold  题目描述 Description: 幻方是一种很神奇的N∗N矩阵:它由数字 1,2,3, … … ,N∗N构成, ...

  8. 【.NetRemoting-2】2015.09.17

    [Remoting架构] [1]是.NetFramework的一个重要组成 [2]框架的两个重要特性 [A]基本实现[B]可扩展/可定制 [各个组成部分] [1][客户端,客户端应用程序域] [组成] ...

  9. Daily Scrumming* 2015.12.17(Day 9)

    一.团队scrum meeting照片 二.成员工作总结 姓名 任务ID 迁入记录 江昊 任务1077 https://github.com/buaaclubs-team/temp-front/com ...

随机推荐

  1. jQuery ajax在GBK编码下表单提交终极解决方案(非二次编码方法)(转)

    版权声明]:版权归作者所有,转载时请以超链接形式标明文章原始出处和作者信息及本声明:http://www.open-lib.com/Forum/Read_69_1.action 前言: 当jquery ...

  2. 【已解决】谁动了我的CurrentPrincipal?求助我在给Artech的wcf petshop增加授权机制的时候遇到的问题。

    这个问题已解决,是绑定设置的问题,主要还是因为我自己没有深入理解WCF绑定的安全机制.在这篇博客里面我来说说怎么解决的. 下载了Artech的wcf petshop源码(博文链接)并调试运行成功后,打 ...

  3. database schema

    数据中有4个Schema无法被删除 ● dbo, 具有db_owner或者db_ddl_admin 的用户,新创建对象默认schema就是dbo ● guest , 用来给guest 用户使用,这个s ...

  4. 界面调试工具Reveal的使用介绍

    Reveal 注: 此处介绍Reveal,其中大部分内容来自于唐巧的<iOS开发进阶>一书,以此说明. 如何使用Reveal进行模拟器调试,只需进行以下三个步骤即可. 1. 创建.lldb ...

  5. mysql-5.6.17-winx64 免安装 配置

    [client] default_character_set=utf8 port=3306 [mysql] # 设置mysql客户端默认字符集 default_character_set=utf8 [ ...

  6. QNetworkAccessManager跳转URL处理(使用QNetworkRequest::RedirectionTargetAttribute获得跳转URL)

    connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(onFinished(QNetworkReply*))); void Mai ...

  7. matrix67:kmp算法详解

    个人认为KMP是最没有必要讲的东西,因为这个东西网上能找到很多资料.但网上的讲法基本上都涉及到“移动(shift)”.“Next函数”等概念,这非常容易产生误解(至少一年半前我看这些资料学习KMP时就 ...

  8. hdu 1236 1.3.2排名

    排名 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission ...

  9. poj 2833 The Average(堆)

    题目链接:http://poj.org/problem?id=2833 思路分析:由于数据量较大,超出存储范围,使用不能使用数组存储数据在进行排序.考虑维护一个最大堆与最小堆,依次读取数据, 记录数据 ...

  10. iOS中正确的截屏姿势

    昨天写了个用到截屏功能的插件,结果问题不断,今天终于解决好了,把debug过程中所有尝试过的截屏方法都贴出来吧- 第一种 这是iOS 3时代开始就被使用的方法,它被废止于iOS 7.iOS的私有方法, ...