题意:给一个n,n可以减去x(n%x!=0);输出最小 n 的可能值;除了n==2以外,所有的数 n 都可以被减成 1;
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int main()
{
int n;
scanf("%d",&n);
if(n!=2) printf("1\n");
else printf("2\n");
}
B. Farewell Party
题意:一场舞会中有n个人,给出n个值 ai代表n个人中 有多少个人穿的衣服的编号与 第i个人不同。
求是否能输出每一个人的衣服编号([1,n]),如果可以 ,则输出 “Possible”及 每一个人的编号,不行,则输出“Impossible”;
思路:逆向思考,记录每一个人有多少个人与他自己的衣服编号相同(ai=n-ai);
把所有相同个数的归类到一个vector中。
#include<bits/stdc++.h>
using namespace std;
int a[100005],ans[100005],c,t;
vector<int>vec[100005];
int main()
{
int n;
while(~scanf("%d",&n)){c=0;t=1;
for(int i=1;i<=n;i++) scanf("%d",&a[i]),a[i]=n-a[i],vec[a[i]].push_back(i);
for(int i=0;i<=n;i++){
if(vec[i].size()){
if(vec[i].size()%i!=0) {
printf("Impossible\n");return 0;
}
for(int j=0;j<vec[i].size();j+=i){
for(int k=0;k<i;k++) ans[vec[i][j+k]]=t;t++;
}
}
}printf("Possible\n");
for(int i=1;i<=n;i++)
printf("%d ",ans[i]);
printf("\n");
}}