| 题目 | 难度 | 知识点 |
|---|---|---|
| A dreamstart的催促 | ★ | 快速幂 |
| B TRDD got lost again | ★★ | bfs |
| C Company | ★ | dfs |
| D >A->B->C- | ★ | 模拟 |
| E PPY的字符串 | ★ | 模拟 |
| F 集训队脱单大法:这是一道只能由学姐我自己出数据的水题 | ★ | 贪心 |
| G 不想再WA了 | ★ | dfs |
| H Ricky’s RealDan’s Ricky | ★ | 模拟 |
| I 小A的期末作业 | ★ | 模拟 |
| J 怪盗基德 & 月之瞳宝石 | ★★ | 二分 |
| k 正方体 | ★ | 模拟 |
| k 简单的分数 | ★ | gcd |
| k HJ浇花 | ★ | 差分 |
dreamstart的催促
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
const int mod=10000019;
typedef long long int LL;
LL a[N],n,ans;
LL qsm(LL a,LL b,LL p)
{
LL sum=1;
while(b)
{
if(b&1) sum=sum*a%p;
b>>=1;
a=a*a%p;
}
return sum%p;
}
int main(void)
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>a[i];
ans=(ans+qsm(a[i],i,mod))%mod;
}
cout<<ans;
return 0;
}
TRDD got lost again
用一个数组存该位置四个方向是不是可以走。
#include<bits/stdc++.h>
using namespace std;
const int N=3010;
const int M=3010*2;
int dx[4]={-1,0,0,1};
int dy[4]={0,-1,1,0};
string s[M];
int d[N][N],a[N][N],n,m;
bool st[N][N][4];
void check(int x,int y)
{
for(int i=0;i<4;i++)
{
int tempx=x+dx[i];
int tempy=y+dy[i];
if(s[tempx][tempy]==' '|| s[tempx][tempy]=='S' || s[tempx][tempy]=='T' ) st[x/2][y/2][i]=1;
}
}
void bfs()
{
int stx,sty,edx,edy;
for(int i=0;i<n;i++)
for(int j=0;j<m;j++)
{
if(a[i][j]==1) stx=i,sty=j;
if(a[i][j]==2) edx=i,edy=j;
}
memset(d,-1,sizeof d);
d[stx][sty]=1;
queue<pair<int,int>>q; q.push({stx,sty});
while(q.size())
{
auto temp=q.front(); q.pop();
int x=temp.first,y=temp.second;
if(x==edx&&y==edy)
{
cout<<d[x][y];
return;
}
for(int i=0;i<4;i++)
{
if(st[x][y][i]&&d[x+dx[i]][y+dy[i]]==-1)
{
d[x+dx[i]][y+dy[i]]=d[x][y]+1;
q.push({x+dx[i],y+dy[i]});
}
}
}
cout<<"TRDD Got lost...TAT";
}
int main(void)
{
cin>>n>>m;
getline(cin,s[0]);
for(int i=0;i<2*n+1;i++) getline(cin,s[i]);
memset(a,-1,sizeof a);
for(int i=1;i<2*n+1;i+=2)
{
for(int j=1;j<2*m+1;j+=2)
{
if(s[i][j]=='S') a[i/2][j/2]=1;
if(s[i][j]=='T') a[i/2][j/2]=2;
if(s[i][j]==' ') a[i/2][j/2]=0;
check(i,j);
}
}
bfs();
return 0;
}
Company
#include<bits/stdc++.h>
using namespace std;
const int N=1e5*4+10;
int h[N],e[N],ne[N],idx;
int cnt[N],ans[N],n,k;
void add(int a,int b){e[idx]=b,ne[idx]=h[a],h[a]=idx++;}
void dfs(int u,int fa)
{
if(cnt[u]<=k) ans[u]=1;
for(int i=h[u];i!=-1;i=ne[i])
{
int j=e[i];
if(j==fa) continue;
dfs(j,u);
ans[u]+=ans[j];
}
}
int main(void)
{
cin>>n>>k;
memset(h,-1,sizeof h);
for(int i=1;i<=n;i++) cin>>cnt[i];
for(int i=1;i<=n-1;i++)
{
int a,b; cin>>a>>b;
add(a,b),add(b,a);
}
dfs(1,-1);
for(int i=1;i<=n;i++) cout<<ans[i]<<" ";
return 0;
}
>A->B->C-
这三个数一定要不一样
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int a[N],n,flag;
int main(void)
{
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=1;i<=n;i++)
{
int p1=i;
int p2=a[i];
int p3=a[p2];
if( a[p3]==p1 && p1!=p2 && p2!=p3 && p1!=p3 ) flag=1;
}
if(flag) puts("YES");
else puts("NO");
return 0;
}
PPY的字符串
#include<bits/stdc++.h>
using namespace std;
string a;
int n;
string f(string a)
{
string ans;
for(int i=0;i<a.size();i++)
{
int j=i;
while(j+1<a.size()&&a[j+1]==a[i]) j++;
ans+=to_string(j-i+1);
ans+=a[i];
i=j;
}
return ans;
}
int main(void)
{
cin>>a>>n;
for(int i=1;i<n;i++) a=f(a);
cout<<a.size()<<" "<<a;
return 0;
}
集训队脱单大法:这是一道只能由学姐我自己出数据的水题
#include<bits/stdc++.h>
using namespace std;
const int M=1e6+10;
const int N=1e5+10;
int a[N],n,maxl,ans;
int st[M];
priority_queue<int>maxr;
int main(void)
{
cin>>n;
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=2;i<=n;i++)
{
maxr.push(a[i]);
st[a[i]]++;
}
for(int i=1;i<=n-1;i++)
{
maxl=max(maxl,a[i]);
if(i>=2)
{
st[a[i]]--;
while(st[maxr.top()]==0) maxr.pop();
}
ans=max(ans,abs(maxl-maxr.top()));
}
cout<<ans;
return 0;
}
不想再WA了
#include<bits/stdc++.h>
using namespace std;
int t,ans,n;
void dfs(int index,int fa)
{
if(index==n)
{
ans++;
return;
}
for(int i=0;i<3;i++)
{
if(fa==2&&i==0) continue;
dfs(index+1,i);
}
}
int main(void)
{
cin>>t;
while(t--)
{
cin>>n;
ans=0;
dfs(0,-1);
cout<<ans<<'\n';
}
return 0;
}
Ricky’s RealDan’s Ricky
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+10;
int a[N],n;
void solve()
{
cin>>n;
int cnt=0;
for(int i=1;i<=n;i++)
{
cin>>a[i];
if(a[i]%2==0) cnt++;
}
if(cnt&&n==1) puts("Ricky is Winner");
else puts("RealDan is Winner");
}
int main(void)
{
int t; cin>>t;
while(t--) solve();
return 0;
}
小A的期末作业
#include<bits/stdc++.h>
using namespace std;
int n;
int main(void)
{
cin>>n;
for(int i=1;i<=n;i++)
{
for(int j=0;j<i-1;j++) cout<<" ";
for(int j=1;j<=n;j++) cout<<"*";
puts("");
}
for(int i=1;i<=n-1;i++)
{
for(int j=n-1-i;j>=1;j--) cout<<" ";
for(int j=1;j<=n;j++) cout<<"*";
puts("");
}
return 0;
}
怪盗基德 & 月之瞳宝石
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+10;
typedef long long int LL;
LL a[N],b[N],n,m;
bool check(LL len)
{
for(int i=1,j=1;i<=n;i++)
{
while(j<=m)
{
LL l=b[j]-len;
LL r=b[j]+len;
if(a[i]>=l&&a[i]<=r) break;
else j++;
}
if(j>m) return false;
}
return true;
}
int main(void)
{
cin>>n>>m;
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=1;i<=m;i++) cin>>b[i];
sort(a+1,a+n+1);
sort(b+1,b+m+1);
LL l=0,r=1e9*4;
while(l<r)
{
LL mid=(l+r)/2;
if(check(mid)) r=mid;
else l=mid+1;
}
cout<<l;
return 0;
}
正方体
#include<bits/stdc++.h>
using namespace std;
int a[5][5],n;
int main(void)
{
cin>>n;
for(int z=1;z<=n;z++)
{
for(int i=0;i<3;i++)
for(int j=0;j<4;j++) cin>>a[i][j];
int cnt1=0,cnt2=0;
for(int i=0;i<4;i++)
{
if(a[0][i]) cnt1=a[0][i];
if(a[2][i]) cnt2=a[2][i];
}
if(cnt1==cnt2&&(a[1][0]==a[1][2])&&(a[1][1]==a[1][3])) puts("Yes!");
else puts("No!");
if(z%50==0) puts("");
}
return 0;
}
简单的分数
#include<bits/stdc++.h>
using namespace std;
int gcd(int a,int b)
{
return b?gcd(b,a%b):a;
}
int t,op,a,b,c,d;
int main(void)
{
cin>>t;
while(t--)
{
cin>>op>>a>>b>>c>>d;
int temp1,temp2;
if(op==1) temp1=a*d+c*b;
else temp1=a*d-c*b;
temp2=b*d;
if(temp1*temp2>=0)
{
temp1=abs(temp1);
temp2=abs(temp2);
int temp=gcd(temp1,temp2);
temp1/=temp;
temp2/=temp;
cout<<temp1<<"/"<<temp2<<'\n';
}else
{ int temp=gcd(temp1,temp2);
temp1/=temp;
temp2/=temp;
temp1=abs(temp1),temp2=abs(temp2);
cout<<temp1*-1<<"/"<<temp2<<'\n';
}
}
return 0;
}
HJ浇花
#include<bits/stdc++.h>
using namespace std;
const int N=1e6+10;
int s[N],cnt[N],n;
int main(void)
{
cin>>n;
for(int i=1;i<=n;i++)
{
int l,r; cin>>l>>r;
l++,r++;
s[l]++,s[r+1]--;
}
for(int i=1;i<=1e6+5;i++) s[i]+=s[i-1];
for(int i=1;i<=1e6+5;i++) cnt[s[i]]++;
for(int i=1;i<=n;i++) cout<<cnt[i]<<" ";
return 0;
}