1- 7.14 2011 Heilongjiang collegiate programming contest

UESTC 924-933
10题 ,AC 8题

A - Alphabet Cookies UESTC - 924
水题

B - Sequential game UESTC - 925
队友写的

#include <bits/stdc++.h>
typedef long long int LL;
using namespace std;
char a[1500000];
int main()
{
    while(~scanf("%s",a))
    {
        int n=strlen(a);
        int cont0,cont1;
        cont0=0,cont1=0;
        if(a[0]=='0')cont0++;
        else cont1++;
        for(int i=1;i<n;i++)
        {
            if(a[i]==a[i-1])
            {
                if(a[i]=='0')cont0++;
                else cont1++;
            }
            else
            {
                swap(cont0,cont1);
                if(a[i]=='0')cont0++;
                else cont1++;
            }
        }
        printf("%d %d\n",cont0,cont1);
    }
}

C - Programming Contest Ranking UESTC - 926

简单模拟

#include <bits/stdc++.h>
#define mme(i,j) memset(i,j,sizeof(i));
using namespace std;
struct group{
    char name[35];
    int ac;
    int total;
    int weight;
    int po[22];
    int potme[26];
    int acnum[26];
}gg[205];
int pro[25];
int protime[25];
int n,m;
char s[205];

void input(){

    for(int i=1;i<=n;i++)
    {
            gg[i].ac=gg[i].total=gg[i].weight=0;
            mme(gg[i].po,0);
            mme(gg[i].potme,0);
            mme(gg[i].acnum,0);
            scanf("%s",gg[i].name);
            for(int j=1;j<=m;j++){
                scanf("%s",s);
                int k=0,tme=0;
                int num=0;
                while(s[k]!='\\' ){
                    if(s[k]>='0'&&s[k]<='9')
                    {
                        num=num*10;
                        num=num+s[k]-'0';
                    }
                    k++;
                }
                k++;
                bool fl=0;
                while(s[k]){
                    if(s[k]=='-')
                    {
                        fl=1;
                        break;
                    }
                    tme=tme*10;
                    if(s[k]!='-')
                        tme=tme+s[k]-'0';
                    k++;
                }

                if(fl==0){
                    pro[j]++;
                    gg[i].ac++;
                    if(protime[j]==-1)
                        protime[j]=tme;
                    else
                        protime[j]=min(protime[j],tme);

                    gg[i].po[j]=1;
                    gg[i].acnum[j]=num;
                    gg[i].potme[j]=tme;
                }
            }
        }
        for(int i=1;i<=n;i++){
            for(int j=1;j<=m;j++){

                if(gg[i].potme[j]==protime[j] )
                    gg[i].total+=gg[i].potme[j];
                else
                {
                    if(gg[i].acnum[j]>0)
                        gg[i].total+=(gg[i].acnum[j]-1)*20;

                    gg[i].total+=gg[i].potme[j];
                }
            }
        }
        for(int i=1;i<=m;i++)
        {
            if(pro[i])
                pro[i]=n/pro[i]; // pro is every problem 's weight
        }

        for(int i=1;i<=n;i++)
            for(int j=1;j<=m;j++)
                gg[i].weight+=gg[i].po[j]*pro[j];
}

int cmp(group a1,group a2)
{
    if(a1.ac==a2.ac){
        if(a1.total==a2.total){
            if(a1.weight == a2.weight)
                return strcmp(a1.name,a2.name)<0;
            return a1.weight>a2.weight;
        }
        return a1.total<a2.total;
    }
    return a1.ac>a2.ac;
}
int rk[222];

int main(){
    while(~scanf("%d%d",&n,&m))
    {
        mme(pro,0);
        mme(protime,-1);
        input();
        sort(gg+1,gg+1+n,cmp);

        rk[1]=1;
        for(int i=1;i<=n;i++)
        {
            if(i>1){
                if(gg[i].ac==gg[i-1].ac
                   &&gg[i].total==gg[i-1].total
                   &&gg[i].weight==gg[i-1].weight)
                rk[i]=rk[i-1];
                else rk[i]=i;
            }

            printf("%*d %*s %*d %*d %*d\n",3,rk[i],20,gg[i].name,2,gg[i].ac,6,gg[i].total,4,gg[i].weight);
        }
    }
    return 0;

D - Dart game UESTC - 927

DP题,没补完,待完善

E - Similar Word UESTC - 928
字符串最小表示法

#include<stdio.h>
#include<string.h>
#include<iostream>
using namespace std;
char a[150000];
char bb[150000];
int n;
int minRepresentation(char b[])
{
    int l=n;
    int i = 0, j = 1, k = 0, t;
    while(i < l && j < l && k < l) {
        t = b[(i + k) >= l ? i + k - l : i + k] - b[(j + k) >= l ? j + k - l : j + k];
        if(!t) k++;
        else{
            if(t > 0) i = i + k + 1;
            else j = j + k + 1;
            if(i == j) ++ j;
            k = 0;
        }
    }
    return (i < j ? i : j);
}
int main()
{
    while(~scanf("%s%s",a,bb))
    {
        if(strcmp(a,bb)==0)
        {
            printf("no\n");
            continue;
        }
        if(strlen(a)!=strlen(bb))
        {
            printf("no\n");
            continue;
        }
        int flag=0;
        n=strlen(a);
        int posa=minRepresentation(a);
        int posb=minRepresentation(bb);
        for(int i=0;i<n;i++)
        {
            if(a[posa]!=bb[posb])flag=1;
            posa++;
            posb++;
            posa%=n;
            posb%=n;
        }
        if(flag==0)
        printf("yes\n");
        else printf("no\n");
    }
}

F - Post office UESTC - 929
队友做的,我赛后补了这题。

#include <bits/stdc++.h>
#define mme(i,j) memset(i,j,sizeof(i))
#define maxs 2020
using namespace std;

long long sum[maxs],sum2[maxs];
int a[maxs];

int main(){

    int n,m;
    while(~scanf("%d",&n))
    {
        mme(sum,0);
        mme(sum2,0);
        sum[0]=0;
        sum2[n+1]=0;
        for(int i=1;i<=n;i++)
        {
            scanf("%d",&a[i]);
            sum[i]=sum[i-1] + a[i];
        }

        for(int i=n;i>=1;i--)
            sum2[i]=sum2[i+1]+a[i];

        int p,x,y;
        scanf("%d",&p);
        while(p--){
            scanf("%d%d",&x,&y);
            int mid =(x+y)>>1;
            long long ans = a[mid]*(mid-x) - (sum[mid-1]-sum[x-1]) +  (sum2[mid+1]-sum2[y+1])-a[mid]*(y-mid);
           printf("%lld\n",ans);
        }
    }
    return 0;
}

G - Lucky Boy UESTC - 930
计算题,博弈

先判断有没有3点共线的,有就a胜利,反之就是巴士博弈,k=2

#include <bits/stdc++.h>
typedef long long int LL;
using namespace std;

const int N = 10000 +7;

map<int,map<int,int> >mmp;

int x[N],y[N];

int main() {
    int n;
    while(~scanf("%d",&n)) {
        for(int i=1; i<=n; i++)           scanf("%d%d",&x[i],&y[i]);

        int flag = 0,xx,yy,t; // equal;
        for(int i=1; i<=n; i++) {
            mmp.clear();
            for(int j=1; j<=n; j++) {
                if(i==j) continue;
                if(x[i]==x[j]&&y[i]==y[j]) flag=1;
                xx=x[i]-x[j];
                yy=y[i]-y[j];
                if(xx<0) xx*=-1,yy*=-1;
                t=__gcd(xx,yy);
                xx/=t,yy/=t;
                if(mmp[xx][yy]) flag=1;
                mmp[xx][yy]=1;
            }
        }
        if(flag ) {
            printf("a");
        } else {
            if(n%(3)==0) printf("b");
            else         printf("a");
        }
        puts(" is the lucky boy.");
    }
    return 0;
}

H - Car race game UESTC - 931

线段树骚操作

#include <bits/stdc++.h>
#define lowbit(x) (x&(-x))
#define mme(i,j) memset(i,j,sizeof(i))
using namespace std;
struct node
{
    int x,v;
}a[100005];
int sum[100005];

void update(int i,int k)
{
    for(;i<100005;i+=lowbit(i))
        sum[i]+=k;
}

int cmp(node s,node sb)
{
    if(s.x==sb.x)
        return s.v<sb.v;
    else
        return s.x>sb.x;
}

int getsum(int i)
{
    int ans=0;
    for(;i;i-=lowbit(i))
        ans+=sum[i];
    return ans;
}

int main(){
    int n;
    while(~scanf("%d",&n))
    {
        mme(sum,0);
        for(int i=1;i<=n;i++)
            scanf("%d%d",&a[i].x,&a[i].v);
        sort(a+1,a+1+n,cmp);
        long long ans=0;
        for(int i=1;i<=n;i++)
        {
            ans=ans+getsum(a[i].v-1);
            update(a[i].v,1);
        }
        cout<<ans<<endl;
    }
    return 0;
}

J - The minimum square sum UESTC - 933

规律题

#include <bits/stdc++.h>
#define mme(i,j) memset(i,j,sizeof(i))
using namespace std;

#define maxs 202020

int main()
{
    long long int m,n;
    while(~scanf("%lld",&n))
    {
        if(n%4==3)
            cout<<n*n*2<<endl;
        else
            cout<<n<<endl;
    }
    return 0;
}

我还是太菜了,还需要加强训练,好多思维没有建立起来,导致做题速度明显比队友慢了很多。加油!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
"name": "duang2.0", "version": "0.1.0", "lockfileVersion": 1, "requires": true, "dependencies": { "@ant-design/colors": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/@ant-design/colors/-/colors-3.2.2.tgz", "integrity": "sha512-YKgNbG2dlzqMhA9NtI3/pbY16m3Yl/EeWBRa+lB1X1YaYxHrxNexiQYCLTWO/uDvAjLFMEDU+zR901waBtMtjQ==", "requires": { "tinycolor2": "^1.4.1" } }, "@ant-design/icons": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/@ant-design/icons/-/icons-2.1.1.tgz", "integrity": "sha512-jCH+k2Vjlno4YWl6g535nHR09PwCEmTBKAG6VqF+rhkrSPRLfgpU2maagwbZPLjaHuU5Jd1DFQ2KJpQuI6uG8w==" }, "@ant-design/icons-vue": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/@ant-design/icons-vue/-/icons-vue-2.0.0.tgz", "integrity": "sha512-2c0QQE5hL4N48k5NkPG5sdpMl9YnvyNhf0U7YkdZYDlLnspoRU7vIA0UK9eHBs6OpFLcJB6o8eJrIl2ajBskPg==", "requires": { "@ant-design/colors": "^3.1.0", "babel-runtime": "^6.26.0" } }, "@babel/code-frame": { "version": "7.14.5", "resolved": "https://registry.nlark.com/@babel/code-frame/download/@babel/code-frame-7.14.5.tgz?cache=0&sync_timestamp=1623280394200&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fcode-frame%2Fdownload%2F%40babel%2Fcode-frame-7.14.5.tgz", "integrity": "sha1-I7CNdA6D9JxeWZRfvxtD6Au/Tts=", "dev": true, "requires": { "@babel/highlight": "^7.14.5" } }, "@babel/compat-data": { "version": "7.14.5", "resolved": "https://registry.nlark.com/@babel/compat-data/download/@babel/compat-data-7.14.5.tgz?cache=0&sync_timestamp=1623280503073&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fcompat-data%2Fdownload%2F%40babel%2Fcompat-data-7.14.5.tgz", "integrity": "sha1-jvTBjljoAcXJXTwcDyh0omgPreo=", "dev": true }, "@babel/core": { "version": "7.14.6", "resolved": "https://registry.nlark.com/@babel/core/download/@babel/core-7.14.6.tgz", "integrity": "sha1-4IFOwalQAy/xbBOich3jmoQW/Ks=", "dev": true, 解析
07-14

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值