noip2016自测报告

随便测了一下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;
}
View Code

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);
    }
}
View Code

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();
    }
}
View Code

T3:愤怒的小鸟

又是数学题,不想写,保灵

总分:95+20+0+40+80+0=235,压一等

不能再颓了,再颓就要成狒狒了(然而我又打开了fifa online 3)

原文地址:https://www.cnblogs.com/cwjr/p/13542488.html