2017杭电新生赛 1001~1009

那句话怎么说的来着,打了星还垫底是最尴尬的= =
虽然没打星…
现场只做出了6个题,走的时候连账号都没拿,借了同学的账号赛后清了其余三道1006 1007 1008。

1006读错题,就算是没读错,由于之前的一个类似的题没清是该反思反思了!

1007寻思打完1008回来接手

1008最后一小时都在攻这个题,居然被一个&卡住了,哎…居然能把“与”和”同或”当成一个东西

1003和1009犯了低级错误。
尤其1009这个题WA5,sort时n,m写成n,n,检查了将近40分钟,编码能力真的是有问题!

1001 考研【水】

#include <iostream>

using namespace std;

int main()
{
    int n;
    cin >> n;
    while (n--)
    {
        int a, b, c, d;
        cin >> a >> d >> c >> b;
        if (a >= 85 && b >= 85 && c >= 55 && d >= 55 && a + b + c + d >= 370)
            cout << "A" << endl;
        else if (a >= 85 && b >= 85 && c >= 55 && d >= 55 && a + b + c + d >= 305)
            cout << "B" << endl;
        else
            cout << "C" << endl;

    }
    return 0;
}

1002 身份证验证【模拟】

#include <iostream>
#include<stdio.h>
#include<string.h>
#include<string>
#include<algorithm>
#include<queue>
#include<stack>
#define ll long long int
using namespace std;
char sf[19];
int a,b,c;
char d,e;
int a1[10000];
bool panduan(char sf[])
{
    int m=(sf[6]-'0')*1000+(sf[7]-'0')*100+(sf[8]-'0')*10+(sf[9]-'0');
    int n=(sf[10]-'0')*10+(sf[11]-'0');
    int x=(sf[12]-'0')*10+(sf[13]-'0');
    if(a-m>18)
      return 0;
      if(a-m==18&&n<b)
        return 0;
        if(a-m==18&&n==b&&x<=c)
        return 0;

    return 1;
}
int main()
{
    char duizhao[11]={'1','0','X','9','8','7','6','5','4','3','2'};
    int xishu[17]={7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2};
int n;
while(~scanf("%d",&n))
{
cin>>a>>d>>b>>e>>c;
memset(a1,0,sizeof a1);
for(int j=0;j<n;j++)
{
    cin>>sf;
    if(panduan(sf))
    {
        a1[j]=0;
        continue;
    }

    int sum=0;
    for(int i=0;i<17;i++)
    {
        sum=sum+xishu[i]*(sf[i]-'0');
    }
    sum=sum%11;

    if(duizhao[sum]==sf[17])
    {
       a1[j]=1;
    }
    else
       a1[j]=0;
}
for(int j=0;j<n;j++)
{
    if(a1[j]==1)
        cout<<"Accepted"<<endl;
    else
        cout<<"Sorry"<<endl;

}
}
    return 0;
}

1003 下起楼来我最快【水】

#include <iostream>
#include<stdio.h>
#include<algorithm>
#include<cmath>
#define ll long long int
using namespace std;
int n,m;
int main()
{
   while(~scanf("%d%d",&n,&m))
   {
      ll a,b,c,d;
       cin>>a>>b>>c>>d;
       ll e=abs(n-m);
      ll  t1=(n-1)*d;
      ll   t2=e*a+2*b+c+(n-1)*a;
      if(t1<t2)
        cout<<t1<<endl;
      else
        cout<<t2<<endl;

   }
    return 0;
}

1004 正品的概率【条件概率】

#include <iostream>
#include<stdio.h>
#include<cmath>
#define ll long long int
using namespace std;
ll gcd (ll x,ll y)
{
    if(y==0)
        return x;
    return gcd(y,x%y);
}
ll qiuck(ll q,ll k)
{
   ll sum=1;
    while(k>0)
    {
        if(k%2==1)
         sum=sum*q;
        q=q*q;
        k=k/2;
    }
    return sum;
}
int main()
{
   ll m,n,k;
while(cin>>m>>n>>k)
{
    ll y=m+qiuck(2,k)*n;
    ll t=gcd(y,m);
    cout<<m/t<<"/"<<y/t<<endl;
}
    return 0;
}

1005 整数的Alvin值【规律】

#include <iostream>
#include<stdio.h>
#include<cmath>
#define ll long long int
using namespace std;
ll  ppp = 1e9 + 7;
ll a[1000000];
int main()
{
    ll n;
    while (cin >> n)
    {
        ll sum = 0;
        for (int i = 0; i < n + 1; i++)
        {
            scanf("%lld", &a[i]);
        }
        ll p = 1;
        for (int i = 1; i < n; i++)
        {
            p *= 1ll * 2;
            p %= ppp;
        }
        for (ll i = 0; i < n; i++)
        {
            sum += a[i] * p % ppp;
        }
        sum = sum + a[n];
        sum = (sum+ppp)%ppp;
        cout << sum << endl;
    }
    return 0;
}

1006 稿件整理【归并排序||线段树||树状数组】

#include<iostream>
#include<cstring>
#include<iomanip>
#include<cstdio>
#include<algorithm>
using namespace std;
#define ll long long int
#define INF 0x3f3f3f3f
const int maxn = 1e5 + 10;
int s[maxn], A[maxn];
int a[maxn];
int n, k;
ll sum;
void merge(int L, int R)
{
    int mid = (L + R) / 2;
    int i = 0, j = 0, k = 0;
    for (i = L, j = mid; i < mid&&j < R;)
    {
        if (s[j] < s[i])
        {
            sum += mid - i;
            A[k++] = s[j];
            j++;
        }
        else
        {
            A[k++] = s[i];
            i++;
        }
    }
    while (i < mid)
    {
        A[k++] = s[i];
        i++;
    }
    while (j < R)
    {
        A[k++] = s[j];
        j++;
    }
    memcpy(s + L, A, sizeof(int) * k);
}
void merge_sort(int L, int R)
{
    if (R - L < 2)
        return;
    int mid = (L + R) / 2;
    merge_sort(L, mid);
    merge_sort(mid, R);
    merge(L, R);
}
int main()
{
    while (~scanf("%d", &n))
    {
        sum = 0;
        for (int i = 0; i < n; i++)
        {
            scanf("%d", &a[i]);
        }
        for (int i = 0; i < n; i += 2)
        {
            if (a[i] % 2 == 0)
            {
                swap(a[i], a[i + 1]);
                sum++;
            }
            s[i / 2] = a[i];
        }
        n /= 2;
        merge_sort(0, n);
        printf("%lld\n", sum);
    }

    return 0;
}

1007 找方块【暴力】

#include<iostream>
#include<cstring>
#include<cstdio>
#include<iomanip>
#include<algorithm>
#include<functional>
using namespace std;
const int maxn = 1e2 + 10;
int mp[maxn][maxn];
struct node {
    int r, d;
}dp[maxn][maxn];
int main()
{
    int T;
    scanf("%d", &T);
    while (T--)
    {
        int n;
        scanf("%d", &n);
        for (int i = 1; i <= n; i++)
        {
            for (int j = 1; j <= n; j++)
            {
                scanf("%d", &mp[i][j]);
            }
        }
        for (int i = 1; i <= n; i++)
        {
            for (int j = 1; j <= n; j++)
            {
                int k;
                for (k = i + 1; k <= n; k++)
                {
                    if ((mp[k][j] ^ mp[k - 1][j]) == 0)
                        break;
                }
                //cout << k << endl;
                dp[i][j].r = k - 1;
                for (k = j + 1; k <= n; k++)
                {
                    if ((mp[i][k] ^ mp[i][k - 1]) == 0)
                        break;
                }
                //cout << k << endl;
                dp[i][j].d = k - 1;
            }
        }
        /*for (int i = 1; i <= n; i++)
        {
            for (int j = 1; j <= n; j++)
            {
                printf("%d %d\n", dp[i][j].r, dp[i][j].d);
            }
        }*/
        int ans = 0;
        int dw = 0;
        for (int i = 1; i <= n; i++)
        {
            for (int j = 1; j <= n; j++)
            {
                dw = n;
                for (int k = i; k <= dp[i][j].r; k++)
                {
                    dw = min(dw, dp[k][j].d);
                    ans = max(ans, (dw - j + 1)*(k - i + 1));
                }
            }
        }
        printf("%d\n", ans);
    }
    return 0;
}

1008 友好整数【状态压缩】

#include<iostream>
#include<cstring>
#include<cstdio>
#include<iomanip>
#include<algorithm>
#include<functional>
using namespace std;
#define ll long long int
const int maxn = 1e3 + 50;
int n;
int a[maxn];
int t[10];
int f[30];
ll tmp;
void get_num()
{
    memset(t, 0, sizeof t);
    while (tmp != 0)
    {
        int nw = tmp % 10;
        t[nw] = 1;
        tmp /= 10;
    }
    int k = 0;
    for (int i = 0; i < 10; i++)
    {
        k += f[i] * t[i];
    }
    a[k]++;
    //cout << k << endl;
}
int main()
{
    //cout << (2 & 4) << endl;
    f[0] = 1;
    for (int i = 1; i <= 11; i++)
    {
        f[i] = f[i - 1] * 2;
    }
    int n;
    while (~scanf("%d", &n))
    {
        memset(a, 0, sizeof a);
        for (int i = 0; i < n; i++)
        {
            scanf("%lld", &tmp);
            get_num();
        }
        ll ans = 0;
        for (int i = 0; i < 1024; i++)
        {
            for (int j = i; j < 1024; j++)
            {
                if (i == j)
                {
                    /*if (a[i] == 1 || a[i] == 0)
                        continue;*/
                    ans += 1ll * a[i] * (a[i] - 1) / 2;
                }
                else
                {
                    if (i&j)
                    {
                        ans += 1ll * a[i] * a[j];
                    }
                }
            }
        }
        printf("%lld\n", ans);
    }
    return 0;
}

1009 最大收益【贪心】

#include <iostream>
#include<algorithm>
#include<stdio.h>
#define ll long long int
using namespace std;
bool cmp(ll a,ll b)
{
    return a>b;
}
ll a[100005],b[100005];
int main()
{
    ll n,m;
   while(cin>>n>>m)
         {


        for(ll i=0;i<n;i++)
        {
          scanf("%lld",&a[i]);
        }
        for(ll j=0;j<m;j++)
        {
           scanf("%lld",&b[j]);
        }
        sort(a,a+n,cmp);
        sort(b,b+m,cmp);
       ll t;
      if(n>m)
        t=m;
      else
        t=n;
      ll sum=0;
        for(ll i=0;i<t;i++)
        {
            sum=a[i]*b[i]+sum;
        }
        cout<<t<<" "<<sum<<endl;

         }
    return 0;
}

不争气的胖头鱼…代码还是打得太少太简单了!

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值