随便测了一下2016的提高组,发现自己还是太菜了。。。
day1
T1:玩具谜题
一个模拟题,打挂了,只有95分,错的很傻逼
code:
#include<bits/stdc++.h> using namespace std; int n,m; int add(int x){ if(x>n) x%=n; if(x<=0) x+=n; return x; } const int N=200001; int t,a[N]; char str[N][11]; int main() { scanf("%d%d",&n,&m); for(int i=1; i<=n; i++) scanf("%d%s",&a[i],str[i]+1); int k=1; int move; for(int i=1;i<=m;i++){ scanf("%d%d",&t,&move); if(a[k]==1&&t==1) k=add(k-move); else if(a[k]==1&&t==0) k=add(k+move); else if(a[k]==0&&t==1) k=add(k+move); else if(a[k]==0&&t==0) k=add(k-move); } int len=strlen(str[k]+1); for(int i=1;i<=len;i++) cout<<str[k][i]; return 0; }
T2:天天爱跑步
压根就不会,只打了20分的子任务,第一次交还挂了,太菜了。。。,就不放代码了
T3:换教室
蓝题+期望?,直接放弃
95+20+0=115,估计比大众分还低
day2
T1:组合数问题
暴力乱操,正解想不出,40分
code:
#include<bits/stdc++.h> #define d cout<<"nmsltonyma"; using namespace std; long long num[1001]; int main() { long long n,m,t,k; scanf("%lld%lld",&t,&k); num[0]=1; num[1]=1; for(long long i=2; i<=100; i++) num[i]=num[i-1]*i; while(t--) { long long n,m,ans=0; scanf("%lld%lld",&n,&m); for(long long i=1; i<=n; i++) for(long long j=1; j<=min(i,m); j++) { if((num[i]/(num[j]*num[i-j]))%k==0) ans++; } printf("%lld ",ans); } }
T2:蚯蚓
第一眼看到题就想到了堆,并且神奇地想出了怎样维护蚯蚓的增长
写到一半突然发现需要在堆里多放一个参数维护,就不会写了
然而,过了一会儿我脑子突然开窍了,发现只要把第一个参数改一下就不需要维护第二个参数了,80分到手,剩下几个点常数太大T了
code:
#include<bits/stdc++.h> using namespace std; const int N=2e5+20; int a[N]; int n,m,cnt; double u,v; int t; priority_queue<int>q; int main() { int grow=0; scanf("%d%d%d%d%d%d",&n,&m,&cnt,&u,&v,&t); for(int i=1; i<=n; i++) scanf("%d",&a[i]); for(int i=1; i<=n; i++) q.push(a[i]); for(int i=1; i<=m; i++) { int x=q.top(); x+=grow; q.pop(); int x1=(u/v)*x; int x2=x-x1; q.push(x1-grow-cnt); q.push(x2-grow-cnt); if(i%t==0) printf("%d ",x); grow+=cnt; } cout<<endl; for(int i=1; i<=(n+m); i++) { if(i%t==0) { int x=q.top(); printf("%d ",x+grow); } q.pop(); } }
T3:愤怒的小鸟
又是数学题,不想写,保灵
总分:95+20+0+40+80+0=235,压一等
不能再颓了,再颓就要成狒狒了(然而我又打开了fifa online 3)