NOIP 2017普及グループ試験後のまとめ
8020 ワード
***
春節が過ぎたばかりの頃、金鶏の羽が2017年の青空の下で舞うことを祈ったのを覚えています.いくら計算しても、数日も経たないうちに新しい年になる.11月中旬、NOIPは秋の黄金色を騒がせた.
エラー解析
叙述する前に,まずまじめなことをしなさい.
(1)score
a,b,cに対してscore=20%a+30%b+50%cがあり、a,b,cが整数であることを保証する公式を与える.
最初はdoubleのために慌てて、10数を見て笑って、書き始めました.
freopen("score.in","r",stdin);
freopen("score.out","w",stdout);
scanf("%d%d%d",&Home,&Exam,&Test);
gread=Home/5+Exam*3/10+Test/2;
printf("%d",gread);
第1題の点数はfreopenが間違っていない限り、間違っていなくても難しい.
(2)librarian
いくつかの図書番号を与え、要求された図書番号(複数ある)を入力し、その図書番号の末尾にあるすべての図書を探し出し、最小値をとる.
一見、水題(実際にも)、直接暴力枚、試験が終わってパニックになった--intで書いた!!先頭0!!しかし、テストデータにはリーダー0がいません.データをありがとうございました.
freopen("librarian.in","r",stdin);
freopen("librarian.out","w",stdout);
int n,p;
scanf("%d%d",&n,&p);
for(int i=1;i<=n;i++)
scanf("%d",&books[i]);
for(int i=1;i<=p;i++)
{
int Len,Pick,Min=10000001;
bool flag=0;
scanf("%d%d",&Len,&Pick);
int Mod=pow(10,Len);
for(int j=1;j<=n;j++)
if(books[j]%Mod==Pick&&books[j]1;
}
if(!flag)
printf("-1
");
else
printf("%d
",Min);
}
この問題は、ループ処理で、最大値を探して、普通は問題ありません.
(3)chess
中には3色の格子(赤、黄、白(白は直接歩けない))が入っています.異なる色の格子を通過する代価は異なる.2つの格子の色が同じなら、金貨を使う必要はありません.違うなら、金貨を1つ使う必要があります.2つの金貨を使って魔法をかけて、次の無色の格子を一時的に指定した色に変えます.つまり、この魔法を使って、この一時的に色のある格子に着いたら、魔法を使い続けることはできません.あなたが離れたときだけこの位置は、もともと色のある格子に着いたときに、この魔法を使い続けることができますが、この位置を離れたとき(魔法をかけて色のある格子にする)、この格子は無色に戻ります.
この问题は私のパニックの始まりで、见てみると:深く探しますか.....考えてみれば、深く探して、私はできませんか、スキップしました....試験が終わったら、いいですね.
void dfs(int x,int y,int c,int flag,int p)
{
if(f[x][y][c]==-1||f[x][y][c]>p)
f[x][y][c]=p;
else return ;
if(x==m&&y==m) return ;
for(int i=0;i<4;i++)
{
int x1=x+dir[i][0],y1=y+dir[i][1];
if(x1>0&&y1>0&&x1<=m&&y1<=m)
{
if(A[x1][y1]+c==3)
dfs(x1,y1,3-c,0,p+1);
if(A[x1][y1]==c)
dfs(x1,y1,c,0,p);
else
if(!flag)
dfs(x1,y1,c,1,p+2);
}
}
}
int ans=0x3f3f3f3f;
scanf("%d%d",&m,&n);
memset(f,-1,sizeof(f));
for(int i=1;i<=n;i++)
{
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
A[a][b]=c+1;
}
dfs(1,1,A[1][1],0,0);
for(int i=1;i<=2;i++)
if(f[m][m][i]!=-1)
ans=min(ans,f[m][m][i]);
if(ans==0x3f3f3f3f) puts("-1");
else printf("%d",ans);
記憶化して深く探し、暴力で解決する.
(4)jump
1つの配列A[i]が与えられ、その中にいくつかの位置が踏んで、それに対応する分(スコアが負の可能性がある)を得ることができ、毎回選択して現在の位置からg個の位置を得ることができ、ジャンプ精度wを調整することによって、一定の距離を実現することができ、max(1,g−w+1)からg+wまでの位置に調整することができ、現在g,k,配列Aを与えることができる.問w最小でどれだけ踏んだ位置sum>kを使用できるかを問う.
手に入れた、考えもしなかった、暴力DP--もともと正しい(30~40点)、もっと多くの点を考えて、位置を移した--間違って、5点、心理状態が爆発した.
コード--ああ、まだ書いていません.
***
1.before
以前の私はどのようにプログラミングを学びましたか??毎日お昼に少し时间を割いて、机械の部屋の中でぼんやりと昼を浸すことができて、ACのいくつかの问题が自然に楽しくて、ACがなくてもただ“Let it be”で自分を慰めます.周末の授业が终わっても家に帰って「新しい思考」「金メダルの物理の试合」に头をぶら下げて、寝终わって、NOIPはまた1回です.
2.in the exam
思考が遅く、普段できる問題も「欲張り」で点数を落とした.得意ではない問題には挑戦できないが、実は簡単だ.
3.now
NOIPの激励のもとで、よく勉強します.
4.future
お昼、できるだけ問題を作って、本当にコードを見ることができなくて、数日後に暗記して打つことができます;授業を受けて、真剣に理解して、少なくとも基礎問題(難しい問題を作ったほうがいい)を確保します.週末に家に帰っても、必ず「新しい思考」の中で時間を割いて、勉強を続けます.
最後に
おめでとうございます.再戦、NOIP 2018.