寒假训练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; }

浙公网安备 33010602011771号