Codeforces Round \ # 108 (Div. 2) 경 혼 기
4680 단어 데이터 구조ACMcodeforcesRound #108
A. 하나의 vis 배열 로 모든 학생 들 이 한 번 만 기록 되 고 한 번 만 스 캔 하면 됩 니 다.하지만 손 을 떨 면 습관 적 으로 맵 [j] [i] 을 맵 [i] [j] 로 두 드 렸 다.5 분 여 를 낭비 하고 서 야 찾 았 다.
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
char map[200][200];
bool vis[200];
int main(){
int n,m,maxx,ans,i,j;
while(scanf("%d%d",&n,&m)!=EOF){
ans=0;
memset(vis,0,sizeof(vis));
for(i=0;i<n;i++){
scanf("%s",map[i]);
}
for(i=0;i<m;i++){
maxx=-1;
for(j=0;j<n;j++){
maxx=max((int)map[j][i],maxx);
}
for(j=0;j<n;j++){
if(map[j][i]==maxx&&!vis[j]){
vis[j]=1;
ans++;
}
}
}
printf("%d
",ans);
}
return 0;
}
B。생각 이 뚜렷 하지 도 않 은 데 코드 를 두 드 렸 더 니 이 문제 에 너무 많은 시간 이 걸 렸 다.이 문제 의 관건 은 방향 벡터 가 마이너스 이 고 플러스 이 며 0 이 며 걸 을 수 있 고 걸 을 수 없 으 며 x 방향 을 돌 보 느 냐 Y 방향 을 돌 보 느 냐 하 는 것 이다.나 는 문 제 를 보고 바로 손 에 넣 었 는데 A 를 빨리 할 수 있 을 것 같 았 다. 결국 1 시간 이 걸 려 서 야 풀 었 는데 마지막 에 자신의 문제 의 뜻 을 제대로 이해 하지 못 했다 는 것 을 알 게 되 었 다.다음 부 터 는 생각 이 분명 해 지면 손 을 써 야 한다.
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
long long abs(long long a){
if(a>0)return a;
return -a;
}
long long solve(long long loc,long long n,long long dir){
long long res=0,t;
if(dir>0){
t=n-loc;
res=t/dir;
}
else{
t=loc-1;
res=t/(-dir);
}
return res;
}
int main(){
long long n,m,x,y,i,j,a,b,k,ans,r,c,temp;
while(cin>>n>>m){
ans=0;
cin>>x>>y;
cin>>k;
while(k--){
cin>>a>>b;
if(a==0&&b==0)continue;
if(x+a>=1&&x+a<=n&&y+b>=1&&y+b<=m){
if(a==0&&b==0)continue;
if(a==0&&b!=0){
temp=solve(y,m,b);
ans+=temp;
y+=temp*b;
continue;
}
if(b==0&&a!=0){
temp=solve(x,n,a);
ans+=temp;
x+=temp*a;
continue;
}
r=solve(x,n,a);
c=solve(y,m,b);
if(r>=c){
x+=c*a;
y+=c*b;
ans+=c;
}
else{
x+=r*a;
y+=r*b;
ans+=r;
}
}
}
cout<<ans<<endl;
}
return 0;
}
c 문 제 는 매번 길이 가 l 인 접 두 사 를 교환 해 야 한다 고 말 하지만 우 리 는 첫 번 째 교환 l, 두 번 째 교환 l - 1 로 바 꿀 수 있다. 그러면 두 단어 와 두 번 째 자 모 를 임의로 교환 할 수 있다.그 다음은 간단 한 배열 조합 곱셈 원리 다.(왜 그런 지 모 르 겠 지만 이 문 제 는 위의 문제 보다 훨씬 간단 한 것 같다)
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
bool vis[200];
char map[200][200];
long long num[200];
int main(){
long long n,m,i,j,ans;
while(cin>>n>>m){
ans=1;
for(i=0;i<n;i++){
cin>>map[i];
}
memset(num,0,sizeof(num));
for(i=0;i<m;i++){
memset(vis,0,sizeof(vis));
for(j=0;j<n;j++){
if(!vis[map[j][i]]){
vis[map[j][i]]=1;
num[i]++;
}
}
}
for(i=0;i<m;i++){
ans*=num[i];
ans%=1000000007;
}
cout<<ans%1000000007<<endl;
}
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
정수 반전Udemy 에서 공부 한 것을 중얼거린다 Chapter3【Integer Reversal】 (예) 문자열로 숫자를 반전 (toString, split, reverse, join) 인수의 수치 (n)가 0보다 위 또는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.