欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

AtCoder Beginner Contest 182----C. To 3

程序员文章站 2022-07-15 11:17:00
...

旧人旧事更值得怀念,或悲或喜每个人身上都承载着某一段时光,但是我会永远清澈永远疯狂永远浪漫。没有人能回到过去重新活过,但你我都可以从现在开始,决定我们未来的模样。
                                                                                                                                                                           ----喻言

 AtCoder Beginner Contest 182----C. To 3

题解: 这是一道数论题,首先知道一个性质,就是如果一个数的所有位上的数字加到一块能被3整除,那么这个数字就能被3整除。 那么这道题就可以大致分成三种情况了,sum%3=0,本身就能被3整除,故删去0位;sum%3=1,说明这个数字多了一个1,或者多了一个4(也就是两个2),要求删去的最少,这还要统计每位数字%3等于1,2的个数(开个数组统计就行),首先选择删除一个1,如果不够再选择删除两个2,如果不满足输出-1;sum%3=2,说明这个数字多了一个2,或者多了两个1,首先选择删除一个2,如果不够再选择删除两个1,如果还不满足输出-1;

#include <iostream>
#include <cstdio>
#include <algorithm>
#include <string>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <stack>
#include <queue>
#include <set>
#include <map>
#include <vector>
#include <ctime>
#include <cctype>
#include <bitset>
#include <utility>
#include <complex>
#include <iomanip>
#include <numeric>
#include<unordered_set>
#include <climits>//INT_100010n
#include <regex>
//#include<bits/stdc++.h>
#define PP pair<ll,int>
#define inf 0x3f3f3f3f
#define INF 0x7fffffff;
#define llinf 0x3f3f3f3f3f3f3f3fll
#define dinf 1000000000000.0
#define PI 3.1415926
#define LL unsigned int
#define mod 1000000007
#define wc 1e-18
typedef long long ll;
using namespace std;
ll N;
int loc,w[5],sum;
int main(){
    cin>>N;
    ll ss=N;
    while(ss){
        int ls=ss%10;
        w[ls%3]++;
        sum+=ls;
        loc++;
        ss/=10;
    }
//    cout<<sum<<endl;
    if(sum%3==0)
        cout<<0<<endl;
    else if(sum%3==1){
        if(loc>1&&w[1]>=1)
            cout<<1<<endl;
        else if(loc>2&&w[2]>=2)
            cout<<2<<endl;
        else
            cout<<-1<<endl;
    }
    else if(sum%3==2){
        if(loc>1&&w[2]>=1)
            cout<<1<<endl;
        else if(loc>2&&w[1]>=2)
            cout<<2<<endl;
        else
            cout<<-1<<endl;
    }
    return 0;
}

 

相关标签: AtCoder