人間夜行

一切の有為の法 夢幻泡影の如し

RQNOJ 518 [NOIP09]潜伏者

| 评论

//此题坑人之处在于,明文密文必须“互相”对应,既不重复,也不遗漏。
//从rq的测试数据来看,如果没有考虑这一点,就有一个点通不过。
#include <stdio.h>
#include <string.h>
int main()
{
    char f[100],s[100];
    scanf("%s",f);
    scanf("%s",s);
    char dy[26];  //保存对应表 
    int i;
    for(i=0;i<26;i++) dy[i]=0;
    int sta=1;   //保存退出状态 
    for(i=0;i<strlen(f);i++)
    {
        if(dy[f[i]-'A']==0)
        {
            dy[f[i]-'A']=s[i];
        }
        else
        {
            if(dy[f[i]-'A']!=s[i]) {sta=3;break;}
        }
    }
    int stat[26]={0};
    for(i=0;i<strlen(f);i++) stat[dy[i]-'A']++;
    for(i=0;i<26;i++) if(stat[i]==0) sta=3;
    for(i=0;i<26;i++) if(dy[i]==0) sta=2;
    char c[100];
    scanf("%s",c);
    if(sta!=1)
    {
        printf("Failed");
    }
    else
    {
        for(i=0;i<strlen(c);i++) printf("%c",dy[c[i]-'A']);
    }
    return 0;
}

RQNOJ 479 [NOIP2001]一元三次方程求解

| 评论

//扫一遍好了。规模不大。如果很大就要换种方法了。
#include <stdio.h>
float a,b,c,d;
float f(float x)
{
        return a*x*x*x+b*x*x+c*x+d;
}
int main()
{
        float x;
        int sum=0;
        scanf("%f%f%f%f",&a,&b,&c,&d);
        x=-100;
        while(sum!=3)
        {
                if(f(x)*f(x+0.01)<=0)
                {
                        printf("%0.2f ",x+0.01);
                        sum++;

                }
                x+=0.01;
        }
        return 0;
}

RQNOJ 292 Cantor表

| 评论

//做着做着发现分子分母反了。所以输出时反一下。
#include <stdio.h>
int main()
{
        int n;
        int c=1;
        int zi=1,mu=1;
        int i=1;
        int pos;
        scanf("%d",&n);
        for(c=1;c<=n;c++)
                if((c+1)*c/2>=n&&c*(c-1)/2<n) break;
        if(c%2==1)
        {
                pos=(c-1)*c/2;
                zi=n-pos;
                mu=c+1-zi;
        }
        else
        {
                pos=(c-1)*c/2;
                zi=n-pos+c-1;
                mu=c+1-zi;
        }
        printf("%d/%d",mu,zi);
        return 0;
}

RQNOJ 289 验证数独

| 评论

//小心一点就好了。悲剧最近经常在小地方出错。做题三思!
#include <stdio.h>
int map[10][10];
int tjx(int y)
{
        int stat[10]={0};
        int i;
        for(i=1;i<=9;i++)
                stat[map[i][y]]++;
        for(i=1;i<=9;i++)
                if(stat[i]!=1) return 0;
        return 1;
}
int tjy(int x)
{
        int stat[10]={0};
        int i;
        for(i=1;i<=9;i++)
                stat[map[x][i]]++;
        for(i=1;i<=9;i++)
                if(stat[i]!=1) return 0;
        return 1;
}
int tjn(int x,int y)
{
        int stat[10]={0};
        int i,r;
        for(i=x;i<=x+2;i++)
                for(r=y;r<=y+2;r++)
                        stat[map[i][r]]++;
        for(i=1;i<=9;i++)
                if(stat[i]!=1) return 0;
        return 1;
}
int main()
{
        int i,r;
        for(i=1;i<=9;i++)
                for(r=1;r<=9;r++)
                        scanf("%d",&map[i][r]);
        int heng=0;
        int shu=0;
        int nine=0;
        for(i=1;i<=9;i++)
        {
                shu+=tjx(i);
                heng+=tjy(i);
        }
        nine+=tjn(1,1);
        nine+=tjn(1,4);
        nine+=tjn(1,7);
        nine+=tjn(4,1);
        nine+=tjn(4,4);
        nine+=tjn(4,7);
        nine+=tjn(7,1);
        nine+=tjn(7,4);
        nine+=tjn(7,7);
        if(heng+shu+nine==27) printf("1");
        else printf("0");
        return 0;
}

RQNOJ 238 火炬手之梦

| 评论

//此题需要一定的数学技巧。需要理解此函数的几何意义。
//同时考察格式化输出。
#include <stdio.h>
#include <math.h>
int main()
{
        float a,b,c,d;
        scanf("%f%f%f%f",&a,&b,&c,&d);
        printf("%0.3f",sqrt((sqrt(b)+sqrt(d))*(sqrt(b)+sqrt(d))+(a-c)*(a-c)));
        return 0;
}

RQNOJ 224 [JSOI2007]手机

| 评论

//打个表。虽然我承认这个表并不太好。
#include <stdio.h>
#include <string.h>
int sum;
void tj(char ch)
{
        if(ch=='a'||ch=='d'||ch=='g'||ch=='j'||ch=='m'||ch=='p'||ch=='t'||ch=='w'||ch==' ') sum++;
        if(ch=='b'||ch=='e'||ch=='h'||ch=='k'||ch=='n'||ch=='q'||ch=='u'||ch=='x') sum+=2;
        if(ch=='c'||ch=='f'||ch=='i'||ch=='l'||ch=='o'||ch=='r'||ch=='v'||ch=='y') sum+=3;
        if(ch=='s'||ch=='z') sum+=4;
}
int main()
{
        sum=0;
        char in[201]={0};
        gets(in);
        int i;
        for(i=0;in[i]!=0;i++)
                tj(in[i]);
        printf("%d",sum);
        return 0;
}

RQNOJ 16 谁拿了最多奖学金

| 评论

//读取数据时要极度小心。
#include <stdio.h>
int main()
{
        struct Student {
                char name[21];
                int score;
                int class;
                char gb;
                char west;
                int art;
                int money;
        } stu[101];
        int n;
        int i;
        scanf("%d",&n);
        for(i=1;i<=n;i++) scanf("%s %d %d %c %c %d",stu[i].name,&stu[i].score,&stu[i].class,&stu[i].gb,&stu[i].west,&stu[i].art);
        for(i=1;i<=n;i++)
        {
                stu[i].money=0;
                if(stu[i].score>80&&stu[i].art>0) stu[i].money+=8000;
                if(stu[i].score>85&&stu[i].class>80) stu[i].money+=4000;
                if(stu[i].score>90) stu[i].money+=2000;
                if(stu[i].west=='Y'&&stu[i].score>85) stu[i].money+=1000;
                if(stu[i].gb=='Y'&&stu[i].class>80) stu[i].money+=850;
        }
        int max=0;
        int pos=0;
        int sum=0;
        for(i=1;i<=n;i++)
                if(stu[i].money>max)
                {
                        max=stu[i].money;
                        pos=i;
                        sum+=stu[i].money;
                }
                else sum+=stu[i].money;
        printf("%s\n",stu[pos].name);
        printf("%d\n",stu[pos].money);
        printf("%d",sum);
        return 0;
}

RQNOJ 153 数的计算

| 评论

#include <stdio.h>
int ff(int now)
{
        if(now==0) return 1;
        else
        {
                int i,sum=0;
                for(i=now/2;i>=0;i--)
                        sum+=ff(i);
                return sum;
        }
}
int main()
{
        int n;
        scanf("%d",&n);
        printf("%d",ff(n));
        return 0;
}

RQNOJ 144 伯虎点秋香

| 评论

//此题应当注意字符串的操作。
//确保字符串函数不要用错!
#include <stdio.h>
#include <string.h>
void swap(char* a,char* b)
{
        char temp[1001];
        strcpy(temp,a);
        strcpy(a,b);
        strcpy(b,temp);
}
int main()
{
        int n;
        char name[1001][1001];
        char nnn[1001];
        scanf("%d",&n);
        int k;
        scanf("%d",&k);
        int i,r;
        for(i=1;i<=n;i++)
        {
            scanf("%s",&name[i][0]);
        }
        for(i=1;i<=n;i++)
                for(r=n;r>=i+1;r--)
                        if(strcmp(&name[i][0],&name[r][0])>0) swap(&name[i][0],&name[r][0]);
        printf("%s",&name[k][0]);
        return 0;
}

RQNOJ 96 苹果摘陶陶

| 评论

//果然是一道恶俗的题目。这里强调一下我用的qsort函数。
//貌似竞赛是可以用许多标准库的。(用C++福气更好,STL,汗)
//对了,这道题很坑人,陶陶高度不能为0哦。
#include <stdio.h>
#include <stdlib.h>
int cmp(const void *a,const void *b)
{
        return *(int *)b-*(int *)a;
}
int main()
{
        int n,m;
        int gh[2001]={0};
        int th[2001]={0};
        scanf("%d%d",&n,&m);
        int i;
        int y=m;
        for(i=1;i<=n;i++) scanf("%d",&gh[i]);
        for(i=1;i<=m;i++) scanf("%d",&th[i]);
        qsort(&th[1],m,sizeof(th[1]),cmp);
        for(i=1;i<=n;i++)
        {
                int r;
                for(r=1;r<=m;r++)
                {
                        if(gh[i]>th[r]&&th[r]>0)
                        {
                                y--;
                                th[r]=-1;
                                break;
                        }
                }
        }
        printf("%d",y);
        return 0;
}