首页 > 代码库 > 20160827考试总结

20160827考试总结

这次试题预期是NOIp提高难度的,除去T0没写外其他感觉还可以,不写T0一个原因是想按照NOIp的考试模式来,不打乱节奏,另一个是第一题不是一眼题,感觉需要时间思考。所以就只写了其他三道题。

T1:

之前考过的一道题,去年这个时候写了个复杂度爆炸的,这次换了个讨巧的写法,比较满意。没什么好说的。

技术分享
 1 //NOIp car 2 //by Cydiater 3 //2016.8.27 4 #include <iostream> 5 #include <cstring> 6 #include <string> 7 #include <cstdio> 8 #include <cstdlib> 9 #include <iomanip>10 #include <ctime>11 #include <algorithm>12 #include <queue>13 #include <cmath>14 #include <string>15 using namespace std;16 #define ll long long17 #define up(i,j,n)       for(int i=j;i<=n;i++)18 #define down(i,j,n)     for(int i=j;i>=n;i--)19 #define FILE "car"20 const int MAXN=1e5;21 const int oo=0x3f3f3f3f;22 inline int read(){23       char ch=getchar();int x=0,f=1;24       while(ch>9||ch<0){if(ch==-)f=-1;ch=getchar();}25       while(ch>=0&&ch<=9){x=x*10+ch-0;ch=getchar();}26       return x*f;27 }28 int N,M,D,L,sp[MAXN],cnt=0,count[MAXN],num,ans=0;29 priority_queue<int>q;30 namespace solution{31       void init(){32             N=read();M=read();D=read();L=read();33             up(i,1,N)sp[i]=read();34             sort(sp+1,sp+N+1);35       }36       void slove(){37             up(i,1,M)q.push(0);38             up(i,1,N){39                   int num=q.top();q.pop();40                   num=-num;41                   if(sp[i]-num>=L){42                         num+=D;43                         ans++;44                   }45                   num=-num;46                   q.push(num);47             }48       }49       void output(){50             cout<<ans<<endl;51       }52 }53 int main(){54       //freopen("input.in","r",stdin);55       freopen(FILE".in","r",stdin);56       freopen(FILE".out","w",stdout);57       using namespace solution;58       init();59       slove();60       output();61       return 0;62 }
View Code

T2:

整场考试最失败的一道题,不是因为没写出来,是因为我已经很明显的知道这道题的策略是什么了,但是最后还是因为忽略了一些情况导致WA掉了,放在T2这道贪心其实还是简单了点。这类题在NOIp的考场上似乎已经很少见了。

技术分享
 1 //NOIp 0827 T3 2 //by Cydiater 3 //2016.8.27 4 #include <iostream> 5 #include <cstring> 6 #include <ctime> 7 #include <cmath> 8 #include <cstdlib> 9 #include <cstring>10 #include <string>11 #include <algorithm>12 #include <queue>13 #include <map>14 #include <iomanip>15 using namespace std;16 #define ll long long17 #define up(i,j,n)       for(int i=j;i<=n;i++)18 #define down(i,j,n)     for(int i=j;i>=n;i--)19 #define FILE "sort"20 const int MAXN=1e5+5;21 const int oo=0x3f3f3f3f;22 inline int read(){23       char ch=getchar();int x=0,f=1;24       while(ch>9||ch<0){if(ch==-)f=-1;ch=getchar();}25       while(ch>=0&&ch<=9){x=x*10+ch-0;ch=getchar();}26       return x*f;27 }28 map<int,int>m;29 int N,a[MAXN],tmp[MAXN],cnt=0,ans=0,Count[MAXN];30 namespace solution{31       void init(){32             N=read();33             up(i,1,N){34                   a[i]=read();35                   tmp[i]=a[i];36             }37             memset(Count,0,sizeof(Count));38             sort(tmp+1,tmp+N+1);39             up(i,1,N)m[tmp[i]]=++cnt;40             up(i,1,N)a[i]=m[a[i]];41       }42       void slove(){43             up(i,1,N){44                   Count[a[i]]=Count[a[i]-1]+1;45                   ans=max(ans,Count[a[i]]);46             }47       }48       void output(){49             cout<<N-ans<<endl;50       }51 }52 int main(){53       //freopen("input.in","r",stdin);54       freopen(FILE".in","r",stdin);55       freopen(FILE".out","w",stdout);56       using namespace solution;57       init();58       slove();59       output();60       return 0;61 }
View Code

T3:

相同类型的题做过无数遍了,虽然考场上A掉了,但是后来查了一下代码发现其实有些问题考虑的太多了,本质上还是没有多加思考。myy的格言

Think twice,code once

在比赛的时候一些题还是要多想想再去实现,可以避免掉很多的错误。

 

技术分享
  1 //NOIp 0827 T4  2 //by Cydiater  3 //2016.8.27  4 #include <iostream>  5 #include <cstring>  6 #include <string>  7 #include <algorithm>  8 #include <queue>  9 #include <map> 10 #include <ctime> 11 #include <cmath> 12 #include <iomanip> 13 #include <cstdlib> 14 #include <cstdio> 15 using namespace std; 16 #define ll long long 17 #define up(i,j,n)       for(int i=j;i<=n;i++) 18 #define down(i,j,n)     for(int i=j;i>=n;i--) 19 #define FILE "salenet" 20 const int MAXN=1e5+5;; 21 const int oo=0x3f3f3f3f; 22 inline int read(){ 23       char ch=getchar();int x=0,f=1; 24       while(ch>9||ch<0){if(ch==-)f=-1;ch=getchar();} 25       while(ch>=0&&ch<=9){x=x*10+ch-0;ch=getchar();} 26       return x*f; 27 } 28 int N,P,M,LINK[MAXN],len=0,V[MAXN],Value[MAXN],dfn[MAXN],low[MAXN],stack[MAXN],top=0,dfs_clock=0,group[MAXN],group_num=0,Link[MAXN],LEN=0,du[MAXN],q[MAXN],head,tail,final_du[MAXN],ans=0; 29 bool vis[MAXN]; 30 struct edge{ 31       int x,y,next; 32 }e[MAXN],E[MAXN]; 33 namespace solution{ 34       inline void insert(int x,int y){e[++len].next=LINK[x];LINK[x]=len;e[len].y=y;e[len].x=x;} 35       inline void Insert(int x,int y){E[++LEN].next=Link[x];Link[x]=LEN;E[LEN].y=y;E[LEN].x=x;} 36       void init(){ 37             N=read();P=read(); 38             up(i,1,N)Value[i]=V[i]=oo; 39             up(i,1,P){ 40                   int node=read(); 41                   V[node]=read(); 42             } 43             M=read(); 44             up(i,1,M){ 45                   int x=read(),y=read(); 46                   insert(x,y); 47             } 48       } 49       void tarjan(int node){ 50             vis[node]=1;stack[++top]=node; 51             low[node]=dfn[node]=++dfs_clock; 52             for(int i=LINK[node];i;i=e[i].next) 53                   if(!dfn[e[i].y]){ 54                         tarjan(e[i].y); 55                         low[node]=min(low[node],low[e[i].y]); 56                   }else if(vis[e[i].y]) low[node]=min(low[node],dfn[e[i].y]); 57             if(dfn[node]==low[node]){ 58                   group_num++;int tmp; 59                   do{ 60                         tmp=stack[top--]; 61                         vis[tmp]=0; 62                         group[tmp]=group_num; 63                         Value[group_num]=min(Value[group_num],V[tmp]); 64                   }while(tmp!=node); 65             } 66       } 67       void Tree_DP(){ 68             head=1;tail=0; 69             up(i,1,group_num)if(du[i]==0)q[++tail]=i; 70             for(;head<=tail;head++){ 71                   int node=q[head],tmp=0; 72                   bool flag=0; 73                   for(int i=Link[node];i;i=E[i].next) 74                         if(du[E[i].y]==0){tmp+=Value[E[i].y];flag=1;} 75                         else if(--du[E[i].y]==0){ 76                               q[++tail]=E[i].y; 77                         } 78                   if(Value[node]==oo||!flag)continue; 79                   Value[node]=min(Value[node],tmp); 80             } 81       } 82       void slove(){ 83             //pre build 84             memset(dfn,0,sizeof(dfn)); 85             memset(vis,0,sizeof(vis)); 86             memset(du,0,sizeof(du)); 87             memset(final_du,0,sizeof(final_du)); 88             up(i,1,N)if(!dfn[i])tarjan(i); 89             up(i,1,len){ 90                   int x=e[i].x,y=e[i].y; 91                   if(group[x]!=group[y]){ 92                         Insert(group[x],group[y]); 93                         final_du[group[y]]++;du[group[x]]++; 94                   } 95             } 96             Tree_DP();/*work for lowest cost*/ 97       } 98       void output(){ 99             up(i,1,N)if(final_du[group[i]]==0&&Value[group[i]]>=oo){100                   puts("NO");101                   cout<<i<<endl;102                   return;103             }104             up(i,1,group_num)if(final_du[i]==0)ans+=Value[i];105             puts("YES");106             cout<<ans<<endl;107       }108 }109 int main(){110       freopen(FILE".in","r",stdin);111       freopen(FILE".out","w",stdout);112       //freopen("input.in","r",stdin);113       using namespace solution;114       init();115       slove();116       output();117       return 0;118 }
View Code

 

我的目标在我当前的实力之上,而我会时不时出现实力以内的失误,这是很可怕的。考试的节奏现在已经控制的差不多了,我还需要投入更多的时间在自身能力上。一切以失误为失败的借口都是实力不够的虚荣心作祟。

20160827考试总结