看到acdream群裏面有朋友問到這題,於是看了一下
一開始還沒看懂,後面才理解題意
題目意思是這樣的
爲了製造italy支持率高的假象
於是刻意安排合適分組以實現調查數據虛高的目的
樣例12 5
結果是12 6
正確的分組方法應該是這樣的
3 | 2:1 |
3 | 2:1 |
3 | 2:1 |
3 | 0:3 |
如此一來就有三個組別支持italy
問題沒有這麼簡單
接下來的問題是還可以分組的要繼續分組
比如16, 你可以氛圍四組,也可以繼續再分為兩組於是乎這題變為了求約數
#include <iostream>
#include <stdio.h>
#include <map>
#include <algorithm>
#include <string.h>
using namespace std;
int l, a[20010];
map<int, int>mp;
int
main()
{
int n, m;
while(cin>>m>>n){
if(m==1){
if(n==1)
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
cout<<"1"<<endl;
continue;
}
int ans=m;
l=0;
for(int i=1; i*i<=m; i++){
if(m%i==0){
a[l++]=i;
if(m/i != i)
a[l++]=m/i;
}
}
sort(a, a+l);
mp.clear();
for(int i=1; i<l; i++){
int tmp=a[i]/2 + 1;
for(int j=1; j<i; j++){
if(a[i]%a[j]==0){
int tmp2=mp[a[j]] * mp[a[i]/a[j]];
if(tmp2<tmp)
tmp=tmp2;
}
}
mp[a[i]]=tmp;
}
ans=mp[m];
if(ans <= n)
cout<<"Yes"<<endl;
else
cout<<"No"<<endl;
cout<<ans<<endl;
}
return 0;
}