【长期置顶】刷题日记

AT3600

不难,但是偏模拟。

#include<bits/stdc++.h>
#define reg register int
#define INF (1<<30)
#define t() cout<<"iakioi\n";
using namespace std;
int read(){
	int res=0,fs=1; char c=getchar();
	while(!(c>='0' && c<='9')){ if(c=='-')fs=-1; c=getchar(); }
	while(c>='0' && c<='9')res=res*10+c-'0',c=getchar();
	return res*fs;
}
void print(int x){
    if(x<0) { putchar('-'); x=-x;}
    if(x>9) print(x/10);
    putchar(x%10+'0');
}
int n,cnt,m,a[5010],tmp;
string s,t;
string mx="zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz";
bool iakioi(int st,int ed){
	for(int i=st,j=0;i<ed,j<t.size();i++,j++){
		if(s[i]!='?'&&s[i]!=t[j]) return false;
	}
	return true;
}

int main() {
	ios::sync_with_stdio(false);
	cin>>s>>t;
	if(s.size()<t.size()){
		cout<<"UNRESTORABLE\n";
		return 0;
	}
	for(int i=0;i<s.size();i++){
		if(iakioi(i,i+t.size()-1)){
			string ans="                                                                                                ";
//			t();
//			cout<<i<<endl;
			int st=i,ed=i+t.size()-1;
			for(int w=st,j=0;w<=ed,j<t.size();w++,j++){
//				if(s[i]!='?'&&s[i]!=t[i]) return false;
				ans[w]=t[j];
			}
//			cout<<ans<<endl;
			for(int j=0;j<st;j++) if(s[j]=='?') ans[j]='a';
									else ans[j]=s[j];
			for(int j=ed+1;j<s.size();j++) if(s[j]=='?') ans[j]='a';
									else ans[j]=s[j];
			while(ans[ans.size()-1]==' ') ans.erase(ans.size()-1,1);
			mx=min(mx,ans);
		}
	}
	if(mx=="zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz") cout<<"UNRESTORABLE\n";
	else cout<<mx<<endl;
    return 0;
}

AT3529 [ABC073B] Theater

巨水。

#include<bits/stdc++.h>
#define reg register int
#define INF (1<<30)
using namespace std;
int read(){
	int res=0,fs=1; char c=getchar();
	while(!(c>='0' && c<='9')){ if(c=='-')fs=-1; c=getchar(); }
	while(c>='0' && c<='9')res=res*10+c-'0',c=getchar();
	return res*fs;
}
void print(int x){
    if(x<0) { putchar('-'); x=-x;}
    if(x>9) print(x/10);
    putchar(x%10+'0');
}
int x,y,n,cnt,m,a[5010],ans,tmp;
int main() {
	ios::sync_with_stdio(false);
	cin>>n;
	for(int i=1;i<=n;i++) {
		cin>>x>>y;
		ans+=y-x+1; 
	}
	cout<<ans<<endl;
    return 0;
}

AC link.

AT3853 [ABC085C] Otoshidama

暴力枚举三个面值的张数,注意可能等于00,貌似要枚举多一点(大概到10000)

#include<bits/stdc++.h>
#define reg register int
#define INF (1<<30)
using namespace std;
int read(){
	int res=0,fs=1; char c=getchar();
	while(!(c>='0' && c<='9')){ if(c=='-')fs=-1; c=getchar(); }
	while(c>='0' && c<='9')res=res*10+c-'0',c=getchar();
	return res*fs;
}
void print(int x){
    if(x<0) { putchar('-'); x=-x;}
    if(x>9) print(x/10);
    putchar(x%10+'0');
}
int n,cnt,m,a[5010],ans,tmp;
int main() {
	ios::sync_with_stdio(false);
	cin>>n>>ans;
	for(int i=0;i<=10000;i++){
		for(int j=0;j<=10000;j++){
			int k=n-i-j;
				if(i+j+k==n&&i*10000+j*5000+k*1000==ans&&k>=0){
					cout<<i <<' '<<j<<' '<<k;
					cout<<endl;
					return 0;
				} 
		}
	}
	cout<<"-1 -1 -1\n";
    return 0;
}

AT2653

zz题。

#include<bits/stdc++.h>
#define reg register int
#define INF (1<<30)
using namespace std;
int read(){
	int res=0,fs=1; char c=getchar();
	while(!(c>='0' && c<='9')){ if(c=='-')fs=-1; c=getchar(); }
	while(c>='0' && c<='9')res=res*10+c-'0',c=getchar();
	return res*fs;
}
void print(int x){
    if(x<0) { putchar('-'); x=-x;}
    if(x>9) print(x/10);
    putchar(x%10+'0');
}
int n,cnt,m,a[5010],ans,tmp;
int main() {
	ios::sync_with_stdio(false);
	cin>>n>>m;
	for(int i=1;i<=n;i++) cin>>a[i];
	sort(a+1,a+n+1);
	for(int i=n;i>=n-m+1;i--) ans+=a[i];
	cout<<ans<<endl; 
    return 0;
}

AT2018 [ABC043B] バイナリハックイージー / Unhappy Hacking (ABC Edit)

字符串模拟题,注意

如果字符串是空的,什么都不会发生。

不判断会RERE
别问我怎么知道的

#include<bits/stdc++.h>
#define reg register int
#define INF (1<<30)
using namespace std;
int read(){
	int res=0,fs=1; char c=getchar();
	while(!(c>='0' && c<='9')){ if(c=='-')fs=-1; c=getchar(); }
	while(c>='0' && c<='9')res=res*10+c-'0',c=getchar();
	return res*fs;
}
void print(int x){
    if(x<0) { putchar('-'); x=-x;}
    if(x>9) print(x/10);
    putchar(x%10+'0');
}
int n,cnt,m,a[5010],ans,tmp;
string s;
int main() {
	ios::sync_with_stdio(false);
	char c;
	while(cin>>c){
		if(c=='0') s+='0';
		if(c=='1') s+='1';
		if(c=='B'&&!s.empty()) s.erase(s.size()-1,1);
	}
	cout<<s<<endl;
    return 0;
}

AT360 雨上がり

dp。

#include<bits/stdc++.h>
#define reg register int
#define INF (1<<30)
using namespace std;
int read(){
	int res=0,fs=1; char c=getchar();
	while(!(c>='0' && c<='9')){ if(c=='-')fs=-1; c=getchar(); }
	while(c>='0' && c<='9')res=res*10+c-'0',c=getchar();
	return res*fs;
}
void print(int x){
    if(x<0) { putchar('-'); x=-x;}
    if(x>9) print(x/10);
    putchar(x%10+'0');
}
int n,cnt,m,a[5010],ans,tmp,f[114514];
string s;
int main() {
	ios::sync_with_stdio(false);
	cin>>n;
	cin>>s;
	f[1]=s[0]=='X',f[2]=s[1]=='X',f[3]=s[2]=='X';//如果是水池,又增加了一个路过的( 
	for(int i=4;i<=n;i++){
		if(s[i-1]=='X') f[i]=1+min(f[i-1],min(f[i-2],f[i-3]));
		else f[i]=min(f[i-1],min(f[i-2],f[i-3]));
	}
	cout<<f[n];
    return 0;
}

AT3880 [ABC087B] Coins

baoli题。

#include<bits/stdc++.h>
#define reg register int
#define INF (1<<30)
using namespace std;
int read(){
	int res=0,fs=1; char c=getchar();
	while(!(c>='0' && c<='9')){ if(c=='-')fs=-1; c=getchar(); }
	while(c>='0' && c<='9')res=res*10+c-'0',c=getchar();
	return res*fs;
}
void print(int x){
    if(x<0) { putchar('-'); x=-x;}
    if(x>9) print(x/10);
    putchar(x%10+'0');
}
int a,b,c,x,cnt;
int main() {
	ios::sync_with_stdio(false);
	cin>>a>>b>>c>>x;
	for(int A=0;A<=a;A++){
		for(int B=0;B<=b;B++){
			for(int C=0;C<=c;C++){
				int ans=A*500+B*100+C*50;
				if(ans==x) cnt++; 
			}
		}
	}
	cout<<cnt<<endl;
    return 0;
}

AT2659 [ABC068B] Break Number

神仙做法就很艹

#include<bits/stdc++.h>  
double n;
int main() { 
	std::cin>>n;
	std::cout<<(1<<(int)(log2(n))); 
}

AT1979 [AGC001A] BBQ Easy

排序题。

#include<bits/stdc++.h> 
using namespace std; 
int n,cnt,m,a[5010],ans,tmp;
int main() {
	ios::sync_with_stdio(false);
	cin>>n;
	n*=2;
	for(int i=1;i<=n;i++) cin>>a[i];
	sort(a+1,a+n+1);
	for(int i=1;i<=n;i+=2){
		ans+=min(a[i],a[i+1]);
	} 
	cout<<ans;
    return 0;
}

AT4787 [ABC129C] Typical Stairs

sb dp。

/*
边界:
	f[0]=1,f[1]=1;
递推式:
	f[i]=(f[i-1]+f[i-2])%MOD;
特殊情况:
	如果此条路被破坏,解的总数为0 
解:
	f[n]  
*/

#include<bits/stdc++.h> 
#define MOD 1000000007
using namespace std; 
int n,cnt,m,a[114514],ans,tmp;
int f[1919810];
/*
	a[i]的值如果为1,表示此条路被破坏,走不通
	否则,可以走通 
*/
int main() { 
	cin>>n>>m;
	while(m--) cin>>tmp,a[tmp]=1;//标记,tmp这条路被破坏 
	if(!a[0]) f[0]=1;//注意判断第0条路是否被破坏 
	if(!a[1]) f[1]=1;
	for(int i=2;i<=n;i++) 
		if(!a[i]) //!a[i]也就是a[i]==0,判断是否被破坏 
			f[i]=(f[i-1]+f[i-2])%MOD; 
	cout<<f[n]<<endl;//解就是f[n] 
    return 0;
}

AT3725 [ARC087A] Good Sequence

就是没达到的部分全部剪掉,超过的部分剪掉超过的 (混乱orz

#include<bits/stdc++.h>
#define reg register int
#define INF (1<<30)
using namespace std;
int read(){
	int res=0,fs=1; char c=getchar();
	while(!(c>='0' && c<='9')){ if(c=='-')fs=-1; c=getchar(); }
	while(c>='0' && c<='9')res=res*10+c-'0',c=getchar();
	return res*fs;
}
void print(int x){
    if(x<0) { putchar('-'); x=-x;}
    if(x>9) print(x/10);
    putchar(x%10+'0');
}
int n,cnt,m,a[114514],ans,tmp;
map<int,int>t,vis;
int main() {
	ios::sync_with_stdio(false);
	cin>>n;
	for(int i=1;i<=n;i++) cin>>a[i],t[a[i]]++;
	for(int i=1;i<=n;i++){ 
		if(t[a[i]]>=a[i]) ans+=t[a[i]]-a[i],t[a[i]]=a[i];
		else if(t[a[i]]<a[i]) ans+=t[a[i]],t[a[i]]=0;
	}
	cout<<ans<<endl;
    return 0;
}

AT1124 電卓ゲーム

把每种情况暴力一遍


赞赏