思路:模拟
#include<bits/stdc++.h>
using namespace std;
#define LL long long
#define clr(a) memset(a,0,sizeof(a))
const int MAXN = 1e5+10;
const int INF = 0x3f3f3f3f;
const int N = 101;
int n,k,x;
int main(){
while(scanf("%d%d",&n,&k)!=EOF){
int ans = INF ;
for(int i=0;i<n;i++){
scanf("%d",&x);
if(k % x == 0){
ans = min(ans , k / x);
}
}
printf("%d\n",ans);
}
return 0;
}
思维题
#include<bits/stdc++.h>
using namespace std;
#define LL long long
#define clr(a) memset(a,0,sizeof(a))
const int MAXN = 1e5+10;
const int INF = 0x3f3f3f3f;
const int N = 101;
int n,pos,l,r;
int main(){
while(scanf("%d%d%d%d",&n,&pos,&l,&r)!=EOF){
int num1 = 0,num2 = 0;
if(l == 1 &&r == n)cout<<"0\n";
else if(l == 1) cout<<abs(r - pos) + 1<<endl;
else if(r == n) cout<< abs(l - pos) + 1<<endl;
else {
num1 = abs(l-pos)+abs(r-l);
num2 = abs(r-pos)+abs(r-l);
cout<<min(num1,num2)+2<<endl;
}
}
return 0;
}
思路: DFS
#include<bits/stdc++.h>
using namespace std;
#define LL long long
#define clr(a) memset(a,0,sizeof(a))
const int MAXN = 1e5+10;
const int INF = 0x3f3f3f3f;
const int N = 101;
char s[N],a[N];
int vis[N],b[N],res[N];
int flag,l1,l2;
void dfs(int pos,bool check){
if(flag) return ;
if(pos == l1){
flag = true ; return;
}
for(int i=9;i>=0;i--){
if(vis[i]>0){
if(check || i == b[pos]){
vis[i] --;
res[pos] = i;
dfs(pos + 1,check);
if(flag) return;
vis[i] ++;
}
else if(i < b[pos]){
vis[i] --;
res[pos] = i;
dfs(pos+1,true);
if(flag) return ;
vis[i]++;
}
}
}
}
bool cmp(char a,char b){
return a > b;
}
int main(){
flag = false;
scanf("%s %s",s,a);
// puts(s);puts(a);
l1 = strlen(s);
l2 = strlen(a);
sort(s,s+l1,cmp);
if(l2 > l1) puts(s);
else if(l2 == l1&&strcmp(s,a)<0) puts(s);
else{
for(int i=0;i<l1;i++)
vis[s[i]-'0'] ++;
for(int i=0;i<l2;i++)
b[i] = a[i] - '0';
dfs(0,false);
for(int i=0;i<l1;i++)
printf("%d",res[i]);
cout<<endl;
}
return 0;
}
思路:拓扑排序
#include<bits/stdc++.h>
using namespace std;
#define LL long long
#define clr(a) memset(a,0,sizeof(a))
const int MAXN = 1e5+10;
const int INF = 0x3f3f3f3f;
const int N = 101;
int n,m;
int in[MAXN],ins[MAXN];
vector<int>g[MAXN];
bool top_sort(int x){
for(int i=0;i<=n;i++){
in[i] = ins[i];
}
int num=0;
in[x] --;
queue<int>q;
for(int i=1;i<=n;i++){
if(in[i] == 0) {
q.push(i);
num++;
}
}
while(!q.empty()){
int top = q.front();
q.pop();
for(int j=0;j<g[top].size();j++){
if(!(--in[g[top][j]])) {
q.push(g[top][j]);
num++;
}
}
}
if(num == n) return true;
else return false;
}
int main(){
clr(in);
scanf("%d%d",&n,&m);
int x,y;
for(int i=0;i<m;i++){
scanf("%d%d",&x,&y);
g[x].push_back(y);
ins[y] ++;
}
for(int i=1;i<=n;i++){
if(top_sort(i)){
puts("YES");return 0;
}
}
puts("NO");
return 0;
}