感悟:
1、不要让自己只习惯于做一类题目,就算题目出的风格让自己感到很恶心,最终成绩只要是由实力决定的,就一定要信任自己,全力以赴。
2、态度的调整要靠自己。自怜的情绪不能让你获得更多理解,频繁而急躁的尝试有时不如沉下心来想想自己当前的情况,以后的路怎么走最好。
3、对自己适度宽容,不苛求自己每次都要发挥出100%,而在平时增强实力。某一时刻感到被困住怎么都走不出去,也许只是因为..天气不太好~
4、不要给自己施加过多的消极情绪,有时压力可以促进做事效率,但考试的时候不需要,放平心态就好。
眼镜摔坏还掉Rating,真是给会考攒人品。
A. A Good Contest
题目难度只剩下英文阅读和在半夜保持清醒= =
#include<bits/stdc++.h> #define F(i,s,t) for(int i=(s);i<=(t);i++) using namespace std; int n,ans; char name[12]; int main() { scanf("%d",&n);ans=0; F(i,1,n){ int x,y; scanf("%s%d%d",name,&x,&y); if(x>=2400&&y>x) ans++; } puts(ans?"YES":"NO"); return 0; }
B. Economy Game
给定n,求是否存在满足a × 1 234 567 + b × 123 456 + c × 1 234 = n 的数对(a,b,c)。(1<n<=10^9)
我是治脏。
线性结果给定,求m元数对暴力只需O(n^(m-1))。
int main() { int n; while(~scanf("%d", &n)) { const int X = 1234567, Y = 123456, Z = 1234; bool ans = false; for(int a = 0; a * X <= n; ++ a) { int m = n - a * X; for(int b = 0; b * Y <= m; ++ b) { if((m - b * Y) % Z == 0) { ans = true; } } } puts(ans ? "YES" : "NO"); } return 0; }
C. Heap Operations
有一个小根堆,资瓷三种操作:
1.插入一个数
2.移除最小的数
3.输出最小的数
执行一些操作,记录了其中的n次
要完善它的操作,使满足操作说明。要求总的操作次数最小。
操作次数<=10^6
很好的模拟题。vector存储、首字母十分方便!
#include<bits/stdc++.h> #define F(i,s,t) for(int i=(s);i<=(t);i++) #define fir first #define sec second using namespace std; priority_queue<int,vector<int>,greater<int> > q; vector<pair<char,int> > ans;//保存操作首字母即可 int n,x; char s[10]; int main() { n=read(); while(n--){ scanf("%s",s); if(s[0]!='r') x=read(); if(s[0]=='i'){ q.push(x); ans.push_back(make_pair(s[0],x)); } else if(s[0]=='r'){ if(q.empty()){ q.push(1); ans.push_back(make_pair('i',1)); } q.pop(); ans.push_back(make_pair('r',0));//remove后没有值 } else if(s[0]=='g'){//getMin 不取出 while(!q.empty()){//!!! int t=q.top(); if(t==x){ ans.push_back(make_pair('g',x)); break; } else if(t<x){ q.pop(); ans.push_back(make_pair('r',t)); } else if(t>x){ q.push(x); ans.push_back(make_pair('i',x)); } } if(q.empty()){ q.push(x); ans.push_back(make_pair('i',x)); ans.push_back(make_pair('g',x)); } } } printf("%d\n",ans.size()); F(i,0,ans.size()-1){ if(ans[i].fir=='i') printf("insert"); if(ans[i].fir=='r') printf("removeMin"); if(ans[i].fir=='g') printf("getMin"); if(ans[i].fir!='r') printf(" %d",ans[i].sec); printf("\n"); } return 0; }
有些细节还可简化/操作可合并
#include<bits/stdc++.h> using namespace std; priority_queue < int , vector < int > , greater < int > > Q; vector<pair<char,int> >ans; char s[444]; int main() { int n;scanf("%d",&n); for(int i=0;i<n;i++) { int p; scanf("%s",s); if(s[0]!='r')cin>>p; if(s[0]=='i') { Q.push(p); ans.push_back(make_pair(s[0],p)); } else if(s[0]=='r') { if(Q.empty()) { Q.push(1); ans.push_back(make_pair('i',1)); } Q.pop(); ans.push_back(make_pair('r',0)); } else if(s[0]=='g') { while(!Q.empty()) { int t = Q.top(); if(t<p) { Q.pop(); ans.push_back(make_pair('r',0)); } else break; } if(Q.empty()||Q.top()>p) { Q.push(p); ans.push_back(make_pair('i',p)); } ans.push_back(make_pair('g',p)); } } cout<<ans.size()<<endl; for(int i=0;i<ans.size();i++) { if(ans[i].first=='r')printf("removeMin "); if(ans[i].first=='i')printf("insert "); if(ans[i].first=='g')printf("getMin "); if(ans[i].first!='r')printf("%d",ans[i].second); printf("\n"); } }