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<