codeforce 221 Div2 C - Divisible by Seven
2013-12-25 21:30
274 查看
codeforce 221 Div2 C - Divisible>
当时做这题的时候,就在想是不是1,6,8,9任意组合是否都能被7整除,后来发现不是,我只是随便挑了几个,发现只有1869和9681能被7整除。。。。后来就往其他方向去想了,假如我发现有两个能被7整除,一定有什么蹊跷或者,我把这24种情况都列出来,可能就可以想到这一点了,,,,,可惜可惜。
其实,只要把这24种情况都列出来我们会发现:
1869%7 = 0 8169%7 = 0 9186%7 = 2 6189%7 = 1
1896%7 = 6 8196%7 = 6 9168%7 = 5 6198%7 = 3
1689%7 = 2 8619%7 = 2 9816%7 = 2 6819%7 = 1
1698%7 = 4 8691%7 = 4 9861%7 = 5 6891%7 = 3
1986%7 = 5 8961%7 = 1 9681%7 = 0 6198%7 = 3
1968%7 = 1 8916%7 = 5 9618%7 = 0 6189%7 = 1
0~6各种余数都有,而且题目告诉我们所有数据一定包括1,6,8,9这四个数;
所以我们只需要计算所有的数,除一个1,6,8,9,其余的余7为多少,假如为n,后面就补上一个1,6,8,9组合后余7为:7-n的数。
也就是说,所有的测试数据都能被7整除,而且排列只需调整后面的1,6,8,9这四个数的顺序即可。
如果你有其他解法,请与我留言,一起进步,多谢!!!
当时做这题的时候,就在想是不是1,6,8,9任意组合是否都能被7整除,后来发现不是,我只是随便挑了几个,发现只有1869和9681能被7整除。。。。后来就往其他方向去想了,假如我发现有两个能被7整除,一定有什么蹊跷或者,我把这24种情况都列出来,可能就可以想到这一点了,,,,,可惜可惜。
其实,只要把这24种情况都列出来我们会发现:
1869%7 = 0 8169%7 = 0 9186%7 = 2 6189%7 = 1
1896%7 = 6 8196%7 = 6 9168%7 = 5 6198%7 = 3
1689%7 = 2 8619%7 = 2 9816%7 = 2 6819%7 = 1
1698%7 = 4 8691%7 = 4 9861%7 = 5 6891%7 = 3
1986%7 = 5 8961%7 = 1 9681%7 = 0 6198%7 = 3
1968%7 = 1 8916%7 = 5 9618%7 = 0 6189%7 = 1
0~6各种余数都有,而且题目告诉我们所有数据一定包括1,6,8,9这四个数;
所以我们只需要计算所有的数,除一个1,6,8,9,其余的余7为多少,假如为n,后面就补上一个1,6,8,9组合后余7为:7-n的数。
也就是说,所有的测试数据都能被7整除,而且排列只需调整后面的1,6,8,9这四个数的顺序即可。
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> using namespace std; const int maxn = 1000006; char s[maxn]; int ans[8] = {1869,1896,1986,8691,6198,1689,1968}; int main() { while(scanf("%s",s)!=EOF){ int len = strlen(s); int A[10] = {0}; for(int i=0;i<len;i++){ A[s[i]-'0']++; } int m = 0; for(int i=1;i<A[1];i++) {printf("1");m = (m*10 +1)%7;} for(int i=1;i<=A[2];i++) {printf("2");m = (m*10 +2)%7;} for(int i=1;i<=A[3];i++) {printf("3");m = (m*10 +3)%7;} for(int i=1;i<=A[4];i++) {printf("4");m = (m*10 +4)%7;} for(int i=1;i<=A[5];i++) {printf("5");m = (m*10 +5)%7;} for(int i=1;i<A[6];i++) {printf("6");m = (m*10 +6)%7;} for(int i=1;i<=A[7];i++) {printf("7");m = (m*10 +7)%7;} for(int i=1;i<A[8];i++) {printf("8");m = (m*10 +8)%7;} for(int i=1;i<A[9];i++) {printf("9");m = (m*10 +9)%7;} m = (m*10000) % 7 ; printf("%d",ans[m]); for(int i=1;i<=A[0];i++) printf("0"); printf("\n"); } return 0; }
如果你有其他解法,请与我留言,一起进步,多谢!!!
相关文章推荐
- Codeforces Round #221 (Div. 2)-C. Divisible by Seven
- Codeforces Round #221 (Div. 2) C. Divisible by Seven(构造 大数除法 )
- Divisible by Seven
- Codeforce 221 div1
- cf 376C - Divisible by Seven
- A. Divisible by Seven----打表暴力/数学思维
- cf C. Divisible by Seven
- C. Divisible by Seven
- Divisible by Seven CodeForces - 376C (数论)
- CodeForces - 376C~Divisible by Seven(思路)
- Code forces 376 C Divisible by Seven
- Codeforces Round #381 (Div. 2) &&Codeforce_740
- how many positive integers are divisible by a number d in range [x,y]?
- Codeforce 957 Div2 A. Tritonic Iridescence
- Codeforces Round #441 (Div. 2, by Moscow Team Olympiad) ABCD题解
- Codeforces Round #397 by Kaspersky Lab and Barcelona Bootcamp (Div. 1 + Div. 2 combined) E. Tree Folding
- Adobe--Without using /,% ,+and * operators. write a function to check whether a number is divisible by 3 or nor?
- 1. CountDiv 数数有几个 Compute number of integers divisible by k in range [a..b].
- Divide by Zero 2017 and Codeforces Round #399 (Div. 1 + Div. 2, combined) B. Code For 1(DFS好题)
- Codeforces Round #397 by Kaspersky Lab and Barcelona Bootcamp (Div. 1 + Div. 2 combined)