A 题:
遍历一遍找到^的位置x。
然后从x往前一直到0,左杠杆转化为数字。
然后从x往后一直到len,右杠杆转化为数字。
然后进行比较。
#include#include #include #include #include using namespace std; #define INF 99999999 #define LL __int64 char str[1010001]; int main() { while(~scanf("%s",str)) { int len=strlen(str); int bb,i; bb=0; for(i=0;i =0;i--) { if(str[i]!='=') { sum1+=(bb-i)*(str[i]-'0'); } } for(i=bb+1;i sum2) { cout<<"left"<
B题:如果A欠Bx元,那么A拥有的钱数-x,b拥有的钱数+x;
就这样处理完所有的欠钱关系,最后如果A拥有的钱数为正数y,那么说明最优的结果,除A以外的人应该共给A y钱。
#include#include #include #include #include using namespace std; #define INF 99999999 #define LL __int64 char str[1010001]; int main() { int n,m,i,a,b,c; int num[1001]; while(~scanf("%d%d",&n,&m)) { memset(num,0,sizeof(num)); for(i=0;i 0)sum+=num[i]; } cout<
C题:1689四个数字组成的所有组合对7取余可以得到0~6中的所有数字。
输入一个字符串,从这个字符串中挑出一个1,6,8,9来。
然后对剩下的数对7取余(大整数取余),然后加上1689四个数字组成的相应的序列。
比如说输入123456789。
123456789的其中一个结果为234571869。
234560000+1869=234571689
234560000%7==0;
1869%7==0;
那么234571689%7==0;
#include#include #include #include #include using namespace std; #define INF 99999999 #define LL __int64 char str[1010001]; int num[1010001]; char addstr[7][11]={ "1869","1968","1689","6198","1698","1986","1896" }; int main() { int n,m,i,a,b,c; while(~scanf("%s",str)) { int len=strlen(str); for(i=0;i =0;i--) { ss=ss*10+num[i]; ss=ss%7; } int lls=0; int leap=0; for(i=len-1;i>=4;i--) { if(num[i]==0&&leap==0) { lls++; } else { cout<
D题:dp[l][r]=x: 代表有x行数字的l到r的范围内都为1。
那么结果sum=max(sum,dp[l][r]*(r-l+1));
对于某一行如果为0111101的话,先把dp[2][5]++;dp[7][7]++;
对所有的行运算完成后,然后执行dp[l][r]=dp[l][r]+dp[l-1][r]+dp[l][r+1]-dp[l-1][r+1];
#include#include #include #include #include #include using namespace std; #define INF 99999999 #define LL __int64 char str[10000]; char addstr[7][11]={ "1869","1968","1689","6198","1698","1986","1896" }; int dp[5010][5010]; int num[5010]; int main() { int n,m,i,a,b,c,j,k; while(~scanf("%d%d",&n,&m)) { memset(dp,0,sizeof(dp)); for(i=1;i<=n;i++) { scanf("%s",str); for(j=1;j<=m;j++) { num[j]=str[j-1]-'0'; } for(j=1;j<=m;j++) { if(num[j]==1) { for( k=j+1;k<=m;k++) { if(num[k]==0)break; } dp[j][k-1]++; j=k-1; } } } for(i=1;i<=m;i++) { for(j=m;j>=i;j--) { dp[i][j]+=dp[i-1][j]; dp[i][j]+=dp[i][j+1]; dp[i][j]-=dp[i-1][j+1]; } } int sum; sum=0; for(i=1;i<=m;i++) { for(j=i;j<=m;j++) { sum=max(sum,(j-i+1)*dp[i][j]); } } cout<