http://acm.nyist.net/JudgeOnline/problem.php?pid=709
http://acm.nyist.net/JudgeOnline/problem.php?pid=710
#include <stdio.h>
#include <math.h>
#include <algorithm>
using std::sort;
struct Node{
double left, right;
} arr[102];
bool cmp(Node x, Node y){
return x.right < y.right;
}
int main(){
int t, n, count;
double x, y, r, temp;
scanf("%d", &t);
while(t--){
scanf("%d%lf", &n, &r);
for(int i = 0; i < n; ++i){
scanf("%lf%lf", &x, &y);
temp = sqrt(r*r - y*y);
arr[i].left = x - temp;
arr[i].right = x + temp;
}
sort(arr, arr + n, cmp);
temp = arr[0].right;
count = 1;
for(int i = 1; i < n; ++i){
if(temp < arr[i].left){
temp = arr[i].right;
++count;
}
}
printf("%d\n", count);
}
return 0;
}
http://acm.nyist.net/JudgeOnline/problem.php?pid=711
#include<stdio.h>
#include<algorithm>
#define INF 0x3fffffff
using namespace std;
const int N = 5005;
struct edge
{
int x;
int y;
int v;
}e[N];
int father[N];
void Init(int n)
{
for(int i = 1; i <= n; i++)
father[i] = i;
}
bool comp(edge e1, edge e2)
{
return e1.v > e2.v;
}
int Find(int x)
{
if(x != father[x])
father[x] = Find(father[x]);
return father[x];
}
void Union(int a, int b)
{
int p = Find(a);
int q = Find(b);
if(p > q)
father[p] = q;
else
father[q] = p;
}
int gcd(int a, int b)
{
while(b != 0)
{
int r = a % b;
a = b;
b = r;
}
return a;
}
int main()
{
int T, n, m, i, j, s, t, aa, bb;
scanf("%d",&T);
while(T--)
{
scanf("%d%d",&n,&m);
for(i = 0; i < m; i++)
scanf("%d%d%d",&e[i].x, &e[i].y, &e[i].v);
scanf("%d%d",&s,&t);
sort(e, e+m, comp);
double rate = INF*1.0;
for(i = 0; i < m; i++) //枚举速度最大的边
{
Init(n);
for(j = i; j < m; j++) //查找使S到达T的最大速度
{
if(Find(e[j].x) != Find(e[j].y))
Union(e[j].x, e[j].y);
if(Find(s) == Find(t))
break;
}
if(j == m) break;
int v1 = e[i].v, v2 = e[j].v;
if(v1*1.0 / v2 < rate) //比原来的比值小
{
aa = v1, bb = v2; //记录最大速度和最小速度
rate = v1*1.0 / v2; //更新最小比值
}
}
if(rate == INF)
printf("IMPOSSIBLE\n");
else if(aa % bb == 0)
printf("%d\n",aa/bb);
else
printf("%d/%d\n",aa/gcd(aa,bb), bb/gcd(aa,bb));
}
return 0;
}
http://acm.nyist.net/JudgeOnline/problem.php?pid=712
#include <cstdio>
#include <iostream>
#include <cstring>
using namespace std;
int max(int a, int b)
{
return a > b ? a : b;
}
int main()
{
int T, m, n;
int dp[105][55][55], map[55][55];
scanf("%d", &T);
while(T--)
{
scanf("%d%d", &m, &n);
for(int i = 1; i <= m; ++i)
for(int j = 1; j <= n; ++j)
scanf("%d", &map[i][j]);
memset(dp, 0, sizeof(dp));
int step = m+n-2;
for(int i = 1; i < step; ++i)
{
int t = i+2 > m ? m : i+2;
for(int j = 1; j <= t; ++j)
{
for(int k = j+1; k <= t; ++k)
dp[i][j][k] = max(dp[i-1][j-1][k-1], max(dp[i-1][j][k], max(dp[i-1][j-1][k], dp[i-1][j][k-1])))+map[j][i+2-j]+map[k][i+2-k];
}
}
dp[step][m][m] = max(dp[step-1][m-1][m], dp[step-1][m][m-1])+map[1][1]+map[m][n];
printf("%d\n", dp[step][m][m]);
}
}
http://acm.nyist.net/JudgeOnline/problem.php?pid=714
#include <iostream>
#include<cstdio>
#include<algorithm>
#include<queue>
#include<cstring>
using namespace std;
int main()
{
int m,n,i,j,k;
int a[14];
int b[14];
queue<int>q;
int t;
cin>>t;
while(t--)
{
memset(a,0,sizeof(a));
memset(b,0,sizeof(b));
while(!q.empty())q.pop();
cin>>n;
for(i=1;i<=n;i++)
q.push(i);
for(i=1;i<=n;i++)
{
k=i;
while(k--){
m=q.front();
q.pop();
q.push(m);
}
a[i]=q.front();
q.pop();
}
for(i=1;i<=n;i++)
b[a[i]]=i;
for(i=1;i<n;i++)
cout<<b[i]<<" ";
cout<<b[n]<<endl;
}
return 0;
}
http://acm.nyist.net/JudgeOnline/problem.php?pid=715
#include<stdio.h>
#include<string.h>
int dp[105][105][2];
int main()
{
int t,i,j;
scanf("%d",&t);
dp[1][0][0]=dp[1][0][1]=1;
for(i=2;i<105;i++)
{
dp[i][0][0]=dp[i-1][0][0]+dp[i-1][0][1];
dp[i][0][1]=dp[i-1][0][0];
for(j=1;j<i;j++)
{
dp[i][j][0]=dp[i-1][j][0]+dp[i-1][j][1];
dp[i][j][1]=dp[i-1][j-1][1]+dp[i-1][j][0];
}
}
while(t--)
{
int n,p;
scanf("%d%d",&n,&p);
printf("%d\n",dp[n][p][0]+dp[n][p][1]);
}
}
http://acm.nyist.net/JudgeOnline/problem.php?pid=716