2021.08.24 自测1(300)
300=100+100+0+100
[P1019 NOIP2000 提高组] 单词接龙 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
搜索。
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int N=25;
string s[N];
int len,vis[N],n;
inline int read(){
int s=0,w=1;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-')w=-1;
ch=getchar();
}
while(ch<='9'&&ch>='0'){
s=s*10+ch-'0';
ch=getchar();
}
return s*w;
}
int repeat(string a,string b){
for(int l=1;l<min(a.length(),b.length());l++){
int flag=1;
for(int i=0;i<l;i++)if(b[i]!=a[a.length()-l+i])flag=0;
if(flag)return l;
}
return 0;
}
void dfs(string now,int l){
len=max(l,len);
for(int i=1;i<=n;i++){
if(vis[i]>=2)continue;
int li=repeat(now,s[i]);
if(li){
++vis[i];
dfs(s[i],l+s[i].length()-li);
--vis[i];
}
}
}
int main(){
n=read();
for(int i=1;i<=n+1;i++)cin>>s[i];
dfs(' '+s[n+1],1);
cout<<len;
return 0;
}
[P1017 NOIP2000 提高组] 进制转换 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
负进制。(数学)
重点:
1.负进制:-7%-2=-1
为了让负进制的出来的数字为正:
\[(商+1)*除数+(余数-除数)\\
=商*除数+余数\\
=被除数
\]
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
const int N=20;
int n,flag,r,ri,log[20],ans[20];
char jz[25]={'0','1','2','3','4','5','6','7','8','9',
'A','B','C','D','E','F','G','H','I','J'};
inline int read(){
int s=0,w=1;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-')w=-1;
ch=getchar();
}
while(ch<='9'&&ch>='0'){
s=s*10+ch-'0';
ch=getchar();
}
return s*w;
}
void change(int n,int r){
if(!n)return ;
int xi=n%r;
if(xi<0)xi-=r,n+=r;
change(n/r,r);
cout<<jz[xi];
}
int main(){
n=read();r=read();
cout<<n<<"=";
change(n,r);
printf("(base%d)",r);
return 0;
}
原正进制的代码:
printf用法之打印2进制,八进制,十进制,十六进制 - Howe_Young - 博客园 (cnblogs.com)
C语言printf()函数:格式化输出函数_C语言中文网 (biancheng.net)
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
const int N=20;
int n,flag,r,ri,log[20],ans[20];
char jz[25]={'0','1','2','3','4','5','6','7','8','9',
'A','B','C','D','E','F','G','H','I','J'};
inline int read(){
int s=0,w=1;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-')w=-1;
ch=getchar();
}
while(ch<='9'&&ch>='0'){
s=s*10+ch-'0';
ch=getchar();
}
return s*w;
}
int main(){
n=read();ri=read();
r=(ri>0?ri:-ri);
log[0]=1;
for(int i=1;i<=16&&log[i-1]<=37336;i++)log[i]=log[i-1]*r,flag=i;
for(int i=0;i<=16;i++)cout<<log[i]<<" ";cout<<endl<<endl;
cout<<flag<<endl<<endl;
for(int i=0;i<=19;i++)cout<<jz[i]<<" ";cout<<endl<<endl;
int x=(n>0?n:-n);
while(x){
while(log[flag]>x)--flag;
int xi=x/log[flag];
cout<<"front "<<x<<" after ";
x-=xi*log[flag];ans[flag]=xi;
cout<<x<<" xi "<<xi<<" position "<<flag<<" number "<<log[flag]<<endl;
}
cout<<n<<"=";
flag=0;
for(int i=16;i>=0;i--){
if(!flag&&!ans[i])continue;
if(!flag&&ans[i])flag=1;
if(flag)cout<<jz[ans[i]];
}
printf("(base%d)",ri);
return 0;
}
[P1013 NOIP1998 提高组] 进制位 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
进制。(数学+观察)
noip提高1998 进制位:STL对字符串的应用 - deemoender 的博客 - 洛谷博客 (luogu.com.cn)
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<map>
using namespace std;
int n;
char start[10],check[10];
string x,y;
map<char,int>num;
map<char,int>vis;
inline int read(){
int s=0,w=1;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-')w=-1;
ch=getchar();
}
while(ch<='9'&&ch>='0'){
s=s*10+ch-'0';
ch=getchar();
}
return s*w;
}
int main(){
n=read();
cin>>x;
for(int i=1;i<n;i++)cin>>x,start[i]=x[0];
for(int i=1;i<n;i++){
for(int j=1;j<=n;j++){
cin>>x;
if(j!=1&&j!=2&&x==y)return cout<<"ERROR!",0;
y=x;
if(x.length()==2)++num[start[i]],++vis[x[1]];
}
}
for(int i=1;i<n;i++)
if(num[start[i]]!=n-2-vis[start[i]])return cout<<"ERROR!",0;
for(int i=1;i<n;i++)cout<<start[i]<<"="<<num[start[i]]<<" ";\
cout<<endl<<n-1;
return 0;
}
[P1005 NOIP2007 提高组] 矩阵取数游戏 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)
dp+高精/__int128
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
typedef long long ll;
typedef __int128 lll;
const int N=85;
int n,m,a[N];
lll f[N][N],ans,log[N];
inline int read(){
int s=0,w=1;
char ch=getchar();
while(ch<'0'||ch>'9'){
if(ch=='-')w=-1;
ch=getchar();
}
while(ch<='9'&&ch>='0'){
s=s*10+ch-'0';
ch=getchar();
}
return s*w;
}
void print(lll x){
if(x>9)print(x/10);
putchar(x%10+'0');
}
lll solve(int l,int r,int id){
if(f[l][r]!=-1)return f[l][r];
if(r-l>0)
f[l][r]=max((lll)a[l]*log[id]+solve(l+1,r,id+1),(lll)a[r]*log[id]+solve(l,r-1,id+1));
else f[l][r]=a[l]*log[id];
return f[l][r];
}
int main(){
n=read();m=read();
log[0]=1;
for(int i=1;i<=m;i++)log[i]=log[i-1]*2;
for(int i=1;i<=n;i++){
for(int j=1;j<=m;j++)a[j]=read();
memset(f,-1,sizeof(f));
ans+=solve(1,m,1);
}
print(ans);
return 0;
}
posted on
浙公网安备 33010602011771号