首页 > 代码库 > Codeforces Round #268 (Div. 2)
Codeforces Round #268 (Div. 2)
补题解:
E:只会第四种解法;也只看懂了这一种。
PS:F[X+10^18]=F[X]+1;F[X]表示X的数字之和;
假设X,F[10^18+X]+F[10^18+X-1]+......F[10^18+1]=F[1]+.....+F[X]+X;
这个应该没问题所以有G[10^18+X]-G[10^18]=G[X]+X;
G[X]表示:1-X的数字和的总和;
根据G[10^X]=45*X*10^(X-1);所以G[10^18]=45*18*10^17;
所以G[10^18+X]-G[X]=(G[10^18]+X)%a;
然后就可以推出时X的大小,X=a-G[10^18]%a;
这样这题就完美解决;
1 #include <stdio.h> 2 #include<iostream> 3 void solve(){ 4 unsigned long long s = 100000000000000000ll; 5 __int64 p = s * 10; 6 __int64 a; 7 scanf("%I64d",&a); 8 s = (s * 45) % a; 9 s = (s * 18 + 1) % a;10 a = a - s;11 printf("%I64d %I64d\n",1 + a,p + a);12 }13 int main(){14 solve();15 return 0;16 }
D题:@狗哥有个好想法;
假如B>A;
那么对于一个数组最小的数X,如果能在B-X=PB找到他的匹配,那么不用再A中找到,
原因是假如X“嫁"给了A,在A中会有一个A-X=YA与之搭配。
但是PB就找不到”老婆“了,因为A-X<B-X,但是X已经是最小的,所以PB就无法对应了,
然后就是写法的问题了;
1 #include<iostream> 2 #include<stdio.h> 3 #include<cmath> 4 #include<cstring> 5 #include<algorithm> 6 #include<iostream> 7 #include<map> 8 #include<string> 9 typedef long long ll;10 using namespace std;11 int ans[123456];12 map<int,int>mp;13 14 int n,a,b;15 int pa,pb;16 17 int main()18 {19 cin>>n>>a>>b;20 for (int i=1;i<=n;i++)21 {22 int x;23 cin>>x;24 mp[x]=i;25 }26 int pa=1,pb=2;27 if (a>b) swap(a,b),swap(pa,pb);28 29 for (map<int,int>::iterator mi=mp.begin();mi!=mp.end();mi++)30 {31 int val=mi->first;32 int pos=mi->second;33 if (ans[pos]) continue;34 if (mp.find(b-val)!=mp.end()&&ans[mp[b-val]]!=pa)35 ans[pos]=ans[mp[b-val]]=pb;36 else if (mp.find(a-val)!=mp.end()&&ans[mp[a-val]]!=pb)37 ans[pos]=ans[mp[a-val]]=pa;38 else39 {40 cout<<"NO"<<endl;41 return 0;42 }43 }44 cout<<"YES"<<endl;45 for (int i=1;i<=n;i++) cout<<ans[i]-1<<" ";46 return 0;47 }
C:我分奇数偶数;
因为1*2*3*4=24;
6-5=1;
8-7=1;
10-9=1;
发现了什么,
奇数也可以类推;
1,2,3,4,5手动找一下;
7-6=1;
9-8=1;
然后就可以了
B,A基本照着模拟就可以了
Codeforces Round #268 (Div. 2)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。