A:小 I 的小姐姐

#include<stdio.h>
struct node
{
 int w1,w2,w3;
 }a[5000];
 int main()
 {
   int n,i,t;
   double x,b[5000];
   while(~scanf("%d",&n))
   {
    for(i=0;i<n;i++)
    {
      scanf("%d %d %d",&a[i].w1,&a[i].w2,&a[i].w3);
      b[i]=a[i].w1*0.7+a[i].w2*0.2+a[i].w3*0.1;
      }
      x=b[0];
      t=0;
        for(i=1;i<n;i++)
        {
        if(b[i]>x)
        {
         x=b[i];
         t=i;
         }}
         printf("%d\n",t);
         }
         return 0;
         }

B:寻找关键点

#include <stdio.h>
#include <stdlib.h>

typedef struct node
{
    int data;
    struct node *next;
}lb;

int n;

void creat(lb *head,int n)
{
    lb *p,*q;
    int i;
    p = head;
    for(i=0;i<n;i++)
    {
        q = (lb*)malloc(sizeof(lb));
        scanf("%d",&q->data);
        q->next = p->next;
        p->next = q;
        p = q;
    }
}

void show(lb *head)
{
    lb *p;
    p = head->next;
    while(p)
    {
        printf("%d ",p->data);
        p = p->next;
    }
    printf("\n");
}

void find(lb *head,int n)
{
    int m;
    m = n / 2;
    lb *p;
    p = head->next;
    while(m--)
        p = p->next;
    printf("%d\n",p->data);
}

void del(lb *head)
{
    int a,b,f1,f2;
    f1 = f2 = 0;
    lb *p,*q;
    p = head;
    scanf("%d%d",&a,&b);
    while(p->next)
    {
        q = p->next;
        if(q->data==a||q->data==b)
        {
            n--;
            if(q->data==a)
                f1 = 1;
            else
                f2 = 1;
            p->next = q->next;
            free(q);
        }
        else
            p = q;
        if(f1&&f2)
            break;
    }
}

void insert(lb *head)
{
    int a,b,f1,f2;
    f1 = f2 = 0;
    lb *p,*q;
    p = head->next;
    scanf("%d%d",&a,&b);
    while(p)
    {
        if(p->data==1||p->data==2)
        {
            n++;
            if(p->data==1)
            {
                f1 = 1;
                q = (lb*)malloc(sizeof(lb));
                q->data = a;
                q->next = p->next;
                p->next = q;
            }
            else
            {
                f2 = 1;
                q = (lb*)malloc(sizeof(lb));
                q->data = b;
                q->next = p->next;
                p->next = q;
            }
        }
        if(f1&&f2)
            break;
        p = p->next;
    }
}

int main()
{
    lb *head;
    int i,m,a;
    head = (lb*)malloc(sizeof(lb));
    head->next = NULL;
    scanf("%d",&n);
    creat(head,n);
    scanf("%d",&m);
    for(i=0;i<m;i++)
    {
        scanf("%d",&a);
        if(a==1)
        {
            del(head);
        }
        else if(a==2)
        {
            insert(head);
        }
        //show(head);
        find(head,n);
    }
    return 0;
}

C:骨牌铺方格II

#include <stdio.h>
int main()
{
    int n , i , j  ,k ;
    long long int f[1001];
    while(~scanf("%d" , &n))
    {
        f[1] = 1;
        f[2] = 1;
        f[3] = 2;
        f[4] = 3;
        for (i = 5 ; i <= n ; i++)
        {
            f[i] = f[i-1] + f[i-3];
        }
        printf("%lld\n" , f[n]);
    }
    return 0;
}

D:小 I 买不到票

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int r[15],x[15];
    int i,n,max,a,min,b;
    n = 13;
    while(scanf("%d",&r[0])!=EOF)
    {
        for(i=1;i<n;i++)
            scanf("%d",&r[i]);
        for(i=0;i<n;i++)
            scanf("%d",&x[i]);
        max = 0;
        min = 1000;
        b = 0;
        for(i=0;i<12;i++)
        {
            a = r[i]+r[i+1];
            if(a<=100&&x[i]>=max)
            {
                if(x[i]>max)
                {
                    max = x[i];
                    b = i + 8;
                    min = a;
                }
                else
                {
                    if(x[i] == max&&a<min)
                    {
                        b = i + 8;
                        min = a;
                    }
                }
            }
        }
        if(b)
            printf("%d\n",b);
        else
            printf("-1\n");
    }
    return 0;
}

E:田忌赛马

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
    int N;
    int a[60000],b[60000];
    int i,j;
    scanf("%d",&N);
    for(i=1;i<=N;i++)
    {
       scanf("%d",&a[i]);
    }
    for(j=1;j<=N;j++)
    {
       scanf("%d",&b[j]);
    }
    int cnt=1,count=1;
    int num=0;
    while(cnt<=N)
    {
       if(b[count]>a[cnt++])
       {
          num++;
          count++;
       }
    }
    printf("%d\n",num);




    return 0;
}

F:动态lcm

#include <stdio.h>
#include <stdlib.h>
#define max(a,b) (a>b?a:b)
#define min(a,b) (a<b?a:b)

int a[10][10],m,n,min;

int find(int a,int b)
{
    int i,t,q;
    t = min(a,b);
    for(i=1;i<=t;i++)
    {
        if(a%i==0&&b%i==0)
        q = i;
    }
    return a / q * b;
}

void walk(int i,int j,int sum)
{
    sum = find(sum,a[i][j]);
    if(i==n-1&&j==m-1)
    {
        if(sum<min)
            min = sum;
        return;
    }
    if(i<n-1)
        walk(i+1,j,sum);
    if(j<m-1)
        walk(i,j+1,sum);
}

int main()
{
    int i,j;
    scanf("%d%d",&n,&m);
    for(i=0;i<n;i++)
    {
        for(j=0;j<m;j++)
            scanf("%d",&a[i][j]);
    }
    min = 46;
    for(i=47;i<=50;i++)
        min = find(min,i);
    min ++;
    walk(0,0,1);
    printf("%d\n",min);
    return 0;
}

G: Dragon Quest

#include<bits/stdc++.h>
using namespace std;
int h1,a1,d1,h2,a2,d2,ans;
void f2(int h,int a,int d,int bh,int step);
void f1(int h,int a,int d,int bh,int step)
{
    if(step>5)return;
    if(h<=0)return;
    int s=max(0,a-d2);
    f2(h,a,d,bh-s,step);
    f2(h,a+5,d,bh,step);
    f2(h,a,d+5,bh,step);
}
void f2(int h,int a,int d,int bh,int step)
{
    if(bh<=0)
    {
        ans++;
        return;
    }
    int s=a2-d;
    f1(h-s,a,d,bh,step+1);
}
int main()
{
    while(cin>>h1>>a1>>d1>>h2>>a2>>d2)
    {
        ans=0;
        f1(h1,a1,d1,h2,1);
        cout<<ans<<endl;
    }
}