Codeforces Round 308 (div 2)

总体叙述:

12’43签到第一题。没什么好说的,求n个矩阵的面积。

44’35第二题完成。由于思路卡断,积分因此有所下降。题意大概是求n以内所有数字位数和,比如1有一位,44有两位。中间出现思路错误的重大失误,开了一个整形数组,想用类似数位dp去统计,然后发现情况巨多巨繁杂。榜上很多人很快过了,说明这题应该没那么难。发现直接除1010就好。原谅我这段时间字符串做得多-_-

中途去看了下第四题,感觉可以做但是比较麻烦。C题做得人多先做C

C题卡死。题意是给一个w和一个m。问是否能用w100次方以内m的幂通过加减运算获得m。很快的想到存在一个n使得wn+1次方剪去前面n个幂的和大于m时,根据等比数列的性质,n+1次方包括它后面的数都不用取了。不要问我是怎么想到的,我只是不想用数组来存大数,太麻烦啦啦啦。WA了两次后发现与其麻烦的讨论从最后一个数还是倒数第二个数开始取,不如直接穷举从哪个数开始取。懒人效应,复杂度1e4小的很。最后的关键卡死,没有想到有些数可以不取。最后发现的时候已经有些慌乱,想不出对策。今早随便一敲,只需要用贪心让每次ansm差的绝对值越来越小就可以了。草草草草草。。。

赛后准备AD

刚刚AD:怎一个草字了得,穷举就能过。。。

A(赛中)

#include <cstdio>

#include <cmath>

#include <cstring>

#include <algorithm>

#include <iostream>

#include <string>

using namespace std;

int main()

{

    int n;

    while(scanf("%d",&n) != EOF){

        int x1,x2,y1,y2;

        int ans = 0;

        for(int i=0; i<n; i++){

            scanf("%d%d%d%d",&x1,&y1,&x2,&y2);

            ans += (x2-x1+1) * (y2-y1+1);

        }

        printf("%d\n",ans);

    }

    return 0;

}

B(赛中)

#include <cstdio>

#include <cmath>

#include <cstring>

#include <string>

#include <algorithm>

#include <iostream>

#include <queue>

using namespace std;

typedef long long ll;

ll fi_down(int a)

{

    ll temp = 1;

    while(temp <= a)

        temp *= 10;

    temp = temp / 10;

    temp -= 1;

    return temp;

}

ll fi_dig(int a)

{

    ll ans = 0;

    ll temp = 1;

    while(temp <= a){

        temp *=10;

        ans++;

    }

    return ans;

}

int main()

{

    int n;

    while(scanf("%d",&n) != EOF){

        ll ans = 0;

        while(n){

            ll temp = fi_down(n);

            ll dig = fi_dig(n);

//            printf("temp = %d,dig = %d\n",temp,dig);

            ans += dig * (n - temp);

            n = temp;

        }

        cout << ans<<endl;

    }

    return 0;

}

C(赛后)

#include <cstdio>

#include <cmath>

#include <cstring>

#include <string>

#include <algorithm>

#include <iostream>

#include <limits>

using namespace std;

typedef long long ll;

ll data[100+5];

ll zheng(ll a)

{

    if(a < 0)

        return -a;

    return a;

}

int main()

{

    ll uup = 1e18;

    data[0] = 1;

    int w,m;

    while(scanf("%d%d",&w,&m) != EOF){

        int n = 0;

        ll t1 = w;

        ll t2 = 1;

        while(t1 - (1.0*(1 - t2)/(1-w)) <= m && n+2<=100){

//            printf("first is %I64d,second is %I64d\n",t1,(1-t2)/(1-w));

//            printf("m = %d\n",m);

            data[++n] = t1;

            t1 *= w;

            t2 *= w;

        }

        if(t1 <= uup)

            data[++n] = t1;

//        printf("data\n");

//        for(int i=0; i<=n; i++)

//            printf("%I64d  ",data[i]);

//        printf("\n");

        int flag = 0;

        int ff = 1;

        ll ans = 0;

        for(int j=n; j>=0; j--){

            ff = 1;

            ans = 0;

//            printf("\nj = %d\n",j);

//            ans = data[j];

//            if(j == 0 && ans == w){

//                flag = 1;

//                break;

//             }

            for(int i=j; i>=0; i--){

                if(zheng(ans + ff*data[i] - m) >= zheng(ans - m))

                    continue;

                ans += ff*data[i];

//                printf("for %d,ans = %I64d,ff = %d\n",i,ans,ff);

                if(ans > m)

                    ff = -1;

                else if(ans < m)

                    ff = 1;

                else {

                    flag = 1;

                    break;

                }

            }

            if(flag)

                break;

        }

        if(flag)

            printf("YES\n");

        else

            printf("NO\n");

    }

    return 0;

}

D(赛后)

#include <cstdio>

#include <cmath>

#include <cstring>

#include <string>

#include <iostream>

#include <algorithm>

#include <vector>

using namespace std;

const int MAXN = 2000+5;

typedef long long ll;

struct D

{

    int x,y;

}dd[MAXN];

//vector<int>mm;

//int vis[MAXN][MAXN];

bool valid(D a,D b,D c)

{

//    if(b.x == c.x){

//        if(a.x == b.x)

//            return true;

//        return false;

//    }

//    if(a.x == b.x)

//        return false;

    int k1 = (a.y - b.y) * (b.x - c.x);

    int k2 = (b.y - c.y) * (a.x - b.x);

    if(k1 == k2)

        return true;

    return false;

}

int main()

{

    int n;

    while(scanf("%d",&n) != EOF){

//        memset(vis,0,sizeof(vis));

        for(int i=0; i<n; i++)

            scanf("%d%d",&dd[i].x,&dd[i].y);

        ll ans = 0;

        for(int i=0; i<n; i++)

            for(int j=i+1; j<n; j++)

                for(int k = j+1; k<n; k++)

                    if(!valid(dd[i],dd[j],dd[k])){

//                        printf("i = %d,j = %d,k = %d\n",i,j,k);

                        ans++;

                    }

//        for(int i=0; i<n; i++){

//            for(int j=i+1; j<n; j++){

//                if(vis[i][j] == 0){

//                    mm.clear();

//                    mm.push_back(i);

//                    mm.push_back(j);

//                    for(int k = j+1; k<n; k++){

//                        if(valid(dd[i],dd[j],dd[k])){

//                            mm.push_back(k);

//                        }

//                    }

//                    for(int i=0; i<mm.size(); i++){

//                        for(int j=i+1; j<mm.size(); j++){

//                            int t1 = mm[i];

//                            int t2 = mm[j];

//                            vis[t1][t2] = vis[t2][t1] = 1;

//                        }

//                    }

                    printf("check i = %d, j = %d\n",i,j);

                    for(int i=0; i<mm.size(); i++)

                        printf("%d ",mm[i]);

                    printf("\n");

//                    ll tt = mm.size();

//                    ans += tt * (tt-1) / 2 * (n - tt);

//                }

//            }

//        }

        printf("%I64d\n",ans);

    }

    return 0;

}

 

Codeforces Round 308 (div 2)

总体叙述:

12’43签到第一题。没什么好说的,求n个矩阵的面积。

44’35第二题完成。由于思路卡断,积分因此有所下降。题意大概是求n以内所有数字位数和,比如1有一位,44有两位。中间出现思路错误的重大失误,开了一个整形数组,想用类似数位dp去统计,然后发现情况巨多巨繁杂。榜上很多人很快过了,说明这题应该没那么难。发现直接除1010就好。原谅我这段时间字符串做得多-_-

中途去看了下第四题,感觉可以做但是比较麻烦。C题做得人多先做C

C题卡死。题意是给一个w和一个m。问是否能用w100次方以内m的幂通过加减运算获得m。很快的想到存在一个n使得wn+1次方剪去前面n个幂的和大于m时,根据等比数列的性质,n+1次方包括它后面的数都不用取了。不要问我是怎么想到的,我只是不想用数组来存大数,太麻烦啦啦啦。WA了两次后发现与其麻烦的讨论从最后一个数还是倒数第二个数开始取,不如直接穷举从哪个数开始取。懒人效应,复杂度1e4小的很。最后的关键卡死,没有想到有些数可以不取。最后发现的时候已经有些慌乱,想不出对策。今早随便一敲,只需要用贪心让每次ansm差的绝对值越来越小就可以了。草草草草草。。。

赛后准备AD

刚刚AD:怎一个草字了得,穷举就能过。。。

A(赛中)

#include <cstdio>

#include <cmath>

#include <cstring>

#include <algorithm>

#include <iostream>

#include <string>

using namespace std;

int main()

{

    int n;

    while(scanf("%d",&n) != EOF){

        int x1,x2,y1,y2;

        int ans = 0;

        for(int i=0; i<n; i++){

            scanf("%d%d%d%d",&x1,&y1,&x2,&y2);

            ans += (x2-x1+1) * (y2-y1+1);

        }

        printf("%d\n",ans);

    }

    return 0;

}

B(赛中)

#include <cstdio>

#include <cmath>

#include <cstring>

#include <string>

#include <algorithm>

#include <iostream>

#include <queue>

using namespace std;

typedef long long ll;

ll fi_down(int a)

{

    ll temp = 1;

    while(temp <= a)

        temp *= 10;

    temp = temp / 10;

    temp -= 1;

    return temp;

}

ll fi_dig(int a)

{

    ll ans = 0;

    ll temp = 1;

    while(temp <= a){

        temp *=10;

        ans++;

    }

    return ans;

}

int main()

{

    int n;

    while(scanf("%d",&n) != EOF){

        ll ans = 0;

        while(n){

            ll temp = fi_down(n);

            ll dig = fi_dig(n);

//            printf("temp = %d,dig = %d\n",temp,dig);

            ans += dig * (n - temp);

            n = temp;

        }

        cout << ans<<endl;

    }

    return 0;

}

C(赛后)

#include <cstdio>

#include <cmath>

#include <cstring>

#include <string>

#include <algorithm>

#include <iostream>

#include <limits>

using namespace std;

typedef long long ll;

ll data[100+5];

ll zheng(ll a)

{

    if(a < 0)

        return -a;

    return a;

}

int main()

{

    ll uup = 1e18;

    data[0] = 1;

    int w,m;

    while(scanf("%d%d",&w,&m) != EOF){

        int n = 0;

        ll t1 = w;

        ll t2 = 1;

        while(t1 - (1.0*(1 - t2)/(1-w)) <= m && n+2<=100){

//            printf("first is %I64d,second is %I64d\n",t1,(1-t2)/(1-w));

//            printf("m = %d\n",m);

            data[++n] = t1;

            t1 *= w;

            t2 *= w;

        }

        if(t1 <= uup)

            data[++n] = t1;

//        printf("data\n");

//        for(int i=0; i<=n; i++)

//            printf("%I64d  ",data[i]);

//        printf("\n");

        int flag = 0;

        int ff = 1;

        ll ans = 0;

        for(int j=n; j>=0; j--){

            ff = 1;

            ans = 0;

//            printf("\nj = %d\n",j);

//            ans = data[j];

//            if(j == 0 && ans == w){

//                flag = 1;

//                break;

//             }

            for(int i=j; i>=0; i--){

                if(zheng(ans + ff*data[i] - m) >= zheng(ans - m))

                    continue;

                ans += ff*data[i];

//                printf("for %d,ans = %I64d,ff = %d\n",i,ans,ff);

                if(ans > m)

                    ff = -1;

                else if(ans < m)

                    ff = 1;

                else {

                    flag = 1;

                    break;

                }

            }

            if(flag)

                break;

        }

        if(flag)

            printf("YES\n");

        else

            printf("NO\n");

    }

    return 0;

}

D(赛后)

#include <cstdio>

#include <cmath>

#include <cstring>

#include <string>

#include <iostream>

#include <algorithm>

#include <vector>

using namespace std;

const int MAXN = 2000+5;

typedef long long ll;

struct D

{

    int x,y;

}dd[MAXN];

//vector<int>mm;

//int vis[MAXN][MAXN];

bool valid(D a,D b,D c)

{

//    if(b.x == c.x){

//        if(a.x == b.x)

//            return true;

//        return false;

//    }

//    if(a.x == b.x)

//        return false;

    int k1 = (a.y - b.y) * (b.x - c.x);

    int k2 = (b.y - c.y) * (a.x - b.x);

    if(k1 == k2)

        return true;

    return false;

}

int main()

{

    int n;

    while(scanf("%d",&n) != EOF){

//        memset(vis,0,sizeof(vis));

        for(int i=0; i<n; i++)

            scanf("%d%d",&dd[i].x,&dd[i].y);

        ll ans = 0;

        for(int i=0; i<n; i++)

            for(int j=i+1; j<n; j++)

                for(int k = j+1; k<n; k++)

                    if(!valid(dd[i],dd[j],dd[k])){

//                        printf("i = %d,j = %d,k = %d\n",i,j,k);

                        ans++;

                    }

//        for(int i=0; i<n; i++){

//            for(int j=i+1; j<n; j++){

//                if(vis[i][j] == 0){

//                    mm.clear();

//                    mm.push_back(i);

//                    mm.push_back(j);

//                    for(int k = j+1; k<n; k++){

//                        if(valid(dd[i],dd[j],dd[k])){

//                            mm.push_back(k);

//                        }

//                    }

//                    for(int i=0; i<mm.size(); i++){

//                        for(int j=i+1; j<mm.size(); j++){

//                            int t1 = mm[i];

//                            int t2 = mm[j];

//                            vis[t1][t2] = vis[t2][t1] = 1;

//                        }

//                    }

                    printf("check i = %d, j = %d\n",i,j);

                    for(int i=0; i<mm.size(); i++)

                        printf("%d ",mm[i]);

                    printf("\n");

//                    ll tt = mm.size();

//                    ans += tt * (tt-1) / 2 * (n - tt);

//                }

//            }

//        }

        printf("%I64d\n",ans);

    }

    return 0;

}

 

利用 TensorFlow 训练自己的目标识别器。本文内容来自于我的毕业设计,基于 TensorFlow 1.15.0,其他 TensorFlow 版本运行可能存在问题。.zip项目工程资源经过严格测试可直接运行成功且功能正常的情况才上传,可轻松复刻,拿到资料包后可轻松复现出一样的项目,本人系统开发经验充足(全领域),有任何使用问题欢迎随时与我联系,我会及时为您解惑,提供帮助。 【资源内容】:包含完整源码+工程文件+说明(如有)等。答辩评审平均分达到96分,放心下载使用!可轻松复现,设计报告也可借鉴此项目,该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 【提供帮助】:有任何使用问题欢迎随时与我联系,我会及时解答解惑,提供帮助 【附带帮助】:若还需要相关开发工具、学习资料等,我会提供帮助,提供资料,鼓励学习进步 【项目价值】:可用在相关项目设计中,皆可应用在项目、毕业设计、课程设计、期末/期中/大作业、工程实训、大创等学科竞赛比赛、初期项目立项、学习/练手等方面,可借鉴此优质项目实现复刻,设计报告也可借鉴此项目,也可基于此项目来扩展开发出更多功能 下载后请首先打开README文件(如有),项目工程可直接复现复刻,如果基础还行,也可在此程序基础上进行修改,以实现其它功能。供开源学习/技术交流/学习参考,勿用于商业用途。质量优质,放心下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值