【十一月】第六次课堂练习

p1577

#include<stdio.h>
#include<algorithm>
using namespace std;
int n,k;
int l[10005];
int ans;
bool check(int length){
    if(length == 0) return true;
    int sum = 0;
    for(int i=1;i<=n;i++) sum+=l[i]/length;
    if(sum>=k) return true;
    else return false; 
}
int main(){
    scanf("%d%d",&n,&k);
    int right = 0,left = 0,mid;
    for(int i=1;i<=n;i++){
        float li;
        scanf("%f",&li);
        l[i] = li*100;
        if(l[i]>right) right = l[i];
    } 
    ans = 0;
    while(left<=right){
        mid = (left+right)/2;
        if(check(mid)) {
            ans = max(ans,mid);
            left = mid+1;
        }
        else right = mid-1;
    }
    printf("%.2lf",ans*0.01);
    return 0;
} 
View Code

p3392

#include<iostream>
#include<algorithm>
using namespace std;
int n,m,ans=0x7fffffff,w[51],b[51],r[51];
string s;
inline int check(char c){
    int tot=0;
    for(int i=0;i<m;++i)
        if(s[i]!=c)++tot;
    return tot;    
}
int main(int argc, char const *argv[])
{
    cin>>n>>m;
    for(int i=1;i<=n;++i){
        cin>>s;
        w[i]=w[i-1]+check('W');
        b[i]=b[i-1]+check('B');
        r[i]=r[i-1]+check('R');
    }
    for(int i=1;i<n-1;++i)
        for(int j=i+1;j<n;++j)
            ans=min(ans,w[i]+b[j]-b[i]+r[n]-r[j]);
    cout<<ans;        
    return 0;
}
View Code

p2615

#include<cstdio>
using namespace std;
int n,a[40][40],x,y;
int main(){
    scanf("%d",&n);
    x=1,y=(n+1)/2;
    for(int i=1;i<=n*n;i++){
        a[x][y]=i;
        if(!a[(x-2+n)%n+1][y%n+1]) x=(x-2+n)%n+1,y=y%n+1;
        else x=x%n+1;//数学运算
    }
    for(int i=1;i<=n;i++){
        for(int j=1;j<=n;j++){
            printf("%d ",a[i][j]);
        }
        printf("\n");
    }
} 
View Code

p1518

#include<bits/stdc++.h>
using namespace std;
char m[12][12];//地图
int f[3],c[3],ans,tdz;//农夫,奶牛,秒数,专属值
bool zt[160005];//记录专属值是否出现
void move(int x,int y,int mi,int h){//移动函数
    if (mi==0){
        if (m[x-1][y]=='*') if (h==0) f[0]=1; else c[0]=1;
        else if (h==0) f[1]--; else c[1]--;
    }else if (mi==1){
        if (m[x][y+1]=='*') if (h==0) f[0]=2; else c[0]=2;
        else if (h==0) f[2]++; else c[2]++;
    }else if (mi==2){
        if (m[x+1][y]=='*') if (h==0) f[0]=3; else c[0]=3;
        else if (h==0) f[1]++; else c[1]++;
    }else{
        if (m[x][y-1]=='*') if (h==0) f[0]=0; else c[0]=0;
        else if (h==0) f[2]--; else c[2]--;
    }
}
bool pd(){ //判断循环终止条件:如果奶牛坐标与农夫坐标相等,则他们重叠,返回0,退出循环
    if (f[1]==c[1]&&f[2]==c[2]) return 0;
    else return 1;
}
int main(){
    for (int i=0;i<=11;i++) m[i][0]='*',m[i][11]='*';
    for (int i=1;i<=11;i++) m[0][i]='*',m[11][i]='*';
    for (int i=1;i<=10;i++){
        for (int j=1;j<=10;j++){
            cin>>m[i][j];
            if (m[i][j]=='F') f[1]=i,f[2]=j;
            if (m[i][j]=='C') c[1]=i,c[2]=j;
        }
    }
    while (pd()){//模拟每秒
        tdz=f[1]+f[2]*10+c[1]*100+c[2]*1000+f[0]*10000+c[0]*40000;
        if (zt[tdz]){//死循环了就输出0并结束程序
            cout<<0<<endl;
            return 0;
        }
        zt[tdz]=1;//标记
        move(f[1],f[2],f[0],0);
        move(c[1],c[2],c[0],1);//依次移动农夫和奶牛
        ans++;//记录秒数
    }
    cout<<ans<<endl;//输出
    return 0;
}
View Code

p1601

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
char A[101],B[101];
int len_a,len_b,len_c;
int a[101],b[101],c[101];
int t;
int main(){
    scanf("%s",A);
    scanf("%s",B);
    len_a = strlen(A);
    len_b = strlen(B);
    for(int i=0;i<len_a;i++) a[len_a-i-1]=A[i]-'0';
    for(int i=0;i<len_b;i++) b[len_b-i-1]=B[i]-'0';
    len_c = max(len_a,len_b);
    t = 0;
    for(int i=0;i<len_c;i++){
        c[i]=a[i]+b[i]+t;
        t=c[i]/10;
        c[i]=c[i]%10;
    }
    if(t) {
        c[len_c]=1;
        len_c++; 
    }
    for(int i=len_c-1;i>=0;i--) printf("%d",c[i]);
    return 0;
}
View Code

p1480

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
char A[5001];
int b;
int len_a,len_c;
long long a[5001],c[5001];
long long t;
int main(){
    scanf("%s",A);
    scanf("%d",&b);
    len_a = strlen(A);
    for(int i=0;i<len_a;i++) a[i]=A[i]-'0';
    len_c = len_a;
    t = 0;
    for(int i=0;i<len_c;i++){
        c[i]=a[i]/b;
        t=a[i]%b;
        a[i+1]+=t*10;
    }
    bool flag = false;
    for(int i=0;i<len_c;i++) {
        if(c[i] == 0&&flag==false) continue;
        flag = true; 
        printf("%d",c[i]);
    }
    return 0;
}
View Code

p2142

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
char A[10087],B[10087];
int len_a,len_b,len_c;
int a[10087],b[10087],c[10087];
bool flag;
bool check(){
    if(len_a<len_b) return false;
    else if(len_a>len_b) return true;
    else {
        for(int i=0;i<len_a;i++){
            if(A[i]>B[i]) return true;
            else if(A[i]<B[i]) return false;
        }
    }
    return true;
}
void swapAB(){
    
    flag = false;
        char tmp[10087];
        strcpy(tmp,A);
        strcpy(A,B);
        strcpy(B,tmp);
        
        
        len_a = strlen(A);
        len_b = strlen(B);
}
int main(){
    scanf("%s",A);
    scanf("%s",B);
    len_a = strlen(A);
    len_b = strlen(B);
    flag = true;
    if(check() == false) swapAB();
    for(int i=0;i<len_a;i++) a[len_a-i-1]=A[i]-'0';
    for(int i=0;i<len_b;i++) b[len_b-i-1]=B[i]-'0';
    len_c = max(len_a,len_b);
    for(int i=0;i<len_c;i++){
        if(a[i]<b[i]){
            a[i]+=10;
            a[i+1]--;
        }
        c[i]=a[i]-b[i];
    }
    while(c[len_c-1]==0&&len_c-1>0) len_c--;
    if(flag == false) printf("-");
    for(int i=len_c-1;i>=0;i--) printf("%d",c[i]);
    return 0;
}
View Code

p1303

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
char A[2001],B[2001];
int len_a,len_b,len_c;
int a[2001],b[2001],c[4001];
int t;
int main(){
    scanf("%s",A);
    scanf("%s",B);
    len_a = strlen(A);
    len_b = strlen(B);
    for(int i=0;i<len_a;i++) a[len_a-i-1]=A[i]-'0';
    for(int i=0;i<len_b;i++) b[len_b-i-1]=B[i]-'0';
    len_c = len_a+len_b-1;
    for(int i=0;i<len_a;i++){
        for(int j=0;j<len_b;j++){
            c[i+j] += a[i]*b[j];
            c[i+j+1] += c[i+j]/10;
            c[i+j] %= 10;
        }
    }
    if(c[len_c]) len_c++;
    while(c[len_c-1]==0&&len_c-1>0) len_c--;
    for(int i=len_c-1;i>=0;i--) printf("%d",c[i]);
    return 0;
}
View Code

p1009

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
int n;
int len[51];
int a[51][2001];
int len_c,c[2001];
void mul(int b){
    len[b] = len[b-1];
    for(int i=0;i<len[b];i++){
        a[b][i] += a[b-1][i]*b;
        a[b][i+1] = a[b][i]/10;
        a[b][i] %= 10;
    }
    while(a[b][len[b]]){
        a[b][len[b]+1] = a[b][len[b]]/10;
        a[b][len[b]]%=10;
        len[b]++;
    } 
}
void add(int b){
    len_c = max(len_c,len[b]);
    for(int i=0;i<len_c;i++){
        c[i] += a[b][i];
        c[i+1] +=c[i]/10;
        c[i]%=10; 
    }
    if(c[len_c]) len_c++;
}
int main(){
    scanf("%d",&n); 
    len[0] = a[0][0] = 1;
    len_c=1;
    for(int i=1;i<=n;i++) {
        mul(i);
        add(i);
    } 
    for(int i=len_c-1;i>=0;i--) printf("%d",c[i]);
    return 0;
}
View Code

 

posted @ 2021-11-26 16:46  Oranges  阅读(66)  评论(0编辑  收藏  举报