AtCoder Beginner Contest 182----C. To 3
程序员文章站
2022-07-15 11:17:00
...
旧人旧事更值得怀念,或悲或喜每个人身上都承载着某一段时光,但是我会永远清澈永远疯狂永远浪漫。没有人能回到过去重新活过,但你我都可以从现在开始,决定我们未来的模样。
----喻言
题解: 这是一道数论题,首先知道一个性质,就是如果一个数的所有位上的数字加到一块能被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;
}
上一篇: 【leetcode】15.三数之和
下一篇: LeetCode:15.三数之和
推荐阅读
-
AtCoder Beginner Contest 173(E 思维模拟 F 容斥 思维题 )
-
AtCoder Beginner Contest 163 D - Sum of Large Numbers(递推&找规律)
-
AtCoder Beginner Contest 182----C. To 3
-
AtCoder Beginner Contest 182----E. Akari
-
AtCoder Beginner Contest 182 题解
-
AtCoder Beginner Contest 182----D. Wandering
-
【Atcoder】Atcoder Beginner Contest 143
-
AtCoder Beginner Contest 176 D-Wizard in Maze(双端队列)
-
AtCoder Beginner Contest 176
-
AtCoder Beginner Contest 176总结