500pt:
题目链接:http://codeforces.com/problemset/problem/373/A
分析:用一个map来记录有没有超过两倍的给定值就行
代码:
#include <vector>
#include <list>
#include <map>
#include <set>
#include <deque>
#include <stack>
#include <bitset>
#include <algorithm>
#include <functional>
#include <numeric>
#include <utility>
#include <sstream>
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <ctime>
#include <string.h>
using namespace std;
char a[4][4];
int k;
int main()
{
while(cin>>k)
{
map<int,int> m;
for(int i=0;i<4;i++)
{
for(int j=0;j<4;j++)
{
cin>>a[i][j];
if(a[i][j]!='.')
{
int t = a[i][j]-'0';
m[t]++;
}
}
}
bool flag = true;
for(int i=0;i<=9;i++)
{
if(m[i]>2*k)
flag = false;
}
if(flag)
cout<<"YES"<<endl;
else
cout<<"NO"<<endl;
}
return 0;
}
1000pt:
题目链接:http://codeforces.com/problemset/problem/373/B
分析,因为1-9长度为1,10-99长度为2,那么直接按长度来计算一下就行。。。还要注意大数问题,貌似long long用pow有点问题,还是自己直接相乘计算吧。。。
代码:
#include <vector>
#include <list>
#include <map>
#include <set>
#include <deque>
#include <stack>
#include <bitset>
#include <algorithm>
#include <functional>
#include <numeric>
#include <utility>
#include <sstream>
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <ctime>
#include <string.h>
using namespace std;
typedef unsigned long long ll;
ll w,m,k;
int S(ll x)
{
int ret = 0;
while(x>0)
{
ret++;
x/=10;
}
return ret;
}
ll multi(int digitCount)
{
ll x = 1;
while(digitCount--)
x*=10;
return x;
}
int main()
{
while(cin>>w>>m>>k)
{
ll ret = 0;
int digitCount = S(m);
ll upper = multi(digitCount)-1;
ll cost = (upper-m+1)*k*digitCount;
while(w>=cost)
{
w-=cost;
ret+=(upper-m+1);
m = multi(digitCount);
upper = multi(digitCount+1)-1;
digitCount++;
cost = (upper-m+1)*k*digitCount;
}
ret+=w/(digitCount*k);
cout<<ret<<endl;
}
return 0;
}
1500pt:
题目链接:http://codeforces.com/problemset/problem/373/C
分析:首先最多也就n/2对,肯定是大的放入大的口袋,小的放入小的口袋,先排序,再分成两部分,用两个指针来计算,能放入就放入,不能放入的话,使得小的那个再变得小点,以达到能够放入
代码:
#include <vector>
#include <list>
#include <map>
#include <set>
#include <deque>
#include <stack>
#include <bitset>
#include <algorithm>
#include <functional>
#include <numeric>
#include <utility>
#include <sstream>
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <ctime>
#include <string.h>
using namespace std;
int input[500010];
int n;
int main()
{
while(cin>>n)
{
for(int i=1;i<=n;i++)
{
cin>>input[i];
}
sort(input+1,input+n+1);
int ret = n;
int i = n/2;
int j = n;
while(i>=1&&j>=n/2)
{
if(2*input[i]<=input[j])
{
ret--;
i--;
j--;
}
else
{
i--;
}
}
cout<<ret<<endl;
}
return 0;
}