黑白無常 -- 藍橋杯

黑白無常

問題描述
  某寢室的同學們在學術完之後準備玩一個遊戲:遊戲是這樣的,每個人頭上都被貼了一張白色或者黑色的紙,現在每個人都會說一句話“我看到x張白色紙條和y張黑色的紙條”,又已知每個頭上貼着白色紙的人說的是真話、每個頭上貼着黑色紙的人說的是謊話,現在要求你判斷哪些人頭上貼着的是白色的紙條,如果無解輸出“NoSolution.”;如果有多組解,則把每個答案中貼白條的人的編號按照大小排列後組成一個數(比如第一個人和第三個人頭上貼着的是白紙條,那麼這個數就是13;如果第6、7、8個人都貼的是白紙條,那麼這個數就是678)輸出最小的那個數(如果全部都是黑紙條也滿足情況的話,那麼輸出0)
輸入格式
  第一行爲一個整數n,接下來n行中的第i行有兩個整數x和y,分別表示第i個人說“我看到x張白色紙條和y張黑色的紙條”。
輸出格式
  一行。如果無解輸出“NoSolution.”。否則輸出答案中數值(具體見問題描述)最小的那個,如果全部都是黑紙條也滿足情況的話,那麼輸出0
樣例輸入
2
1 0
1 0
樣例輸出
0
樣例輸入
5
3 1
0 4
1 3
4 0
1 3
樣例輸出
35
數據規模和約定
  n<=8

這個題主要是一個邏輯推理,如果一個人說的是實話他說有n個人是白色的,那就有n個人可以看到n個白色。
如果有人說看到0個白色的,並且他是在說實話,那就說明其他人都是說真話的,那其他人不能說1個白色。

import java.util.Scanner;

public class Main {
	static int count=0;
	
	public static void main(String[] args) {
		Scanner input=new Scanner(System.in);
		int n=input.nextInt();
		int a[]=new int[n];
		int b[]=new int[n];
		int t=0;
		for(int i=0;i<n;i++)
		{
			a[i]=input.nextInt();
			b[i]=input.nextInt();
			if(a[i]==0)
				t++;
		}
		input.close();
		if(t!=0)
		{
			int tag=0;
			int flg=0;
			for(int i=0;i<n;i++)
			{
				int cnt=0;
				if(a[i]!=0)
				{
					for(int j=0;j<n;j++)
					{
						if(i==j)
							continue;
						if(a[i]==a[j])
							cnt++;
						if(a[j]==a[i]+1)
							cnt=0;
					}
					if(cnt>=a[i] && flg<=a[i])
					{
						System.out.print(i+1);
						flg++;
					}
				}
				else
				{
					for(int j=0;j<n;j++)
						if(a[j]==1)
							tag++;
					if(tag==0)
					{
						System.out.println(i+1);
						tag=-1;
					}
				}
			}
			if(flg==0 && tag!=-1)
				System.out.println("NoSolution");
		}
		else
			System.out.println(0);
	}
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章