标签:
最近爱做codeforces。。。。。像比赛题而且有样例,,,嘻嘻
A:因为题意卡了我两回(开始以为必须是10才消掉。。。后来又以为只算1的个数),,其实没啥说的
#include <iostream>
#include<bits/stdc++.h>
using namespace std;
int main()
{
int m;
scanf("%d",&m);
char a[200001];
scanf("%s",a);
int sum=0;
int sum2=0;
int i;
for(i=0;i<strlen(a);i++)
{
if(a[i]==‘1‘) sum++;
else sum2++;
}
printf("%d\n",abs(sum-sum2));
return 0;
}
B:其实应该是有规律的(比如m是偶数奇数位和偶数位一样啊神马的。。。。不过直接模拟了。。。)
#include <iostream>
#include<bits/stdc++.h>
using namespace std;
int main()
{
int m;
scanf("%d",&m);
int a[1001];
int i;
for(i=0;i<m;i++)
{
scanf("%d",&a[i]);
}
int n=m-a[0];
for(i=1;i<m;i++)
{
if(i%2==1)
{
if(a[i]-n!=i&&((m-n+a[i])!=i))
{
printf("No\n");
//printf("%d**\n",i);
return 0;
}
}
else
{
if(a[i]+n!=i&&(n-m+a[i]!=i))
{
printf("No\n");
//printf("%d**\n",i);
return 0;
}
}
}
printf("Yes\n");
return 0;
}
C:只可以留从1开始的链剩下的全拆掉= = ,,,,开始以为只要是连续的都不拆呢,,,,,哎(有点改的乱了,,本来以为要判断有多少连续的链呢)
#include <iostream>
#include<bits/stdc++.h>
using namespace std;
int main()
{
int geshu,lianshu;
scanf("%d%d",&geshu,&lianshu);
int a;
int w,q;
int i,j;
int t=0,bufen=0;
for(i=0;i<lianshu;i++)
{
scanf("%d",&a);
scanf("%d",&w);
if(w==1)
{
for(j=1;j<a;j++)
{
scanf("%d",&q);
if(q==w+1) w++;
else
{
bufen++;
t++;
}
}
}
else
{for(j=1;j<a;j++)
{
scanf("%d",&q);
t++; bufen++;
}}
}
printf("%d\n",bufen+lianshu+t-1);
return 0;
}
D:好难哦。。。。。。。用的就是贪心了,,,,,,只是这题用到了类和容器,对我来说有点难度(至少要用容器不然查找到了删除太费劲了。。)
其实不太熟,,勉强做的
#include <iostream>
#include<bits/stdc++.h>
using namespace std;
pair<int64_t,int64_t>pa[200000];
set<pair<int64_t, int> >X;
pair<int64_t,pair<int64_t,int> >diff[200000];
int ans[200000];
bool cmp(pair<int64_t,pair<int64_t,int> >p1 , pair<int64_t,pair<int64_t,int> >p2)
{
return p1.first > p2.first || (p1.first == p2.first && p1.second.first > p2.second.first);
}
int main()
{
ios_base::sync_with_stdio(false); //这个语句是让cin,cout更快的
cin.tie(NULL), cout.tie(NULL); //加快执行效率。。。。
int n,m; cin >> n >> m;
for(int i = 0; i < n; i ++)
{
int64_t a,b;
cin >> a >> b;
pa[i] = make_pair(a,b); //make_pair 将a,b构造成pair类型赋值pa中
}
sort(pa,pa+n); //直接排序
for(int i = 0; i < m; i ++){
int64_t a;
cin >> a;
X.insert(make_pair(a,i+1)); //将桥的长度和序号做成pair放入X中
}
for(int i = 0; i < n-1; i ++){
diff[i] = make_pair(pa[i+1].first-pa[i].second ,make_pair(pa[i+1].second - pa[i].first,i)); //两个岛的最大与最小距离,,还有对应的i
}
sort(diff,diff+n-1,cmp);
set<pair<int64_t,int> > :: iterator it; //迭代器,用于遍历(类似指针吧~)
for(int i = 0; i < n-1; i ++)
{
int64_t d = diff[i].first;
int64_t s = diff[i].second.first; //最大的值
it = X.lower_bound(make_pair(s+1,0)); //二分查找
if(it == X.begin()) //走到了尽头
{
cout << "No\n";
return 0;
}
it--;
if(it!=X.end())
{
if((*it).first < d) //没走到头但是已经不行了
{
cout << "No\n";
return 0;
}
}
else //走到了尽头
{
cout << "No\n";
return 0;
}
ans[diff[i].second.second] = (*it).second;
X.erase(it);
}
cout << "Yes\n";
for(int i = 0; i < n-1; i ++)
cout << ans[i] << ‘ ‘;
}
路漫漫其修远兮。
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:
原文地址:http://blog.csdn.net/zhangwenchi/article/details/47079579