【NOIP普及2010】三国游戏
原题:
首先可以发现一个性质
每一行(或一列,实际上行和列是相同的)最大数必拿不到
因为稽器人针对你,你也可以针对稽器人
其次可以发现一个性质
每一行次大数必能拿到
你先拿走i,然后稽器人拿走第i行最大数,然后你就能拿到第i行次大了
最后可以发现一个性质
既然每一行的最大数没人拿得到,而次大数你又必能拿到
那直接挑一个最大的次大数就vans了
代码:
1 #include<iostream> 2 #include<cstdio> 3 using namespace std; 4 int n,a[510][510]; 5 int main(){ 6 cin>>n; 7 for(int i=1;i<=n;++i)for(int j=1;j+i<=n;++j){ 8 scanf("%d",&a[i][j+i]); 9 a[j+i][i]=a[i][j+i]; 10 } 11 int ans=0; 12 for(int i=1;i<=n;++i){ 13 int mx1=0,mx2=0; 14 for(int j=1;j<=n;++j){ 15 if(a[i][j]>mx1) mx2=mx1,mx1=a[i][j]; 16 else if(a[i][j]>mx2) mx2=a[i][j]; 17 } 18 ans=max(ans,mx2); 19 } 20 cout<<1<<endl<<ans<<endl; 21 return 0; 22 }