2020.05.02【NOIP普及组】模拟赛C组31

链接

T1:

简单爆力

var
i,j,k,m,n,max,min:longint;
a:array['a'..'z']of longint;
c:char;
begin
    assign(input,'word.in');
    assign(output,'word.out');
    reset(input);
    rewrite(output);
    min:=maxlongint;
    read(c);
    while not eoln do
    begin
        inc(a[c]);
        read(c);
    end;
    inc(a[c]);
    for c:='a' to 'z' do
    begin
        if a[c]<>0 then
        begin
            if a[c]>max then max:=a[c];
            if a[c]<min then min:=a[c];
        end;
    end;
    k:=max-min;
    if (k=1)or(k=0) then begin writeln('No Answer');writeln(0); end
    else
    begin
        for j:=2 to trunc(sqrt(k)) do
        if k mod j=0 then begin m:=1;break; end;
        if m=0 then
        begin
            writeln('Lucky Word');
            writeln(k);
        end;
    end;
    close(input);
    close(output);
end.

T2:

转换成二进制康康

你发现了什么

在这里插入图片描述

#include<iostream>
#include<cmath>
#include<cstdio>
using namespace std;
int m,n,x,y,k;
int a[1001010];
long long ans;
int main(){
	freopen("sequence.in","r",stdin);
	freopen("sequence.out","w",stdout);
	cin>>n>>k;
	while(k!=0){
		m++;
		a[m]=k%2;
		k/=2;
	}
	for(int i=1;i<=m;i++){
		ans=ans+pow(n,i-1)*a[i];
	}
	cout<<ans;
	return 0;
}

T3:

爆搜一下,你就知道

var
i,j,k,m,n,x,y,t:longint;
a:array[0..1000]of char;
s:string;
procedure dfs(x,y:longint;ss:string);
begin
    if(x>t-m+2)then exit;
    if(y=n)then
    begin
        if(k>0)and(k<=5) then
        begin
            writeln(ss);
            inc(k);
        end;
        if(k=0)then if(ss=s)then k:=1;
        exit;
    end;
    dfs(x+1,y+1,ss+a[x]);
    dfs(x+1,y,ss);
end;
begin
    assign(input,'count.in');
    assign(output,'count.out');
    reset(input);
    rewrite(output);
    readln(m,t,n);
    read(s);
    j:=0;
    for i:=m to t do
    begin inc(j);a[j]:=chr(i+96); end;
    dfs(1,0,'');
    close(input);
    close(output);
end.

T4:

设一个4维的f
分别表示小渊和小轩的位置的最大值
然后就

#include<iostream>
#include<cstdio>
using namespace std;
int n,m,a[100][100],f[51][51][51][51];
int main(){
	freopen("message.in","r",stdin);
	freopen("message.out","w",stdout);
	cin>>n>>m;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			cin>>a[i][j];
		}
	}
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			for(int i1=1;i1<=n;i1++){
				for(int j1=j+1;j1<=m;j1++){
					f[i][j][i1][j1]=max(f[i][j][i1][j1],
					max(f[i-1][j][i1-1][j1],max(
					f[i-1][j][i1][j1-1],max(
					f[i][j-1][i1-1][j1],f[i][j-1][i1][j1-1])))+a[i][j]+a[i1][j1]);
				}
			}
		}
	}
	cout<<f[n][m-1][n-1][m];
	return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值