传送门:http://codeforces.com/contest/659
加油,for myself。
A:
大概题意:有n个点连成的圆,初始位置在a,走b步,当b>0时为顺时针,<0为逆时针,问会停在哪一点?
题解:
简单判断即可。
代码:
include <cstdio>
#include <iostream>
#include <cstring>
#include <string>
#include <cmath>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <algorithm>
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))
#define mem(a) memset(a, 0, sizeof(a))
#define eps 1e-5
#define M 100005
#define INF 100003
using namespace std;//sexy love//
int main()
{
int n,a,b;
while(cin>>n>>a>>b)
{
if(b>0)
{
int t=a+b%n>n?a+b%n-n:a+b%n;
cout<<t<<endl;
}
else
{
int t=a+b%n<=0?a+b%n+n:a+b%n;
cout<<t<<endl;
}
}
}
B:
大概题意:有n个人m个队,给出每个人的姓名,所在小组和能力(?),按能力从大到小排序,如果能确定每个队的前两名(或者队里只有俩人),输出俩人名字,否则输出“?”
题解;
理解题意,就能写出来。
#include <cstdio>
#include <iostream>
#include <cstring>
#include <string>
#include <cmath>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <algorithm>
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))
#define mem(a) memset(a, 0, sizeof(a))
#define eps 1e-5
#define M 100005
#define INF 100003
using namespace std;//sexy love//
int a,s,d,f,g,h,j,k,l,i,n,m;
vector<pair<int,string> > v[100002];
string x;
int main(){
cin>>n>>m;
for(i=0;i<n;i++){
cin>>x>>a>>s;
v[a].push_back({s,x});
}
for(i=1;i<=m;i++){
sort(v[i].begin(),v[i].end());
reverse(v[i].begin(),v[i].end());
if(v[i].size()==2 || v[i][1].first!=v[i][2].first)
cout<<v[i][0].second<<" "<<v[i][1].second;
else cout<<"?";
cout<<endl;
}
}
C:
大概题意:你已经有n个玩具,m元,每个玩具ai的价钱为i,输出最多你可以买多少玩具及它们的编号
贪心,因为你只有m元,要求买的玩具max,所以从a1开始,并且你只能买不超过m元的玩具
i从i到m,如果ai你已经有了,跳过,否则买下。
代码:
#include <cstdio>
#include <iostream>
#include <cstring>
#include <string>
#include <cmath>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <algorithm>
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))
#define mem(a) memset(a, 0, sizeof(a))
#define eps 1e-5
#define M 100005
#define INF 100003
using namespace std;//sexy love//
int n, m ,a;
set<int> s, t;
int main() {
scanf("%d%d", &n, &m);
while (n--) {
scanf("%d", &a);
s.insert(a);
}
for (int i = 1; i <= m; ++i) {
if (!s.count(i)) {
m -= i;
t.insert(i);
}
}
printf("%lu\n", t.size());
for (const auto &i: t) printf("%d ", i);
return 0;
}
D:
大概题意:给出n+1个点,首尾相连问有多少个点是凹进去的。
规律题,证明不会。
代码:
#include <cstdio>
#include <iostream>
#include <cstring>
#include <string>
#include <cmath>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <algorithm>
#define max(a,b) ((a)>(b)?(a):(b))
#define min(a,b) ((a)<(b)?(a):(b))
#define mem(a) memset(a, 0, sizeof(a))
#define eps 1e-5
#define M 100005
#define INF 100003
using namespace std;//sexy love//
int main()
{
int a;
cin>>a;
cout<<a/2-2<<endl;
}