pre过了三题 终测又挂了一题 又掉分了 真的是 太菜了
A-In Search of an Easy Problem
水题 有一个1就是hard
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include <bits/stdc++.h> 2 using namespace std; 3 typedef long long int ll; 4 5 int n; 6 7 int main() 8 { 9 while(scanf("%d", &n) != EOF){ 10 int easy; 11 bool flag = false; 12 for(int i = 0; i < n; i++){ 13 scanf("%d", &easy); 14 if(easy == 1){ 15 flag = true; 16 } 17 } 18 if(flag){ 19 printf("HARD "); 20 } 21 else{ 22 printf("EASY "); 23 } 24 } 25 return 0; 26 }
B-Vasya and Cornfield
求一下四条边的直线方程 代入点判断即可
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include <bits/stdc++.h> 2 using namespace std; 3 typedef long long int ll; 4 5 int n, d, m; 6 struct node{ 7 int x, y; 8 }; 9 10 int main() 11 { 12 while(scanf("%d%d%d", &n, &d, &m) != EOF){ 13 for(int i = 0; i < m; i++){ 14 int x, y; 15 scanf("%d%d", &x, &y); 16 if(y >= -x + d && y <= -x + 2 * n - d && y >= x - d && y <= x + d){ 17 printf("YES "); 18 } 19 else{ 20 printf("NO "); 21 } 22 } 23 } 24 return 0; 25 }
C-Vasya and Golden Ticket
终测挂了的题
求前缀和 对于每一个i看sum[n]是sum[i]的几倍 然后看i之后有没有1-k倍的sum[i]
挂了是因为没判断每个倍数都有 找到一个就输出了
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include <bits/stdc++.h> 2 using namespace std; 3 typedef long long int ll; 4 5 int n; 6 char s[105]; 7 int presum[105]; 8 9 int main() 10 { 11 while(scanf("%d", &n) != EOF){ 12 memset(presum, 0, sizeof(presum)); 13 scanf("%s", s + 1); 14 for(int i = 1; i <= n; i++){ 15 int t = s[i] - '0'; 16 presum[i] = presum[i - 1] + t; 17 } 18 19 bool flag = false; 20 if(presum[n] == 0){ 21 printf("YES "); 22 continue; 23 } 24 //cout<<presum[n]<<endl; 25 for(int i = 1; i <= n; i++){ 26 if(presum[i] == 0){ 27 continue; 28 } 29 if(presum[n] % presum[i]){ 30 continue; 31 } 32 else{ 33 int k = presum[n] / presum[i]; 34 if(k == 2){ 35 flag = true; 36 break; 37 } 38 int t = 2; 39 for(int j = i + 1; j <= n; j++){ 40 if(presum[j] == (t) * presum[i]){ 41 //cout<<k<<endl; 42 //cout<<i<<" "<<presum[i]<<endl; 43 //cout<<j<<" "<<presum[j]<<" "<<endl; 44 t++; 45 } 46 if(k == t){ 47 flag = true; 48 break; 49 } 50 } 51 if(flag){ 52 break; 53 } 54 } 55 } 56 57 if(flag){ 58 printf("YES "); 59 } 60 else{ 61 printf("NO "); 62 } 63 } 64 return 0; 65 }
D-Vasya and Triangle
三角形公式S=(1/2)*(x1y2*1+x2y3*1+x3y1*1-x1y3*1-x2y1*1-x3y2*1) =1/2[x1(y2-y3)+x2(y3-y1)+x3(y1-y2)]
当2*n*m/k不是整数时一定没有解
有一个点一定是原点 否则一定可以将这个三角形平移到原点
剩下两个点一个点的横坐标和另一个点的纵坐标一定是0 因为这样就已经足够取尽n*m/2中的所有整数了
接下来就是如何凑出x2和y3了 使得x2 * y3 = 2 * n * m / k
应该想到的是gcd
假设a = gcd(2 * n, k) 那么S = (2 * n / a) * m / (k / a)
将他们分配一下 x2 = (2 * n / a), y3 = (m * a / k)
如果x2 或 y3超出范围限制了 就考虑把2这个系数挪一下就好了
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
1 #include <bits/stdc++.h> 2 using namespace std; 3 typedef long long int LL; 4 5 LL n, m, k; 6 7 LL gcd(LL a, LL b) 8 { 9 if(b == 0)return a; 10 return gcd(b, a % b); 11 } 12 13 int main() 14 { 15 while(scanf("%lld%lld%lld", &n, &m, &k) != EOF){ 16 if((2 * n * m) % k){ 17 printf("NO "); 18 } 19 else{ 20 LL x1, x2, x3, y1, y2, y3; 21 x1 = 0ll; y1 = 0ll; x3 = 0ll; y2 = 0ll; 22 LL a = gcd(2 * n, k); 23 //cout<<a<<endl; 24 y3 = a * m / k; 25 x2 = 2 * n / a; 26 //cout<<x2<<" "<<y3<<endl; 27 if(x2 > n || y3 > m){ 28 y3 *= 2; 29 x2 /= 2; 30 } 31 /*if(n % k == 0){ 32 y3 = m; 33 x2 = 2 * n / k; 34 } 35 else if(m % k == 0){ 36 x2 = n; 37 y3 = 2 * m / k; 38 } 39 else{ 40 /*int a = n / gcd(n, k); 41 int b = m / gcd(m, k); 42 if(a * 2 < n){ 43 x2 = a * 2; 44 y3 = b; 45 } 46 else if(a * 2 < m){ 47 y3 = a * 2; 48 x2 = b; 49 } 50 else if(b * 2 < n){ 51 x2 = b * 2; 52 y3 = a; 53 } 54 else if(b * 2 < m){ 55 y3 = b * 2; 56 x2 = a; 57 } 58 }*/ 59 printf("YES "); 60 printf("%lld %lld ", x1, y1); 61 printf("%lld %lld ", x2, y2); 62 printf("%lld %lld ", x3, y3); 63 } 64 } 65 66 return 0; 67 }