【LYOI2016】EasyRound1

这可能是给新高一写的吧……随手写着玩玩……

A:随便模拟

 

#include<cstdio>
#include<cstring>
using namespace std;
int n,m,k,x,y;
inline int read(){
    int f=1,x=0;char ch;
    do{ch=getchar();if(ch=='-')f=-1;}while(ch<'0'||ch>'9');
    do{x=x*10+ch-'0';ch=getchar();}while(ch>='0'&&ch<='9');
    return f*x;
}
int main(){
    n=read();m=read();k=read();
    int a[n+1][m+1];
    memset(a,0,sizeof(a));
    for(register int i=1;i<=k;++i){
        x=read(),y=read();
        if(x==1)for(register int j=1;j<=m;++j)a[y][j]=i;
        else for(register int j=1;j<=n;++j)a[j][y]=i;
    }
    for(register int i=1;i<=n;++i){
        for(register int j=1;j<=m;++j)printf("%d ",a[i][j]);
        puts("");
    }
}

B:就是问你二进制拆分后有几位……

#include<bits/stdc++.h>
using namespace std;
typedef unsigned long long ll;
ll x;
int main(){
    cin>>x;int ans=0;
    while(x){
        ans++;x>>=1;
    }
    printf("%d\n",ans);
}

C:随手写完猜一个递推式。

#include<bits/stdc++.h>
#define yql 15746
#define N 1000010
using namespace std;
typedef long long ll;
int  f[N],n;
int main(){
    scanf("%d",&n);
    f[0]=1;f[1]=1;
    for(int i=2;i<=n;i++)f[i]=((f[i-1]%yql)+(f[i-2]%yql))%yql;
    printf("%d\n",f[n]);
    return 0;
}

 

posted @ 2017-05-20 21:48  zcysky  阅读(458)  评论(0编辑  收藏  举报