程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> Codeforces Round #221 (Div. 2)

Codeforces Round #221 (Div. 2)

編輯:C++入門知識

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;isum2)
        {
            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;i0)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<









  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved