题目链接:https://ac.nowcoder.com/acm/contest/948/B
题意:有两种传送门,第一种是从编号小的到编号大的,第二种相反.问能否从A到B
题解:
1.A没有神奇,否
2.B没有传送门,否
3.A有神奇B有神奇,是
4.A有神奇B有奇神,枚举B右面的城市,是否有既有神奇又有奇神的城市,有:是,没有:否
#include <bits/stdc++.h>
#define P pair<int,int>
#define fir first
#define sec second
using namespace std;
typedef long long ll;
const int N=1e3+5;
const int mod=998244353;
int a[N],b[N];
int main(){
int n,x;
while(~scanf("%d%d",&n,&x)){
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
for(int i=1;i<=n;i++) scanf("%d",&b[i]);
if(a[1]==0) puts("NO");
else if(a[x]==0&&b[x]==0) puts("NO");
else if(a[x]==1) puts("YES");
else if(b[x]==1){
int f=0;
for(int i=x+1;i<=n;i++) if(a[i]&b[i]){puts("YES");f=1;break;}
if(!f) puts("NO");
}
}
return 0;
}
题目链接:https://ac.nowcoder.com/acm/contest/948/C
题意:一个数列,每次操作是将某个数的(部分)值加到相邻的数上,求最小的操作,使每个数相同.
题解:先计算均值,按某个方向开始(从左往右)枚举每个数,如果这个数大于均值,将与均值的差值加到相邻的数上.如果这个数小于均值,则将从相邻的数那里将差值补齐;如果相等,则不动.
#include <bits/stdc++.h>
#define P pair<int,int>
#define fir first
#define sec second
using namespace std;
typedef long long ll;
const int N=1e2+5;
const int mod=998244353;
int a[N];
int main(){
int n;
while(~scanf("%d",&n)){
int tot=0;
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);tot+=a[i];
}
tot/=n;
int ans=0;
for(int i=1;i<=n;i++){
if(a[i]<tot) a[i+1]-=(tot-a[i]);
else if(a[i]>tot) a[i+1]+=(a[i]-tot);
else ans++;
}
printf("%d\n",n-ans);
}
return 0;
}
题目链接:https://ac.nowcoder.com/acm/contest/948/E
题意:统计[l,r]中2出现的次数(第一眼以为是数位dp,看看数据范围,原来是暴力,233333)
题解:暴力
#include <bits/stdc++.h>
#define P pair<int,int>
#define fir first
#define sec second
using namespace std;
typedef long long ll;
const int N=2e5+5;
const int mod=998244353;
int ck(int x){
int ans=0;
while(x>0){
if(x%10==2) ans++;
x/=10;
}
return ans;
}
int main(){
int l,r;
scanf("%d%d",&l,&r);
int ans=0;
for(int i=l;i<=r;i++){
ans+=ck(i);
}
printf("%d\n",ans);
return 0;
}
题目链接:https://ac.nowcoder.com/acm/contest/948/F
题解:p*q/gcd(p,q)=lcm(q,p);
(暴力大法好)
#include <bits/stdc++.h>
#define P pair<int,int>
#define fir first
#define sec second
using namespace std;
typedef long long ll;
const int N=2e5+5;
conI.I.st int mod=998244353;
int main(){
int x0,y0;
while(~scanf("%d%d",&x0,&y0)){
ll tmp=(ll)x0*y0;
int ans=0;
for(int i=x0;i<=y0;i+=x0){
if(tmp%i==0&&__gcd(i,(int)tmp/i)==x0) ans++;
}
printf("%d\n",ans);
}
return 0;
}
题目链接:https://ac.nowcoder.com/acm/contest/948/G
题意:每个毕业生分得三种不同的纪念品.要使这批礼物分给尽量多的毕业生.
题解:
数据给的是n个礼物,先统计一下礼物的种类和数量.
将礼物尽量多得分出去,那么剩下的要尽量少.比如:1,2,3,4.
从小到大取,只能给2个毕业生发礼物,剩下:0,0,1,3
从大到小取,可以给3个毕业生发礼物0,0,0,1;
可见从大到小取,剩下的礼物越少,
每取一次就要重新排序一次,这个就想到了优先队列.
(菜鸡一个,只能这么猜测)
#include <bits/stdc++.h>
#define P pair<int,int>
#define fir first
#define sec second
using namespace std;
typedef long long ll;
const int N=1e5+5;
const int mod=998244353;
int a[N];
map<int,int> mp;
priority_queue<int,vector<int>,less<int> >q;
int main(){
int n;
scanf("%d",&n);
int tmp;
//int cnt=0;
int tot=0;
for(int i=1;i<=n;i++){
scanf("%d",&tmp);
if(mp[tmp]==0) mp[tmp]=++tot;
a[mp[tmp]]++;
}
n=tot;
ll ans=0;
for(int i=1;i<=n;i++) q.push(a[i]);
while(q.size()>2){
int a=q.top();q.pop();
int b=q.top();q.pop();
int c=q.top();q.pop();
a--;
b--;
c--;
ans++;
if(a>0) q.push(a);
if(b>0) q.push(b);
if(c>0) q.push(c);
}
cout<<ans<<endl;
return 0;
}
题目链接:https://ac.nowcoder.com/acm/contest/948/I
题意:模拟石头剪刀布
#include <bits/stdc++.h>
#define P pair<char,char>
#define fir first
#define sec second
using namespace std;
typedef long long ll;
const int N=2e5+5;
const int mod=998244353;
int ck(char a,char b){
if(a=='j'&&b=='s') return 0;
if(a=='s'&&b=='j') return 1;
if(a=='s'&&b=='b') return 0;
if(a=='b'&&b=='s') return 1;
if(a=='j'&&b=='b') return 1;
return 0;
}
int main(){
int t;
cin>>t;
while(t--){
string a,x,b,y;
cin>>a>>x>>b>>y;
if(x==y) puts("yi qi chi shi.");
else if(ck(x[0],y[0])) cout<<b<<" chishi."<<endl;
else cout<<a<<" chishi."<<endl;
}
return 0;
}
题目链接:https://ac.nowcoder.com/acm/contest/948/K
题解:
#include <bits/stdc++.h>
#define P pair<int,int>
#define fir first
#define sec second
using namespace std;
typedef long long ll;
const int N=2e5+5;
const int mod=998244353;
int main(){
ll a,b;
cin>>a>>b;
if((a/b)%2==0) puts("NO");
else puts("YES");
return 0;
}
原文:https://www.cnblogs.com/-yjun/p/11144048.html