题目位置:请点击这里
解决方法同:请点击这里
对于此题,感觉很坑,关键要解决的问题是:设计代码,谨防TLE。。。
1 #include <iostream> 2 #include <cstdlib> 3 #include <cstdio> 4 #include <vector> 5 #include <algorithm> 6 using namespace std; 7 const int MAX_N = 100000, INF = 0x3f3f3f3f; 8 int N; 9 struct node 10 { 11 int mysum, myfirst, mysecond; 12 node() { mysum = 0; myfirst = INF; mysecond = INF; } 13 }; 14 bool Cmp(const node &n1, const node &n2) { 15 if (n1.myfirst == n2.myfirst) 16 return n1.mysecond < n2.mysecond; 17 else return n1.myfirst < n2.myfirst; 18 } 19 20 int main(){ 21 //freopen("input.txt", "r", stdin); 22 //freopen("output.txt", "w", stdout); 23 scanf("%d", &N); 24 vector<node> mynode(N); 25 int i, temp, sum = 0; 26 for (i = 0; i < N; i++){ 27 scanf("%d", &temp); 28 sum = (sum + temp) % N; 29 if (0 == sum) break; 30 if (0 == mynode[sum].mysum) { 31 mynode[sum].mysum++; 32 mynode[sum].myfirst = i + 1; 33 } 34 else { 35 if (1 == mynode[sum].mysum) { 36 mynode[sum].mysum++; 37 mynode[sum].mysecond = i + 1; 38 } 39 } 40 } 41 if (0 == sum) 42 printf("%d %d ", 1, i+1); 43 else { 44 sort(mynode.begin(), mynode.end(), Cmp); 45 for (int i = 0; i < N; i++) { 46 if (2 == mynode[i].mysum) { 47 printf("%d %d ", mynode[i].myfirst + 1, mynode[i].mysecond); 48 break; 49 } 50 } 51 } 52 return 0; 53 }