Noip 2011 Day 1 & Day 2
Day 1 >>>
T1 >>
水题一道 。
我们只需要 for 一遍 , 由于地毯是从下往上铺的 , 我们只需要记录该位置最上面的地毯的编号 , 每一次在当前地毯范围内就更新编号 , 最后的答案就是最后更新的编号。
#include<bits/stdc++.h>
using namespace std; struct node{
int xmin,ymin,xmax,ymax;
}a[]; int n,lenx,leny,xreq,yreq,ans=-; inline void read(int &x) {
int f=;x=;char c=getchar();
while(c>''||c<'') {if(c=='-') f=-;c=getchar();}
while(c>=''&&c<='') x=*x+c-,c=getchar();
x=x*f;
} int main(){ //freopen("carpet.in","r",stdin);
//freopen("carpet.out","w",stdout); read(n);
for(int i=;i<=n;i++){
read(a[i].xmin);read(a[i].ymin);read(lenx);read(leny);
a[i].xmax=a[i].xmin+lenx;
a[i].ymax=a[i].ymin+leny;
}
read(xreq);read(yreq);
for(int i=;i<=n;i++)
if((xreq>=a[i].xmin && xreq<=a[i].xmax) && (yreq>=a[i].ymin && yreq<=a[i].ymax))
ans=i;
printf("%d",ans);
return ;
}
Day1 T1
T2 >>
QwQ , 最开始想写线段树的 :
对于每两个相同颜色的旅馆 X 和 Y , 咱们可以维护一个线段树 , 或者 ST 表 , 用 logN 的时间内找出 X 到 Y 之间的最小值小于等于 P 即可。
但是必要的枚举 N 个起点 , K 种颜色 ,负责度已经达到了 10^7 了 ,在乘上 logn ,一定超时 , 我们必须要考虑优化:
由于从某一个 i 旅馆开始向后枚举 , 或许会找到一段区间 [ i , j ] 满足题目要求 , 那么这之后的所有 [ i , j + 1 ~ N ],一定满足要求;这样就可
以做到不比枚举所有区间的优化。
这是评测之后想出来的优化 , 很后悔 , 自己之前的优化不是很好 , 没有优化太多;
一开始收上去 , 然而在 Cena 上 T 掉了 , 最后发现可以优化 , 只是我的优化办法太 low 了 , 完全是劣化 !
看看优化以后的代码:
#include<bits/stdc++.h> #define RG register const int N=+,K=+; using namespace std; int color[K][N],vmin[N<<],cost[N];
int k,n,p,cc,tmp,tmp1,tmp2;
long long ans;
bool ok; int minx(int a,int b){
return a < b ? a : b ;
} void update(int o){
vmin[o]=minx(vmin[o<<],vmin[o<<|]);
} void build(int o,int l,int r){
if(l==r){
vmin[o]=cost[l];
return ;
}
int mid=(l+r)>>;
build(o<<,l,mid);
build(o<<|,mid+,r);
update(o);
} int query(int o,int l,int r,const int L,const int R){
if(L<=l && r<=R)
return vmin[o];
int mid=(l+r)>>,cnt=0x7fffffff;
if(L<=mid) cnt=minx(cnt,query(o<<,l,mid,L,R));
if(R>mid) cnt=minx(cnt,query(o<<|,mid+,r,L,R));
return cnt;
} inline void read(int &x) {
int f=;x=;char c=getchar();
while(c>''||c<'') {if(c=='-') f=-;c=getchar();}
while(c>=''&&c<='') x=*x+c-,c=getchar();
x=x*f;
} int main(){
//freopen("hotel.in","r",stdin);
//freopen("hotel.out","w",stdout); read(n);read(k);read(p);
for(int i=;i<=n;i++){
read(cc);read(cost[i]);
color[cc][++color[cc][]]=i;
} build(,,n); for(int i=;i<k;i++)
for(int j=;j<color[i][];j++){
tmp1=color[i][j];
for(int q=j+;q<=color[i][];q++){
tmp2=color[i][q];
if(query(,,n,tmp1,tmp2)<=p){
ans+=color[i][]-q+;
break;
}
}
} printf("%lld",ans);
return ;
}
Day1 T2
Ps : 本题目还可以用DP ;
T3 >>
大模拟!
第一次第一次看到这题目是几个月前 , 然而做不来 , 测试的时候慌了 —— 以为也没写出来 。
冷静想了一下就是一个 Dfs !我就快写出来了 , 就是卡在了消除方块和方块下落的函数上。
原来想的是消除操作又需要用 Dfs , 去寻找横纵相连的方块 , 然而死活想不出来怎么判断该方块是否应该删除 , 所以就没有写出来……
然而事实上消除操作跟根本不用 Dfs , 直接用数组判断三个连续的就打标记 , 消除一次再下落一次 。
但是没有完 ,由于下落的方块或许又将组成一个新的可消除的图 , 我们必须一直 消除 + 下落 一直到不可消除为止!
伪代码:
while(消除成立) Do 下落 ;
消除时需要用另一个零时数组记录某一个点是否会被删除 , 而不能见三个删三个 , 因为有可能三个方块在原数组的消失会导致后面方块的漏删 , 所以应当打标记 , 最后再改变游戏界面的原数组 。
还有一个需要注意的地方 , 一开始我是用被交换的点坐标作为函数传递成员的 , 然而用一个 5 * 7 的二维数组去存储当前游戏局面 , 每一次操作得到新的局面后 , 进行判断是否已经完成游戏 , 并且步数规定 , 再存储一个坐标数组 , 记录每次交换的方块作为输出就好了 。
#include<bits/stdc++.h> using namespace std; int ans[][];
int n,x; struct node{
int game[][];
}
ori,tmp1,tmp2; bool delet(){
node tmpd;
bool ok=false;
for(int i=;i<=;i++)
for(int j=;j<=;j++)
tmpd.game[i][j]=; for(int i=;i<=;i++)
for(int j=;j<=;j++)
if(ori.game[i][j]> && ori.game[i][j]==ori.game[i+][j] && ori.game[i+][j]==ori.game[i+][j])
tmpd.game[i][j]=tmpd.game[i+][j]=tmpd.game[i+][j]=; for(int i=;i<=;i++)
for(int j=;j<=;j++)
if(ori.game[i][j]> && ori.game[i][j]==ori.game[i][j+] && ori.game[i][j+]==ori.game[i][j+])
tmpd.game[i][j]=tmpd.game[i][j+]=tmpd.game[i][j+]=; for(int i=;i<=;i++)
for(int j=;j<=;j++)
if(tmpd.game[i][j]){
ori.game[i][j]=;
ok=true;
}
return ok;
} void down()
{
for(int i=;i<=;i++)
for(int j=;j<=;j++)
if(ori.game[i][j]>){
int k=j-;
while(k> && ori.game[i][k]==){
ori.game[i][k]=ori.game[i][k+];
ori.game[i][k+]=;
k--;
}
}
for (int i=;i<=;i++){
ori.game[i][]=;
for(int j=;j<=;j++)
if (ori.game[i][j]) ori.game[i][]++;
else break;
}
} void maintain(){
down();
while(delet())
down();
} void swapx(int &a,int &b){
a^=b^=a^=b;
} void dfs(int stp){
node tmpx=ori; if(stp==n+){
for(int i=;i<=;i++)
if(ori.game[i][])
return ;
for(int i=;i<=n;i++)
printf("%d %d %d\n",ans[i][]-,ans[i][]-,ans[i][]);
exit();
} for(int i=;i<=;i++)
for(int j=;j<=ori.game[i][];j++){
if(i<){
swapx(ori.game[i][j],ori.game[i+][j]);
maintain();
ans[stp][]=i;
ans[stp][]=j;
ans[stp][]=;
dfs(stp+);
ori=tmpx;
}
//right
if(i> && ! ori.game[i-][j]){
swapx(ori.game[i][j],ori.game[i-][j]);
maintain();
ans[stp][]=i;
ans[stp][]=j;
ans[stp][]=-;
dfs(stp+);
ori=tmpx;
}
//left
}
} int main(){
ios::sync_with_stdio(false); // freopen("mayan.in","r",stdin);
// freopen("mayan.out","w",stdout); cin>>n; for(int i=;i<=;i++){
while(){
cin>>x;
if(!x) break;
ori.game[i][++ori.game[i][]]=x;
}
}
dfs();
printf("-1");
return ;
}
Day1 T3
Day 2 >>>
T1 >>
数论到了 Day2 , 可以的 ;
推一下:
最后的系数是:dx * ( a^n ) * ( b ^ n ) ;
而 dx 就是简单的杨辉三角上 k+1 行 m+1 列的系数 , 直接递推 , O (n * m)预处理 + 对 a , b 进行快速幂 (虽然完全没有必要) ;
但是递推杨辉三角的时候写的递归 , 真垃圾 , 我居然忘了些记忆化 ! 然后 T 得圆圆满满 !
好吧QwQ , 看代码 (前方高能 , 代码风格从 4 月份省选后陡变 —— 空格取消后摇):
#include <cstdio> const int mod = , N = + ; long long x [ N ] [ N ] ; int fast ( int a , int n ) {
int s = ;
while( n ) {
if ( n & )
s = ( s * a ) % mod;
a = ( a * a ) % mod;
n = n >> ;
}
return s ;
} long long work ( int a , int b ) {
for ( int i = ; i <= a ; i ++ ) {
x [ i ] [ ] = ;
for ( int j = ; j < i ; j ++ )
x [ i ] [ j ] = ( x [ i - ] [ j - ] % mod + x [ i - ] [ j ] % mod ) % mod ;
x [ i ] [ i ] = ;
}
return x [ a ] [ b ] % mod ;
} int main(){ int a , b , k , m , n ;
scanf ( "%d%d%d%d%d" , & a , & b , & k , & m , & n ) ;
a %= mod ;
b %= mod ;
int ans = ( ( work ( k + , m + ) % mod ) * ( fast ( a , m ) % mod ) % mod * fast ( b , n ) ) % mod ;
printf( "%d" , ans % mod);
return ;
}
Day2 T1
T2 >>
这题 …… 我又用了线段树 , 然而 T 了 10 个点 , 我算了一下复杂度 , 天 , M * log^2 N , 大约是 5 . 74 * 10^7 刚好被卡 , 而且线段树均摊玄学 , 所以 T 是理所当然的 ;
在自己的 Cena 上面测试了一下 , 将时限调成了 10000s , 发现在第 17 个点居然用了 82 . 91 秒!看来线段树真的玄学 ;
这道题很明显是二分答案的 , 在 [ 1 , Max_weight + 1 ] 进行二分 ;(为什么 Max_weight 要 +1,先挖个坑)
再解读一下题意 , 我们要求得对于 M 个区间 , 定义 Yi 等于在 第 i 个区间中获得的检查值 , 其值等于 num *(total_value), 其中 num 为满足该区间中 Wj >= W 的元素的个数 , total_value 表示这些元素的 v值总和 ;
可是为什么我要用线段树呢?其实为了找到某一个区间符合题目要求 , 可以用线段树记录最小值最大值 , 那么:
定义结构体 (伪代码)Node(num , value), 存储 某一个区间得到的 v值 以及 个数
如果:最大值比 W 小 , 那么返回一个 (0 ,0 ), 表示这个区间没有一个元素满足大于 W 的条件;
否则:
1、 如果最小值比 W 小 , 那么二分寻找连续的区间 , 直到找到满足条件的连续区间为止,然后此时,执行 3 ;
2、 如果最小值比 W 大 , 且如果当前所分区间不被所需要的区间完全覆盖:那么继续二分区间直到寻找到连续且被包含的区间为止,执行 3(o 表示在线段树上的节点编号);否则直接执行 4 ;
3、 返回:(左区间 . num + 右区间 . num , 左区间 . value + 右区间 . value);
4、 返回:(r - l + 1 即区间长度,sum [ o ] );
这是原来的方法, 可惜找不到源代码了;
漏洞在于如果每连续3个物品的重量呈 高-低-高 或者 低-高-低 , 复杂度近似 O ( n ) ;难怪被卡 ;
其实正确的做法只需要将线段树的查询替换成for一遍记录前缀和就行了:
对于整个区间 N for一遍, 求出所有满足重量 大于 W 的 物品 value 的前缀和 , 以及满足前面条件的物品的 个数 的前缀和 ; 如果不满足 , 那么前缀和就和 它的前一项相等;最后再 for 一遍 M 求出各个区间的 Yi ——
long long work ( int W ) { long long cntx = ; for ( int i = ; i <= n ; i ++ )
if ( wg [ i ] >= W )
sum [ i ] = sum [ i - ] + vl [ i ] , num [ i ] = num [ i - ] + ;
else
sum [ i ] = sum [ i - ] , num [ i ] = num [ i - ] ; for ( int i = ; i <= m ; i ++ )
cntx += ( num [ rg [ i ] ] - num [ lf [ i ] - ] ) * ( sum [ rg [ i ] ] - sum [ lf [ i ] - ] ) ; return cntx ; }
前缀和 以及 Yi
W 为二分的 mid , 二分原则是:
求出work()得到的ans , 这是这一次可以得到的 质监值 Y , 那么如果 Y 比 S 大 , 那么二分右区间 , 意义是将产品标准 W 提高来减小 Y 的值;反之同理 , 二分左区间以升高 Y 的值 ;
最后会有 左边的最优 Y 和右边的最优 Y,两者取 min 即可 ;
记得前面挖的坑吗?这是因为:有可能当 W 为 Max_weight 时就是最优解 , 那么二分的时候就不会分到 Max_weight,因为最大的 mid 是 Max_weight - 1;((Max_weight -(Max_weight - 1)) / 2 = Max_weight - 1 ;(注意是整除))
看代码:
#include <cstdio> const int N = + ;
const long long inf = 1e18 ; long long sum [ N ] , num [ N ] , S , wg [ N ] , vl [ N ] , maxwg , ans , ans1 = inf , ans2 = inf , all = inf ;
int lf [ N ] , rg [ N ] , n , m , l , r ; long long minx ( long long a , long long b ) {
return a < b ? a : b ;
} long long maxx ( long long a , long long b ) {
return a > b ? a : b ;
} long long absx ( long long a ) {
return a < ? - a : a ;
} long long work ( int W ) { long long cntx = ; for ( int i = ; i <= n ; i ++ )
if ( wg [ i ] >= W )
sum [ i ] = sum [ i - ] + vl [ i ] , num [ i ] = num [ i - ] + ;
else
sum [ i ] = sum [ i - ] , num [ i ] = num [ i - ] ; for ( int i = ; i <= m ; i ++ )
cntx += ( num [ rg [ i ] ] - num [ lf [ i ] - ] ) * ( sum [ rg [ i ] ] - sum [ lf [ i ] - ] ) ; return cntx ; } int main ( ) { scanf ( "%d%d%lld" , & n , & m , & S ) ; for ( int i = ; i <= n ; i ++ ) {
scanf ( "%lld%lld" , & wg [ i ] , & vl [ i ] ) ;
maxwg = maxx ( maxwg , wg [ i ] ) ;
}
for ( int i = ; i <= m ; i ++ )
scanf ( "%d%d" , & lf [ i ] , & rg [ i ] ) ;
l = ; r = maxwg + ;
while ( l < r ) {
int mid = l + r >> ;
ans = work ( mid ) ;
if ( ans > S ) ans1 = ans , l = mid + ;
else ans2 = ans , r = mid ;
} all = minx ( absx ( S - ans1 ) , absx ( S - ans2 ) ) ; printf ( "%lld" , all ) ; return ;
}
Day2 T2
T3 >>
一开始以为是贪心,就是对于需要加速的地方尽量多的加速,但是需要加速的地方就是经过人最多的地方吗?
不是的,试想一下:对于某一个景点来说,如果公交车到达它的时间比人到的时间要早,那么再怎么对之前的路段加速还是会导致在这个景点滞留到同样的时间才能再次出发;相反,对于公交车到达的时间比该景点最迟到达的乘客要晚,那么就可以通过加速之前的某一段使时间变短 。
所以需要加速的路段一定是该公交车到达的时间比景点最迟到达的乘客要晚的路段;再想一下,对于这种路段可能存在很多种,我们可以记录一个 nxt [ i ] 数组,它的意义在于从 i + 1 站开始到 nxt [ i ] - 1 这一段可以通过加速使得时间减小;那么如何选择加速一段使减小的时间更多呢?
可以这样想,假设两种加速可以使某两段分别收益,并且受益人群一定为从 某点 i 出发然后到 nxt [ 某点 i ] 这个区间中的所有要下车的人(因为不再这个区间下车的人可能会在后面被卡住,因此无法收益);那么通过在 X 段加速减小的时间更多的条件是从 X 的首点 出发然后到 nxt [ X 首点 ] 这个区间中的所有要下车的人 比 Y 段的从 Y 的首点 出发然后到 nxt [ Y 首点 ] 这个区间中的所有要下车的人更多 。我们可以通过前缀和实现:
for ( int i = ; i <= m ; i ++ ) {
scanf ( "%d%d%d" , & T [ i ] , & A [ i ] , & B [ i ] ) ;
lst [ A [ i ] ] = maxx ( lst [ A [ i ] ] , T [ i ] ) ;
sum [ B [ i ] ] ++ ;
}
for ( int i = ; i <= n ; i ++ )
sum [ i ] += sum [ i - ] ; |
|
|
|
\ / for ( int i = low + ; i < n ; i ++ )
if ( D [ i ] && sum [ nxt [ low ] ] - sum [ low ] < sum [ nxt [ i ] ] - sum [ i ] )
low = i ;
实现前缀和
low 用来寻找到底加速哪一段更优,并且保证 Di 大于 0;它的默认值是第一个 Di 大于 0 的位置 。
找出了需要删除的段 [ low + 1 , nxt [ low ] - 1 ] 之后,我们可以贪心的减小氮气的使用量,也就是给后面尽量多的氮气,并且保证这次加速能够让哪怕一个人的时间减小。
delta = inf ; for ( int i = low + ; i <= nxt [ low ] - ; i ++ )
delta = minx ( delta , arv [ i ] - lst [ i ] ) ;
选出最小的加速量
由于加速之后的局面可能存在比整段一起加速更优的情况,所以这次删除的量是最小的汽车到达时间和乘客到达时间的时间差 。
看代码:
#include <cstdio> const int N = + ;
const long long inf = 1e18 ; long long sum [ N ] , ans , low , delta , lst [ N ] , nxt [ N ] , arv [ N ] ;
int n , m , k , T [ N ] , D [ N ] , A [ N ] , B [ N ] ; long long maxx ( long long a , long long b ) {
return a > b ? a : b ;
} long long minx ( long long a , long long b ) {
return a < b ? a : b ;
} int main ( ) { scanf ( "%d%d%d" , & n , & m , & k ) ; for ( int i = ; i < n ; i ++ ) scanf ( "%d" , & D [ i ] ) ; for ( int i = ; i <= m ; i ++ ) {
scanf ( "%d%d%d" , & T [ i ] , & A [ i ] , & B [ i ] ) ;
lst [ A [ i ] ] = maxx ( lst [ A [ i ] ] , T [ i ] ) ;
sum [ B [ i ] ] ++ ;
}
for ( int i = ; i <= n ; i ++ )
sum [ i ] += sum [ i - ] ; while ( ) {
low = ;
arv [ ] = ;
for ( int i = ; i <= n ; i ++ )
arv [ i ] = maxx ( lst [ i - ] , arv [ i - ] ) + D [ i - ] ; // D [ i -1 ] 惨痛教训
nxt [ n ] = n ;
for ( int i = n - ; i >= ; i -- ) {
nxt [ i ] = nxt [ i + ] ;
if ( arv [ i + ] <= lst [ i + ] ) // 惨痛教训! i+1 !
nxt [ i ] = i + ;// if it dosen't fit the condition , then change the most valuable place to i+1 , which can not be benifit from th nitro speed up
} low = ;
while ( ( ! D [ low ] ) && low < n )
low ++ ; if ( low == n || ! k )
break ; for ( int i = low + ; i < n ; i ++ )
if ( D [ i ] && sum [ nxt [ low ] ] - sum [ low ] < sum [ nxt [ i ] ] - sum [ i ] )
low = i ; if ( sum [ nxt [ low ] ] - sum [ low ] == )
break ; delta = inf ; for ( int i = low + ; i <= nxt [ low ] - ; i ++ )
delta = minx ( delta , arv [ i ] - lst [ i ] ) ; delta = minx ( delta , k ) ;
delta = minx ( delta , D [ low ] ) ;
k -= delta ;
D [ low ] -= delta ;
} for ( int i = ; i <= m ; i ++ )
ans += arv [ B [ i ] ] - T [ i ] ; printf ( "%lld" , ans ) ; return ;
}
Day2 T3
这就是 2011 的 Noip;
Noip 2011 Day 1 & Day 2的更多相关文章
- NOIP 2011 Day 1
NOIP 2011 Day 1 tags: NOIP 搜索 categories: 信息学竞赛 总结 铺地毯 选择客栈 Mayan游戏 铺地毯 Solution 因为只会询问一个点被谁覆盖, 而且后面 ...
- 【NOIP 2011】 观光公交
题目描述 Description 风景迷人的小城 Y 市,拥有n 个美丽的景点.由于慕名而来的游客越来越多,Y 市特意安排了一辆观光公交车,为游客提供更便捷的交通服务.观光公交车在第0 分钟出现在1号 ...
- NOIP 2011 Day2
tags: 贪心 模拟 NOIP categories: 信息学竞赛 总结 计算系数 Solution 根据二项式定理, \[ \begin{align} (a+b)^n=\sum_{k=0}^nC_ ...
- NOIp 2011 mayan游戏 搜索
题目描述 Mayan puzzle是最近流行起来的一个游戏.游戏界面是一个 7 行5 列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即方块必须放在最下面一行,或者放在其他方块之上.游戏通关是指在规定 ...
- NOIP 2011 Day 1 部分题解 (Prob#1 and Prob#2)
Problem 1: 铺地毯 乍一看吓cry,地毯覆盖...好像是2-dims 线段树,刚开头就这么难,再一看,只要求求出一个点,果断水题,模拟即可.(注意从标号大的往小的枚举,只要有一块地毯符合要求 ...
- NOIP 2011 提高组 计算系数
有二项式定理 `\left( a+b\right) ^{n}=\sum _{r=0}^{n}\left( \begin{matrix} n\\ r\end{matrix} \right) a^{n-r ...
- [NOIP 2011]聪明的质监员
聪明的质监员 题目 小 T 是一名质量监督员,最近负责检验一批矿产的质量.这批矿产共有n个矿石,从 1 到n逐一编号,每个矿石都有自己的重量wi以及价值vi.检验矿产的流程是: 1. 给定 m个区间[ ...
- [NOIp 2011]Mayan游戏
Description Mayan puzzle是最近流行起来的一个游戏.游戏界面是一个 7 行5 列的棋盘,上面堆放着一些方块,方块不能悬空堆放,即方块必须放在最下面一行,或者放在其他方块之上.游戏 ...
- NOIP 2011 观光公交
题目描述 风景迷人的小城Y 市,拥有n 个美丽的景点.由于慕名而来的游客越来越多,Y 市特意安排了一辆观光公交车,为游客提供更便捷的交通服务.观光公交车在第 0 分钟出现在 1号景点,随后依次前往 2 ...
随机推荐
- zend studio 破解、汉化和字体颜色及快捷键相关设置
下载:http://www.geekso.com/component/zendstudio-downloads/ 破解:http://www.geekso.com/ZendStudio9-key/ 注 ...
- ListView实现分页加载(一)制作Demo
一.什么是分页加载 在下面的文章中,我们来讲解LitView分页加载的实现.什么是分页加载呢?我们先看几张效果图吧,如下: ...
- 在UML系统开发中有三个主要的模型
http://www.cnblogs.com/Yogurshine/archive/2013/01/14/2859248.html 在UML系统开发中有三个主要的模型: 功能模型: 从用户的角度展示系 ...
- [USACO07DEC]Sightseeing Cows
嘟嘟嘟 这题好像属于01分数规划问题,叫什么最优比率生成环. 题目概括一下,就是求一个环,满足∑v[i] / ∑c[i]最大. 我们可以堆上面的式子变个型:令 x = ∑v[i] / ∑c[i],则x ...
- textarea使换行变顿号
window.onload = function(){ document.getElementById('area').addEventListener('keydown',function(e){ ...
- php无极限分类函数
/** * [make_tree description] * @Author Lerko * @DateTime 2017-04-01T14:57:24+0800 * @param [type] $ ...
- 使用Timer组件_实现定时更改窗体颜色
1 向窗体拖入Timer组件 2 更改其Enable属性为true 3 其interval属性为300 4 在Tick事件中写入随机变色代码 private void timer1_Tick(obje ...
- 微信小程序开发工具快捷键
格式调整 //保存文件 Ctrl+S //代码行缩进 Ctrl+[, Ctrl+] //折叠打开代码块 Ctrl+Shift+[, Ctrl+Shift+] //复制粘贴,如果没有选中任何文字则复制粘 ...
- C#通过指针读取文件
// readfile.cs // 编译时使用:/unsafe // 参数:readfile.txt // C#通过指针读取文件.使用该程序读并显示文本文件. using System; using ...
- hdu 1010(迷宫搜索,奇偶剪枝)
传送门: http://acm.hdu.edu.cn/showproblem.php?pid=1010 Tempter of the Bone Time Limit: 2000/1000 MS (Ja ...