2019北郵網研機試験

4184 ワード

注意:すべてのコードはテーマの説明に基づいてローカルテストを行い、北郵ojでテストしていないので、ACが必ずできるとは保証されません.
リンクをクリックして、過去の試験問題の要約を表示します.

A歯磨き粉問題


タイトルの説明


4本の歯磨き粉は価格を比較して、一番安い歯磨き粉に戻ります.
入力:
1行目にTを入力し、データのグループ数を示す.2行目にa b c dを入力すると、歯磨き粉4個の価格が表示されます.
出力:
各テストサンプルについて、最低価格を出力します.

サンプル入力


2 2 3 5 2 3 8 7 4

サンプル出力


2 3

解析

#include 
#include 
using namespace std;
int main()
{
	int T;
	cin>>T;
	while(T--)
	{
		int a,b,c,d;
		cin>>a>>b>>c>>d;
		cout<

B閏年問題


タイトルの説明


年の間に4で除かれ100で除かれない普通閏年と400で除かれる世紀閏年の年数を計上する
入力:1行目にTを入力し、データのグループ数を表した後にTグループのデータを入力し、各グループにx yを入力すると開始年(x
出力:xからy年∈[x,y]内の閏年数countを返す

サンプル入力


2 2999 3019 1999 2019

サンプル出力


4 5

解析


閏年定義:1.4で除去できるが100で除去できない.
                  2.400で割り切れる.
#include 
using namespace std;
int main()
{
	int T;
	cin>>T;
	while(T--)
	{
		int x,y;
		cin>>x>>y;
		int count=0;
		for(int i=x;i<=y;i++)
		{
			if(i%400==0) count++;
			else if(i%4==0)
			{
				if(i%100) count++;
			}
		}
		cout<

Cチェーンテーブル操作


タイトルの説明


1つの値が1,2,3,4,...,nのn(0 1ノード値がxのノード2を除去チェーンテーブルを反転し、チェーンテーブルの順序を調整する3に対してチェーンテーブル値がxのノードが指す次のノードの値を問い合わせる
入力:第1行入力Tは、データのグループ数を示す第1行毎にn(ノード数を示す)m(操作数を示す)を入力し、次にm行毎にope(操作方式)x(操作のノード値、操作方式2の場合は入力しない)を入力する
出力:出力操作が3クエリーの場合、調べたノードが指す次のノード値、調べなかったノードが表の末尾(次のノードがない)の場合、「NONE」を出力します.

サンプル入力


1 6 6 3 6 1 2 3 1 2 1 5 3 6

サンプル出力


NONE 3 4

解析


直接配列で作りました.
#include 
#include 
#include 
using namespace std;
int main()
{
	int T;
	cin>>T;
	while(T--)
	{
		/* 
        // 
		int n,m,a[51]={0},size;
		cin>>n>>m;
		size=n;
		for(int i=1;i<=n;i++) a[i]=i;
		while(m--)
		{
			int op,x;
			cin>>op;
			if(op==2) 
			{
				reverse(a+1,a+size+1); 
			}
			else if(op==1)
			{
				cin>>x;
				int flag=size+1;
				for(int i=1;i<=size;i++)
				{
					if(a[i]==x) flag=i;
					if(i>flag)
					{
						a[i-1]=a[i];
					}
				}
				size--;
			}
			else if(op==3)
			{
				cin>>x;
				int flag=0;
				for(int i=1;i<=size;i++)
				{
					if(a[i]==x) 
					{
						if(i+1<=size) 
						{
						flag=1;
						cout<>n>>m;
vector a;
for(int i=1;i<=n;i++) a.push_back(i);
while(m--)
{
int op,x;
cin>>op;
if(op==2) reverse(a.begin(),a.end());
else if(op==1) 
{
cin>>x;
for(vector::iterator it=a.begin();it!=a.end();it++)
{
if(*it==x) a.erase(it);
}
}
else if(op==3)
{
cin>>x;
int ok=0;
for(vector::iterator it=a.begin();it!=a.end();it++)
{
if(*it==x&&it!=a.end()-1) 
{
ok=1;
cout<

Dネットワーク接続


タイトルの説明


Aijはiコンピュータがjコンピュータに接続するオーバーヘッドを表し、Aii=0、Aij=Aji、Aij<=100を保証する.
入力:第1行入力T(T=1)は、データのグループ数を示す第1行毎にN(0出力:このコンピュータネットワークに接続するために必要な最小オーバーヘッドを返します.

サンプル入力


1 6 0 1 4 3 7 3 1 0 2 5 1 8 4 2 0 3 9 2 3 5 3 0 1 4 7 1 9 1 0 3 3 8 2 4 3 0

サンプル出力


7

解析


最小生成ツリー.
#include 
#include 
#include  
#include 
#define INF 0x3fffffff
#define MAXV 100
using namespace std;
int G[MAXV][MAXV],vis[MAXV],d[MAXV];
int prim(int n)
{
	int sum=0;
	memset(vis,0,sizeof(vis));
	fill(d,d+MAXV,INF);
	d[0]=0;
	for(int i=0;i>T;
	while(T--)
	{
		int N;
		cin>>N; 
		fill(G[0],G[0]+MAXV*MAXV,INF);
		for(int i=0;i>G[i][j];
			}
		}
		cout<