寒假训练Week1

寒假训练_week1___吴晓丽

心得体会

通过这一周的训练,目前感觉还不错,虽然每天有专题,还是感觉做的题比较杂,感觉没有得到系统的训练,之后会重新的去规划一下每天的专题。还有就是虽然有些题是模板题,但是还是不太能理解,需要多次重复去做。

1.4今日题解

CF1621_A

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int t;
	cin>>t;
	while(t--)
	{
		int n,k;
		cin>>n>>k;
		if(k > (n + 1)/2)
		cout<<"-1"<<endl;
		else
		{
			vector<string>s(n,string(n,'.'));
			for(int i = 0;i<k;i++)
			{
				s[2*i][2*i] = 'R'; 
			}
			for(int j = 0;j<n;j++)
			{
				cout<<s[j]<<endl;
			}
		}
	}
	
	return 0;
 } 

CF103496_A

#include<bits/stdc++.h>
using namespace std;
int main()
{
	string a = "Alice";
	string b = "Bob";
	string c = "Cindy";
	string d = "Dani";
	string s1,s2,s3;
	cin>>s1>>s2>>s3;
	if((s1 == a || s2 == a || s3 == a) && (s1 == b || s2 == b || s3 == b)&& (s1 == c || s2 == c || s3 == c))
	{
		cout<<d<<endl; 
	}
	else if((s1 == a || s2 == a || s3 == a) && (s1 == b || s2 == b || s3 == b)&& (s1 == d || s2 == d || s3 == d))
	{
		cout<<c<<endl;
	}
	else if((s1 == a || s2 == a || s3 == a) && (s1 == c || s2 == c || s3 == c)&& (s1 == d || s2 == d || s3 == d))
	{
		cout<<b<<endl;
	}
	else if((s1 == b || s2 == b || s3 == b) && (s1 == c || s2 == c || s3 == c)&& (s1 == d || s2 == d || s3 == d))
	{
		cout<<a<<endl;
	}
    return 0;
 } 

CF103496_B1

#include<bits/stdc++.h>
using namespace std;
const int N = 12345;
int x[N];
int c[N];
int main()
{
	int n;
	cin>>n;
	for(int i = 0;i < n;i++)
	{
		cin>>x[i];
	}
	for(int j = 0 ;j < n;j++)
	{
		cin>>c[j];
	}
	sort(x,x+n);
	sort(c,c+n);
	int flag = 1;
	for(int i = 0 ;i<n;i++)
	{
		if(x[i] > c[i])
		{
			flag = 0;
				break;
		}
	 } 
	 if(flag == 0)
	 {
	 	cout<<"NO"<<endl;
	 }
	 else
	 {
	 	cout<<"YES"<<endl;
	  } 
	return 0;
 } 

CF103496_C

#include<bits/stdc++.h>
using namespace std;
int main()
{
	int n,h,k;
	cin>>n>>h>>k;
	double x[n],y[n];
	for(int i = 0;i<n;i++)
	{
		cin>>x[i]>>y[i];	
	}
	double r = 0,num;
	for(int i = 0; i<n;i++)
	{
		num = sqrt(abs((x[i] - h) *(x[i] - h)) + abs((y[i]-k) * ( y[i] - k)));
		r = max(num,r);		 
	}
	cout << fixed << setprecision(12) << 2*r <<endl;
	
	return 0;
 } 

CF103496_D

#include<bits/stdc++.h>
using namespace std;
const int N = 1e5+10;
int a[N];
int main()
{
	int n,flag = 0;
	cin>>n;
	for(int i = 0;i<n;i++)
	{
		cin>>a[i];
		if(a[i] == 0)
		{
			flag = i;
			break;
		}
	}
	if(flag == 0)
	cout<<flag<<endl;
	else
	cout<<flag+1<<endl;
	
	return 0;
 } 

1.5题解

AcWing 2058. 笨拙的手指

#include<bits/stdc++.h>
#include<unordered_set>
using namespace std;
int get(string s,int b)
{
	int res = 0;
	for(auto c : a)
	res = res * b +c-'0';
	return res;
}
int main()
{
	string a,b;
	cin>>a>>b;
	unordered_set<int> S;
	for(auto& c : a)
	{
		c ^=1;
		S.insert(get(a,2));
		c^=1;
	}
	for(char &c : b)
	{
		char t = c;
		for(int i = 0;i < 3;i++)
		{
			if(i+'0' != t)
			{
				c = i+'0';
				int x = get(b,3);
				if(S.count(x))
				{
					cout<<x<<endl;
					return 0;
				}
			}
			c = t;
		}
	}
	return 0;
 } 

AcWing 2041. 干草堆

#include<bits/stdc++.h>
using namespace std;
const int N = 1e6+10;
int n,m;
int b[N];
int main()
{
	int l,r;
	cin>>n>>m;
	while(m--)
	{
		cin>>l>>r;
		b[l]++;
		b[r+1]--;
	}
	for(int i = 1;i<=n;i++)
	{
		b[i] +=b[i-1];
	}
	sort(b+1,b+n+1);
	cout<<b[n/2+1]<<endl;
	return 0;
} 

AcWing 842. 排列数字

#include<bits/stdc++.h>
using namespace std;
int p[8],n;
bool v[8];
void dfs(int t)
{
    if(n==t)
    {
        for(int i=0; i<n; i++)
        cout << p[i] << " ";
        cout << endl;
        return ;
    }
    for(int i=1; i<=n ; i++)
    {
        if(!v[i])
        {
            p[t]=i;
            v[i]=true;
            dfs(t+1);
            v[i]=false;
        }
    }
}

int main()
{
    cin >> n;
    dfs(0); 
    return 0;
} 

AcWing 843. n-皇后问题

#include<bits/stdc++.h>using namespace std;const int N = 100;int n;char d[N][N];bool col[N],dg[N],udg[N];void dfs(int u){    if(u == n)    {        for(int i = 0;i<n;i++)        {            for(int j = 0;j < n;j++)            {                    cout<<d[i][j];            }            cout<<endl;        }        cout<<endl;        return ;    }    for(int i = 0; i < n;i ++)    {        if(!col[i] && !dg[u + i] && !udg[n-u+i])        {            d[u][i] = 'Q';            col[i] = dg[u+i] = udg[n-u+i] = true;            dfs(u+1);            d[u][i] = '.';            col[i] = dg[u+i] = udg[n-u+i] = false;        }    }}int main(){    cin>>n;    for(int i = 0;i< n;i++)    {        for(int j = 0; j<n ;j++)        {            d[i][j] = '.';        }    }    dfs(0);    return 0; } 

1.6题解

CF1616_A

#include<bits/stdc++.h>using namespace std;int vis[110];int main(){	int t;	cin>>t;	while(t--)	{		memset(vis,0,sizeof(vis));		int n;		cin>>n;		int a[n];		for(int i = 0;i<n;i++)		{			cin>>a[i];			if(a[i]<0)			a[i] = abs(a[i]);			vis[a[i]]++; 			if(vis[a[i]]>=2)			{				vis[a[i]] = 2;			}			}		if(vis[0] != 0)			vis[0] = 1;		int sum = 0;		for(int i = 0;i<=100;i++)		{			sum+=vis[i];						}		cout<<sum<<endl;	}	return 0; } 

1.7

KMP字符串

0#include<bits/stdc++.h>using namespace std;const int N=1e6+5;char p[N],s[N];int ne[N];int main(){    int n,m;    cin >> n >> p+1 >> m >> s+1;    for(int i=2,j=0; i<=n; i++)    {        while(j&&p[i]!=p[j+1]) j=ne[j];        if(p[i]==p[j+1]) j++;        ne[i]=j;    }    for(int i=1,j=0; i<=m; i++)    {        while(j && s[i]!=p[j+1]) j=ne[j];        if(s[i]==p[j+1]) j++;        if(j==n)        {            cout << i-n << " ";            j=ne[j];        }    }    return 0;} 

1.8

AcWing 844. 走迷宫

#include<bits/stdc++.h>using namespace std;int a[]={-1,0,1,0};int b[]={0,1,0,-1};const int N=110; int g[N][N];int d[N][N];int n,m;int bfs(){       memset(d,-1,sizeof d);    queue < pair<int,int> > q;    q.push({0,0});    d[0][0]=0;    while(!q.empty())    {        auto t=q.front();        q.pop();        int x=t.first,y=t.second,tx,ty;;        for(int i=0; i<4; i++)        {            tx=x+a[i];            ty=y+b[i];            if(tx>=0 && tx<n && ty>=0 && ty<m && g[tx][ty]==0 && d[tx][ty]==-1)            {                d[tx][ty]=d[x][y]+1;                q.push({tx,ty});            }        }    }    return d[n-1][m-1];}int main(){    cin >> n >> m;    for(int i=0; i<n; i++)    for(int j=0; j<m; j++)    {        cin >> g[i][j];    }    cout << bfs() << endl;    return 0;}

1.9

A - 魔法少女

#include<bits/stdc++.h>using namespace std;const int N = 10000+10;int n;int a[N];int dp[N][2];int main(){	memset(dp,0,sizeof(dp));	while(~scanf("%d",&n))	{		for(int i = 0;i < n ;i++)		{			cin>>a[i];		}		dp[0][0] = a[0];		dp[0][1] = 0;		dp[1][0] = a[1];		dp[1][1] = 0;		for(int i = 2;i<n;i++)		{			dp[i][0] = min(dp[i-1][0], dp[i-1][1]) + a[i];			dp[i][1] = min(dp[i-1][0], dp[i-2][0]);		}		cout<<min(dp[n-1][1],dp[n-1][0])<<endl;	}	return 0; } 

B - 魔法宝石

#include<bits/stdc++.h>using namespace std;const int N = 10000+10;int n,m;int w[N];int v[N];int dp[N];int main(){	cin>>n>>m;	for(int i = 0;i < n;i++)	{		cin>>w[i]>>v[i];	}	for(int i = 0;i < n;i++)	{		for(int j = m; j>=w[i];j--)		{			dp[j] = max(dp[j],dp[j-w[i]]+v[i]);		}	}	cout<<dp[m]<<endl; 	return 0; } 

C - 严酷的训练

#include<bits/stdc++.h>using namespace std;const int N = 10000+10;int k1,k2,T,m,n;int x[N],t[N],y[N],z[N];int dp[N];int main(){	cin>>k1>>k2>>m>>n;	int ans = k2/k1;	for(int i = 1;i<=n;i++)	{		cin>>t[i];	}	for(int i = 1;i<=m;i++)	{		cin>>x[i]>>y[i];		z[i] = t[x[i]]*ans;	}	cin>>T;	for(int i = 1;i <= m;i++)	{		for(int j = T;j >= z[i] ;j--)		{			dp[j] = max(dp[j - z[i]]+y[i],dp[j]);		}	}	cout<<dp[T];	return 0; }
posted @ 2022-01-11 21:09  YRJQD  阅读(38)  评论(0)    收藏  举报