A. Lever
题意:给出下面这种字符串,^是杠杆的支点,问杠杆是否平衡。
9===^==1
分析:直接做。
#include <cstdio> #include <cstring> #include <algorithm> using namespace std; char s[1000005]; int main(){ long long i, j, k; long long l, r; while (scanf("%s",s)!=EOF){ long long g = 0; l = r = 0; for (i=0; s[i]; i++){ if (s[i] == '^') break; } g = i; for (i=g-1; i>=0; i--){ if (s[i]=='=')continue; l += (g-i)*(long long)(s[i]-'0'); } for (i=g+1; s[i]; i++){ if (s[i]=='=')continue; r += (i-g)*(long long)(s[i]-'0'); } if (l > r)printf("left "); else if (r > l)printf("right "); else printf("balance "); } return 0; }
B. I.O.U.
题意:给出每个关系,a, b, c表示a欠b c元,问通过调整,最后总的欠债数的和最少是多少,
例如:
1 2 20
2 3 20
总的欠债额是40,调整之后,1欠3 20元,2谁都不欠。
分析:假设每个人被欠的钱都被还了,那么他再拿这个钱去还他欠的钱即可。
#include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int maxn = 102; int g[maxn][maxn]; int ma[maxn]; int n, m; int main(){ while (scanf("%d %d",&n,&m)!=EOF){ memset(g, 0, sizeof(g)); memset(ma, 0, sizeof(ma)); int a, b, c; while (m--){ scanf("%d %d %d",&a,&b,&c); g[a][b] = c; ma[b] += c; } for (int i=1; i<=n; i++){ for (int j=1; j<=n; j++){ if (g[i][j]){ if (ma[i] >= g[i][j]){ ma[i] -= g[i][j]; } else{ ma[i] = 0; break; } } } } int res = 0; for (int i=1; i<=n; i++){ res += ma[i]; } printf("%d ",res); } return 0; }
题意:一个长度大于3的字符串,里面一定含有1,6,8,9,把这个字符串调整一下使得最后的数可以被7整除。
分析:构造。可以把1,6,8,9放到字符串最前面,它的全排列对7的余数覆盖了1,2,3,4,5,6,只要枚举一下全排列即可。
/**************************************** * File Name: 221c.cpp * Author: sky0917 * Created Time: 2013年12月25日 7:24:58 ****************************************/ #include <map> #include <cmath> #include <queue> #include <cstdio> #include <cstring> #include <algorithm> using namespace std; const int maxn = 1000005; int p[4] = {1, 6, 8, 9}; int n; char s[maxn]; int main(){ int i, j, k; while (scanf("%s",s)!=EOF){ n = strlen(s); for (j=0; j<4; j++){ for (i=0; i<n; i++){ if (s[i] == p[j]+'0'){ swap(s[i], s[n-j-1]); } } } s[n-4] = '