Jay的新歌《西西里》真的很好听!!!!!
《晴天》:
为你翘课的那一天
花落的那一天
教室的那一间
我怎么看不见
消失的下雨天
我好想再淋一遍
A.奇偶争锋
根据题意,使用优先队列模拟取走宝石的顺序即可。
有宝石取宝石,没宝石的就把答案记录为0。(注意:一共进行n-1***作,即使都空了也要进行)
代码:
void Rainstorm()
{
cin>>n;
PQI A,B;
rep(i,1,n){
cin>>x;
if(x&1) A.push(x);
else B.push(x);
}
int ans1=A.top(),ans2=B.top();
cout<<max(ans1,ans2)<<" ";
n--;
while(n--){
int nx=0,ny=0;
if(!A.empty()){
nx=A.top();
A.pop();
}
if(!B.empty()){
ny=B.top();
B.pop();
}
if(nx==0) ans2=0;
if(ny==0) ans1=0;
ans1+=ny;
ans2+=nx;
cout<<max(ans1,ans2)<<" ";
}
}
B.数论谜城
不难发现,gcd(n,n+1)=1。
如果区间只有一个点,那就每次与已经得到的最大公因数做一次gcd;
区间一旦超过一个点,最大公因数只能是1。
代码:
void Rainstorm()
{
cin>>n;
int ans=0;
bool g=true;
while(n--){
cin>>l>>r;
if(l!=r){
g=false;
}
else{
if(ans==0) ans=l;
else ans=gcd(ans,l);
}
}
if(!g) cout<<1<<endl;
else cout<<ans<<endl;
}
C.乘鲨破浪
比较有意思的一道题。
首先,最后一步一定是两个人坐船从A岸到B岸。 不难思考,我们肯定要先把不是船夫的送过去,所以第一步:把所有人分为两拨,一拨是船夫,一拨是乘客。我们先把乘客全部送过去,再考虑船夫的事。
很容易想到第一种不能全部过去的情况:有乘客不能被任意一名船夫带走,这时直接输出NO。 否则,我们通过船夫遍历所有乘客,把乘客交给跟他不冲突的船夫。
当我们把所有乘客送走,再考虑船夫的问题,假如船夫的情绪值是2 5 8 11,而冲突参数k是3,很明显此时任意两名船夫都不能同船。所以在这种情况下,一定有人过不去B岸。
注意到,当有两名船夫不冲突的时候,他们可以把所有船夫送过去。比如冲突系数是3,而船夫的情感值分别是1 3 4 6 9 12 3*i...(i=1,2,3...),此时第一名船夫跟第二名船夫不冲突,假设这两名船夫是X跟Y,别的船夫是Zi,很容易发现可以通过先把一名船夫送过去的方式,让他把船送回来,继续下一轮运输,以此来达到送过去一名船夫的目的,具体为:
X Y (把Y送过去) A->B
X X (X自己回来) B->A
Zi Zi (把Zi送过去) A->B
Y Y (Y把船开回来) B->A
如此往复,即可把所有船夫送过去,直到最后一步X跟Y一起走。
n-m名乘客,船夫送一个过去以后,自己回来,共2(n-m)步,送所有船夫过去,除最后两名船夫为1步以外,其它每一名船夫都走4步,共4(m-2)+1步。共计2(n+m)-7步。
特殊的,当船夫只有一名时,需要检查他是否与别人冲突,如果有,那一定过不去,否则,共计2n-3步。
代码:
void Rainstorm()
{
cin>>n>>m>>k;
VI a(n+1);
VI b(m+1);
VI e[N];
rep(i,1,n) cin>>a[i];
rep(i,1,m) cin>>b[i];
vector<bool>vis(n+1,false);
if(m==1){
rep(i,1,n){
if(i==b[1]) continue;
if(a[i]%a[b[1]]==k||a[b[1]]%a[i]==k){
cout<<"NO"<<endl;
return;
}
}
cout<<"YES"<<endl;
cout<<2*n-3<<endl;
int cnt=0;
rep(i,1,n){
if(i==b[1]) continue;
if(cnt==2*n-4){
cout<<b[1]<<" "<<i<<endl;
return;
}
cout<<b[1]<<" "<<i<<endl;
cout<<b[1]<<" "<<b[1]<<endl;
cnt+=2;
}
return;
}
rep(i,1,m) vis[b[i]]=true;
rep(i,1,m){
rep(j,1,n){
if(!vis[j]&&a[b[i]]%a[j]!=k&&a[j]%a[b[i]]!=k&&b[i]!=j){
vis[j]=true;
e[b[i]].emplace_back(j);
}
}
}
rep(i,1,n){
if(!vis[i]){
cout<<"NO"<<endl;
return;
}
}
int cnt1=-1,cnt2=-1;
rep(i,1,m){
rep(j,1,m){
if(i==j) continue;
if(a[b[j]]%a[b[i]]!=k&&a[b[i]]%a[b[j]]!=k){
cnt1=b[i];
cnt2=b[j];
vis[b[i]]=false;
vis[b[j]]=false;
break;
}
}
if(cnt1!=-1) break;
}
if(cnt1==-1){
cout<<"NO"<<endl;
return;
}
cout<<"YES"<<endl;
cout<<2*(n+m)-7<<endl;
rep(i,1,m){
for(auto x:e[b[i]]){
cout<<b[i]<<" "<<x<<endl;
cout<<b[i]<<" "<<b[i]<<endl;
}
}
rep(i,1,m){
if(vis[b[i]]){
cout<<cnt1<<" "<<cnt2<<endl;
cout<<cnt1<<" "<<cnt1<<endl;
cout<<b[i]<<" "<<b[i]<<endl;
cout<<cnt2<<" "<<cnt2<<endl;
}
}
cout<<cnt1<<" "<<cnt2<<endl;
}
后面不会力,d貌似是用数位dp进行检查,用dfs进行划分,确实不会做喵
头文件
#include<bits/stdc++.h>
#define int long long
#define double long double
#define rep(i,l,r) for(int i=l;i<=r;i++)
#define dep(i,r,l) for(int i=r;i>=l;i--)
#define lowbit(x) ((x)&-(x))
#define pb push_back
#define fi first
#define se second
#define endl '\n'
#define all(x) x.begin()+1,x.end()
using namespace std;
using VI=vector<int>;
using VVI=vector<vector<int>>;
using PII=pair<int,int>;
using PQI=priority_queue<int>;
using MI=map<int,int>;
// Author:@RainStormZZ
const int MAX=0x3f3f3f3f3f3f3f3f;
const int INF=-0x3f3f3f3f3f3f3f3f;
const int mod=1e9+7;
const int MOD=998244353;
const int N=2e5+9;
// const int fx[4][2]={{1,0},{-1,0},{0,1},{0,-1}};
// const int fx[8][2]={{-1,-1},{0,-1},{1,-1},{-1,0},{1,0},{-1,1},{0,1},{1,1}};
// const int fx[8][2]={{-2,-1},{-2,1},{-1,-2},{-1,2},{1,-2},{2,-1},{1,2},{2,1}};
/*----------------------------global variable & function----------------------------*/
/*---------------------------------------code---------------------------------------*/
void Rainstorm()
{
}
signed main()
{
ios::sync_with_stdio(0);
cin.tie(0); cout.tie(0);
int _=1;
// cin>>_;
while(_--){
Rainstorm();
}
return 0;
}
《那天下雨了》:
翘课的那一天
花落那一天
教室那间我已看见
消失的下雨天
我想再淋一遍
我应该对你唱着晴天

京公网安备 11010502036488号