1. 程式人生 > 實用技巧 >NOIP普及組

NOIP普及組

2019

P5660 數字遊戲

#include<bits/stdc++.h>
using namespace std;

int ans;
char dd;
int main()
{
	for(int i=1;i<=8;i++)
	{
		dd=getchar();
		if(dd=='1') ans++;
	}
	printf("%d",ans);
}

P5681 [CSPJX2019]面積【民間資料】

#include<bits/stdc++.h>
using namespace std;
#define int long long
int a,b,c;
signed main()
{
	cin>>a>>b>>c;
	if(a*a>b*c) cout<<"Alice";
	else cout<<"Bob"; 
}

P5682 [CSPJX2019]次大值

#include<bits/stdc++.h>
using namespace std;
const int N=2e5+5;
int n,a[N];

signed main()
{
	scanf("%d",&n);
	for(int i=1;i<=n;++i) scanf("%d",&a[i]);
	sort(a+1,a+n+1);
	a[0]=unique(a+1,a+n+1)-a-1;
	
	if(a[0]==1) printf("-1");
	else if(a[0]==2) printf("%d",a[2]%a[1]);
	else printf("%d",max(a[a[0]]%a[a[0]-1],a[a[0]-2]));
	
}

P5663 加工零件

因為每次都會向所有相連的點索取,所以如果1和2相連,1要生產一個5的零件,2就要生產一個4,1就得生產3,2就得生產2,1就得生產1,2就得生產原材料,會發現1要生產1、3、5時往後遞2都會生產原材料。
那麼奇數階段,就是兩個點之間最短的奇數路的長度小於等於給出的階段,1就得給原材料。偶數階段同理。

#include<bits/stdc++.h>
using namespace std;

const int N=1e5+5,M=2e5+5;
int n,m,q;
int te,v[M],pre[M],tail[N],dis[N][2];

inline void add(int x,int y)
{
	++te;
	v[te]=y;
	pre[te]=tail[x];
	tail[x]=te;
}

void bfs()
{
	vector<pair<int,int> >q; 
	
	memset(dis,-1,sizeof(dis));
	
	dis[1][0]=0;
	q.push_back({1,0});
	
	int l=0;
	while(l<q.size())
	{
		int x=q[l].first,y=q[l].second;l++;
		
		for(int i=tail[x];i;i=pre[i])
		if(dis[v[i]][y^1]==-1)
		{
			dis[v[i]][y^1]=dis[x][y]+1;
			q.push_back({v[i],y^1});
		}
	}
}

int main()
{
	scanf("%d %d %d",&n,&m,&q);
	for(int i=1,x,y;i<=m;++i) scanf("%d %d",&x,&y),add(x,y),add(y,x); 
	bfs();
	for(int i=1,x,y;i<=q;++i)
	{
		scanf("%d %d",&x,&y);
		if(dis[x][y&1]!=-1&&dis[x][y&1]<=y) printf("Yes\n");
		else printf("No\n");
	}
}